From 749010b512070d935cf9e83e8bbf74fde1e06182 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 6 Nov 2024 08:40:40 -0700 Subject: [PATCH] Clear classifier when new face is added --- frigate/embeddings/maintainer.py | 7 +++++-- frigate/util/model.py | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 7aac422a0..36e5ab037 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -140,13 +140,15 @@ class EmbeddingMaintainer(threading.Thread): self.embeddings.text_embedding([data])[0], pack=False ) elif topic == EmbeddingsRequestEnum.register_face.value: + if not self.face_recognition_enabled: + return False + if data.get("cropped"): self.embeddings.embed_face( data["face_name"], base64.b64decode(data["image"]), upsert=True, ) - return True else: img = cv2.imdecode( np.frombuffer( @@ -167,7 +169,8 @@ class EmbeddingMaintainer(threading.Thread): data["face_name"], webp.tobytes(), upsert=True ) - return False + self.face_classifier.clear_classifier() + return True except Exception as e: logger.error(f"Unable to handle embeddings request {e}") diff --git a/frigate/util/model.py b/frigate/util/model.py index bc1efec17..b2722165e 100644 --- a/frigate/util/model.py +++ b/frigate/util/model.py @@ -170,10 +170,14 @@ class FaceClassificationModel: self.classifier = SVC(kernel="linear", probability=True) self.classifier.fit(norms, labels) + def clear_classifier(self) -> None: + self.classifier = None + self.labeler = None + def classify_face( - self, embedding: np.ndarray, rebuild_classifier: bool = False + self, embedding: np.ndarray ) -> Optional[tuple[str, float]]: - if not self.classifier or rebuild_classifier: + if not self.classifier: self.__build_classifier() res = self.classifier.predict([embedding])