diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 9a6934ba8..5eb06358d 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -76,7 +76,7 @@ class EmbeddingMaintainer(threading.Thread): self.processors: list[ProcessorApi] = [] if self.config.face_recognition.enabled: - self.processors.append(FaceProcessor(self.config.face_recognition, metrics)) + self.processors.append(FaceProcessor(self.config, metrics)) # create communication for updating event descriptions self.requestor = InterProcessRequestor() @@ -222,8 +222,8 @@ class EmbeddingMaintainer(threading.Thread): event_id, camera, updated_db = ended camera_config = self.config.cameras[camera] - if event_id in self.detected_faces: - self.detected_faces.pop(event_id) + for processor in self.processors: + processor.expire_object(event_id) if event_id in self.detected_license_plates: self.detected_license_plates.pop(event_id) diff --git a/frigate/postprocessing/face_processor.py b/frigate/postprocessing/face_processor.py index 7d4c6b250..a75158eb2 100644 --- a/frigate/postprocessing/face_processor.py +++ b/frigate/postprocessing/face_processor.py @@ -392,3 +392,7 @@ class FaceProcessor(ProcessorApi): "message": "Successfully registered face.", "success": True, } + + def expire_object(self, object_id: str): + if object_id in self.detected_faces: + self.detected_faces.pop(object_id) diff --git a/frigate/postprocessing/processor_api.py b/frigate/postprocessing/processor_api.py index 4d50d9b0f..974b6f1ee 100644 --- a/frigate/postprocessing/processor_api.py +++ b/frigate/postprocessing/processor_api.py @@ -30,7 +30,7 @@ class ProcessorApi(ABC): pass @abstractmethod - def handle_request(self, request_data: dict[str, any]) -> any | None: + def handle_request(self, request_data: dict[str, any]) -> dict[str, any] | None: """Handle metadata requests. Args: request_data (dict): containing data about requested change to process. @@ -39,3 +39,14 @@ class ProcessorApi(ABC): None if request was not handled, otherwise return response. """ pass + + @abstractmethod + def expire_object(self, object_id: str) -> None: + """Handle objects that are no longer detected. + Args: + object_id (str): id of object that is no longer detected. + + Returns: + None. + """ + pass