From b18572a3b6da43a0205910414a32c80a5c219b31 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sun, 18 May 2025 06:20:59 -0600 Subject: [PATCH] Min face configuration option (#18284) * Add option to specify minimum face attempts for an object * Set upper bound --- docs/docs/configuration/face_recognition.md | 2 ++ docs/docs/configuration/reference.md | 2 ++ frigate/config/classification.py | 6 ++++++ frigate/data_processing/real_time/face.py | 3 +++ 4 files changed, 13 insertions(+) diff --git a/docs/docs/configuration/face_recognition.md b/docs/docs/configuration/face_recognition.md index e7a773d98..3082e46d0 100644 --- a/docs/docs/configuration/face_recognition.md +++ b/docs/docs/configuration/face_recognition.md @@ -65,6 +65,8 @@ Fine-tune face recognition with these optional parameters at the global level of - Default: `0.8`. - `recognition_threshold`: Recognition confidence score required to add the face to the object as a sub label. - Default: `0.9`. +- `min_faces`: Min face attempts for the sub label to be applied to the person object. + - Default: `1` - `save_attempts`: Number of images of recognized faces to save for training. - Default: `100`. - `blur_confidence_filter`: Enables a filter that calculates how blurry the face is and adjusts the confidence based on this. diff --git a/docs/docs/configuration/reference.md b/docs/docs/configuration/reference.md index dbea03678..0b9428701 100644 --- a/docs/docs/configuration/reference.md +++ b/docs/docs/configuration/reference.md @@ -559,6 +559,8 @@ face_recognition: recognition_threshold: 0.9 # Optional: Min area of detected face box to consider running face recognition (default: shown below) min_area: 500 + # Optional: Min face attempts for the sub label to be applied to the person object (default: shown below) + min_faces: 1 # Optional: Number of images of recognized faces to save for training (default: shown below) save_attempts: 100 # Optional: Apply a blur quality filter to adjust confidence based on the blur level of the image (default: shown below) diff --git a/frigate/config/classification.py b/frigate/config/classification.py index 6733ade86..4c34f8ab3 100644 --- a/frigate/config/classification.py +++ b/frigate/config/classification.py @@ -80,6 +80,12 @@ class FaceRecognitionConfig(FrigateBaseModel): min_area: int = Field( default=750, title="Min area of face box to consider running face recognition." ) + min_faces: int = Field( + default=1, + gt=0, + le=6, + title="Min face attempts for the sub label to be applied to the person object.", + ) save_attempts: int = Field( default=100, ge=0, title="Number of face attempts to save in the train tab." ) diff --git a/frigate/data_processing/real_time/face.py b/frigate/data_processing/real_time/face.py index dadad0fad..963a3e73a 100644 --- a/frigate/data_processing/real_time/face.py +++ b/frigate/data_processing/real_time/face.py @@ -302,6 +302,9 @@ class FaceRealTimeProcessor(RealTimeProcessorApi): self.person_face_history[id] ) + if len(self.person_face_history[id]) < self.face_config.min_faces: + weighted_sub_label = "unknown" + self.requestor.send_data( "tracked_object_update", json.dumps(