From ab12995b8d173fb4ded644adf16a731a9ecc00cb Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 29 Jan 2025 06:45:40 -0700 Subject: [PATCH] Implement update topic --- frigate/comms/embeddings_updater.py | 1 + .../real_time/face_processor.py | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/frigate/comms/embeddings_updater.py b/frigate/comms/embeddings_updater.py index a2d0f8b29..58f012e7d 100644 --- a/frigate/comms/embeddings_updater.py +++ b/frigate/comms/embeddings_updater.py @@ -14,6 +14,7 @@ class EmbeddingsRequestEnum(Enum): embed_thumbnail = "embed_thumbnail" generate_search = "generate_search" register_face = "register_face" + reprocess_face = "reprocess_face" class EmbeddingsResponder: diff --git a/frigate/data_processing/real_time/face_processor.py b/frigate/data_processing/real_time/face_processor.py index 5b0d69179..7e0b3ed4b 100644 --- a/frigate/data_processing/real_time/face_processor.py +++ b/frigate/data_processing/real_time/face_processor.py @@ -5,6 +5,7 @@ import datetime import logging import os import random +import shutil import string from typing import Optional @@ -400,6 +401,34 @@ class FaceProcessor(RealTimeProcessorApi): "message": "Successfully registered face.", "success": True, } + elif topic == EmbeddingsRequestEnum.reprocess_face: + current_file = request_data["image_file"] + face_score = current_file[current_file.rfind("-") : current_file.rfind(".")] + img = None + + if current_file: + img = cv2.imread(current_file) + + if not img: + return { + "message": "Invalid image file.", + "success": False, + } + + res = self.__classify_face(img) + + if not res: + return + + sub_label, score = res + + if self.config.face_recognition.save_attempts: + # write face to library + folder = os.path.join(FACE_DIR, "train") + new_file = os.path.join( + folder, f"{id}-{sub_label}-{score}-{face_score}.webp" + ) + shutil.move(current_file, new_file) def expire_object(self, object_id: str): if object_id in self.detected_faces: