Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/modules/imaging/detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ def intersection_over_union(self, pred: 'BoundingBox') -> Optional[float]:
iou = intersection / self.union(pred)
return iou

def __repr__(self) -> str:
return f"pos: {self.position}, size: {self.size}"


class BaseDetector:
def predict(self, image: Image.Image) -> Optional[BoundingBox]:
Expand Down
22 changes: 13 additions & 9 deletions test/test_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from src.modules.imaging.detector import BaseDetector, BoundingBox, Vec2


class DebugLandingPadDetector(BaseDetector):
class DebugDetector(BaseDetector):

def __init__(self,
vector: Optional[Vec2] = None,
Expand All @@ -28,17 +28,20 @@ def predict(self, image: Image.Image) -> Optional[BoundingBox]:

def test_analysis_subscriber():
camera = DebugCamera("res/test-image.jpeg")
detector = DebugLandingPadDetector()
detector = DebugDetector()
location_provider = DebugLocationProvider()
location_provider.set_altitude(1.0)
analysis = ImageAnalysisDelegate(detector, camera, location_provider)

global detected
detected = None

def _callback(_image, lon, lat):
def _callback(_image, lon_lat):
global detected
detected = Vec2(lon, lat)

detected = None
if lon_lat:
detected = Vec2(lon_lat[0], lon_lat[1])

analysis.subscribe(_callback)

Expand All @@ -47,15 +50,16 @@ def _callback(_image, lon, lat):
assert detected is None
detector.bounding_box = BoundingBox(Vec2(20, 20), Vec2(50, 50))
analysis._analyze_image()
assert (detected -
Vec2(-115.48873916832288, 5.483286467459389e-06)).norm < 0.01
assert detected is not None
result = detected - Vec2(0.4158184416499504, -0.574961758930409)
assert result.norm < 0.01


class MockImageAnlaysisDebugger(ImageAnalysisDebugger):

def __init__(self):
self.image: Optional[Image.Image] = None
self.bounding_box: Optional[BoundingBox] = None
self.image: Image.Image | None = None
self.bounding_box: BoundingBox | None = None
self.is_visible = False

def show(self):
Expand All @@ -81,7 +85,7 @@ def set_bounding_box(self, bb: BoundingBox):

def test_analysis_debugger():
camera = DebugCamera("res/test-image.jpeg")
detector = DebugLandingPadDetector()
detector = DebugDetector()
debug = MockImageAnlaysisDebugger()
location_provider = DebugLocationProvider()
location_provider.set_altitude(1.0)
Expand Down