| 79 | |
| 80 | |
| 81 | class DetectorProcess(Process): |
| 82 | |
| 83 | def __init__( |
| 84 | self, |
| 85 | device: str, |
| 86 | dark_exposure: int, |
| 87 | threshold: int, |
| 88 | backend_factory: partial, |
| 89 | display: bool = True, |
| 90 | check_movement=True, |
| 91 | ): |
| 92 | super().__init__() |
| 93 | self._request_detections_queue = RequestDetectionsQueue() # {led_id, view_id} |
| 94 | self._output_queues: list[Queue2D] = [] # LED3D |
| 95 | self._led_count: Queue = Queue() |
| 96 | self._led_count.cancel_join_thread() |
| 97 | self._input_3d_info_queue = Queue3DInfo() |
| 98 | self._exit_event = Event() |
| 99 | |
| 100 | self._device = device |
| 101 | self._dark_exposure = dark_exposure |
| 102 | self._threshold = threshold |
| 103 | self._led_backend_factory = backend_factory |
| 104 | self._display = display |
| 105 | self._check_movement = check_movement |
| 106 | |
| 107 | def get_input_3d_info_queue(self): |
| 108 | return self._input_3d_info_queue |
| 109 | |
| 110 | def get_request_detections_queue(self) -> RequestDetectionsQueue: |
| 111 | return self._request_detections_queue |
| 112 | |
| 113 | def add_output_queue(self, queue: Queue2D): |
| 114 | self._output_queues.append(queue) |
| 115 | |
| 116 | def detect(self, led_id_from: int, led_id_to: int, view_id: int): |
| 117 | self._request_detections_queue.request(led_id_from, led_id_to, view_id) |
| 118 | |
| 119 | def get_led_count(self): |
| 120 | return self._led_count.get() |
| 121 | |
| 122 | def stop(self): |
| 123 | self._exit_event.set() |
| 124 | |
| 125 | def put_in_all_output_queues(self, control: DetectionControlEnum, data): |
| 126 | for queue in self._output_queues: |
| 127 | queue.put(control, data) |
| 128 | |
| 129 | def run(self): |
| 130 | |
| 131 | led_backend = self._led_backend_factory() |
| 132 | |
| 133 | self._led_count.put(led_backend.get_led_count()) |
| 134 | |
| 135 | cam = Camera(self._device) |
| 136 | |
| 137 | timeout_controller = TimeoutController() |
| 138 | |