Skip to content

Commit 5a7f52b

Browse files
authored
Merge pull request #1251 from roflcoopter/feature/reload-obj-det
feat(object_detector): prepare object detector for config reload
2 parents 94b65e3 + ddeac43 commit 5a7f52b

File tree

3 files changed

+58
-23
lines changed

3 files changed

+58
-23
lines changed

viseron/domains/object_detector/__init__.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,8 @@ def __init__(
303303
ObjectDetectedBinarySensorFoVLabel(
304304
vis, object_filter[CONFIG_LABEL_LABEL], self._camera
305305
),
306+
DOMAIN,
307+
camera_identifier,
306308
)
307309

308310
self.zones: list[Zone] = []
@@ -360,8 +362,18 @@ def __init__(
360362
)
361363
self._scan_on_motion_only = False
362364

363-
vis.add_entity(component, ObjectDetectedBinarySensorFoV(vis, self._camera))
364-
vis.add_entity(component, ObjectDetectorFPSSensor(vis, self, self._camera))
365+
vis.add_entity(
366+
component,
367+
ObjectDetectedBinarySensorFoV(vis, self._camera),
368+
DOMAIN,
369+
camera_identifier,
370+
)
371+
vis.add_entity(
372+
component,
373+
ObjectDetectorFPSSensor(vis, self, self._camera),
374+
DOMAIN,
375+
camera_identifier,
376+
)
365377

366378
def __post_init__(self, *args, **kwargs):
367379
"""Post init hook."""
@@ -603,7 +615,14 @@ def result_failed_callback(self):
603615
detector.
604616
"""
605617

618+
def unload(self) -> None:
619+
"""Unload object detector."""
620+
for unsubscribe in self._listeners:
621+
unsubscribe()
622+
self.stop()
623+
606624
def stop(self) -> None:
607625
"""Stop object detector."""
608626
self._kill_received = True
627+
self._object_detection_thread.stop()
609628
self._object_detection_thread.join()

viseron/domains/object_detector/binary_sensor.py

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,14 @@ def __init__(
3131

3232
def setup(self) -> None:
3333
"""Set up event listener."""
34-
self._vis.listen_event(
35-
EVENT_SCAN_FRAMES.format(
36-
camera_identifier=self._camera.identifier, scanner_name=OBJECT_DETECTOR
37-
),
38-
self.handle_stop_scan,
34+
self._event_listeners.append(
35+
self._vis.listen_event(
36+
EVENT_SCAN_FRAMES.format(
37+
camera_identifier=self._camera.identifier,
38+
scanner_name=OBJECT_DETECTOR,
39+
),
40+
self.handle_stop_scan,
41+
)
3942
)
4043

4144
@property
@@ -77,9 +80,11 @@ def __init__(
7780
self.object_id = f"{camera.identifier}_object_detected"
7881
self.name = f"{camera.name} Object Detected"
7982

80-
vis.listen_event(
81-
EVENT_OBJECTS_IN_FOV.format(camera_identifier=camera.identifier),
82-
self.handle_event,
83+
self._event_listeners.append(
84+
vis.listen_event(
85+
EVENT_OBJECTS_IN_FOV.format(camera_identifier=camera.identifier),
86+
self.handle_event,
87+
)
8388
)
8489

8590

@@ -96,11 +101,13 @@ def __init__(
96101
self.object_id = f"{camera.identifier}_zone_{zone.name}_object_detected"
97102
self.name = f"{camera.name} Zone {zone.name} Object Detected"
98103

99-
vis.listen_event(
100-
EVENT_OBJECTS_IN_ZONE.format(
101-
camera_identifier=camera.identifier, zone_name=zone.name
102-
),
103-
self.handle_event,
104+
self._event_listeners.append(
105+
vis.listen_event(
106+
EVENT_OBJECTS_IN_ZONE.format(
107+
camera_identifier=camera.identifier, zone_name=zone.name
108+
),
109+
self.handle_event,
110+
)
104111
)
105112

106113

@@ -164,9 +171,11 @@ def __init__(
164171
self.object_id = f"{camera.identifier}_object_detected_{label}"
165172
self.name = f"{camera.name} Object Detected {label.capitalize()}"
166173

167-
vis.listen_event(
168-
EVENT_OBJECTS_IN_FOV.format(camera_identifier=camera.identifier),
169-
self.handle_event,
174+
self._event_listeners.append(
175+
vis.listen_event(
176+
EVENT_OBJECTS_IN_FOV.format(camera_identifier=camera.identifier),
177+
self.handle_event,
178+
)
170179
)
171180

172181

@@ -186,9 +195,11 @@ def __init__(
186195
f"{camera.name} Zone {zone.name} Object Detected {label.capitalize()}"
187196
)
188197

189-
vis.listen_event(
190-
EVENT_OBJECTS_IN_ZONE.format(
191-
camera_identifier=camera.identifier, zone_name=zone.name
192-
),
193-
self.handle_event,
198+
self._event_listeners.append(
199+
vis.listen_event(
200+
EVENT_OBJECTS_IN_ZONE.format(
201+
camera_identifier=camera.identifier, zone_name=zone.name
202+
),
203+
self.handle_event,
204+
)
194205
)

viseron/domains/object_detector/zone.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
CONFIG_COORDINATES,
1919
CONFIG_LABELS,
2020
CONFIG_ZONE_NAME,
21+
DOMAIN,
2122
EVENT_OBJECTS_IN_ZONE,
2223
)
2324

@@ -67,6 +68,8 @@ def __init__(
6768
ObjectDetectedBinarySensorZoneLabel(
6869
vis, self, object_filter[CONFIG_LABEL_LABEL], self._camera
6970
),
71+
DOMAIN,
72+
camera_identifier,
7073
)
7174

7275
else:
@@ -77,6 +80,8 @@ def __init__(
7780
vis.add_entity(
7881
component,
7982
ObjectDetectedBinarySensorZone(vis, self, self._camera),
83+
DOMAIN,
84+
camera_identifier,
8085
)
8186

8287
def filter_zone(

0 commit comments

Comments
 (0)