Clear classifier when new face is added

This commit is contained in:
Nicolas Mowen 2024-11-06 08:40:40 -07:00
parent 509a9d7863
commit 749010b512
2 changed files with 11 additions and 4 deletions

View File

@ -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}")

View File

@ -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])