Misc fixes (#19089)

* Correctly handle min_faces

* Change to use recognized faces
This commit is contained in:
Nicolas Mowen 2025-07-11 06:30:26 -06:00 committed by GitHub
parent ee1db240d7
commit 5cf98824f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 7 additions and 6 deletions

View File

@ -67,7 +67,7 @@ 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.
- `min_faces`: Min face recognitions 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`.

View File

@ -561,7 +561,7 @@ 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)
# Optional: Min face recognitions 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

View File

@ -84,7 +84,7 @@ class FaceRecognitionConfig(FrigateBaseModel):
default=1,
gt=0,
le=6,
title="Min face attempts for the sub label to be applied to the person object.",
title="Min face recognitions 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."

View File

@ -303,9 +303,6 @@ 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(
@ -489,6 +486,10 @@ class FaceRealTimeProcessor(RealTimeProcessorApi):
best_name = max(weighted_scores, key=weighted_scores.get)
# If the number of faces for this person < min_faces, we are not confident it is a correct result
if counts[best_name] < self.face_config.min_faces:
return None, 0.0
# If the best name has the same number of results as another name, we are not confident it is a correct result
for name, count in counts.items():
if name != best_name and counts[best_name] == count: