mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-18 09:04:28 +03:00
Add min score
This commit is contained in:
parent
f744062e16
commit
b7f7f3357e
@ -23,17 +23,23 @@ class SemanticSearchConfig(FrigateBaseModel):
|
|||||||
|
|
||||||
class FaceRecognitionConfig(FrigateBaseModel):
|
class FaceRecognitionConfig(FrigateBaseModel):
|
||||||
enabled: bool = Field(default=False, title="Enable face recognition.")
|
enabled: bool = Field(default=False, title="Enable face recognition.")
|
||||||
|
min_score: float = Field(
|
||||||
|
title="Minimum face distance score required to save the attempt.",
|
||||||
|
default=0.8,
|
||||||
|
gt=0.0,
|
||||||
|
le=1.0,
|
||||||
|
)
|
||||||
threshold: float = Field(
|
threshold: float = Field(
|
||||||
default=170,
|
default=0.9,
|
||||||
title="minimum face distance score required to be considered a match.",
|
title="Minimum face distance score required to be considered a match.",
|
||||||
gt=0.0,
|
gt=0.0,
|
||||||
le=1.0,
|
le=1.0,
|
||||||
)
|
)
|
||||||
min_area: int = Field(
|
min_area: int = Field(
|
||||||
default=500, title="Min area of face box to consider running face recognition."
|
default=500, title="Min area of face box to consider running face recognition."
|
||||||
)
|
)
|
||||||
debug_save_images: bool = Field(
|
save_attempts: bool = Field(
|
||||||
default=False, title="Save images of face detections for debugging."
|
default=True, title="Save images of face detections for training."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -515,13 +515,19 @@ class EmbeddingMaintainer(threading.Thread):
|
|||||||
f"Detected best face for person as: {sub_label} with probability {score} and overall face score {face_score}"
|
f"Detected best face for person as: {sub_label} with probability {score} and overall face score {face_score}"
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.config.face_recognition.debug_save_images:
|
if self.config.face_recognition.save_attempts:
|
||||||
# write face to library
|
# write face to library
|
||||||
folder = os.path.join(FACE_DIR, "debug")
|
folder = os.path.join(FACE_DIR, "debug")
|
||||||
file = os.path.join(folder, f"{id}-{sub_label}-{score}-{face_score}.webp")
|
file = os.path.join(folder, f"{id}-{sub_label}-{score}-{face_score}.webp")
|
||||||
os.makedirs(folder, exist_ok=True)
|
os.makedirs(folder, exist_ok=True)
|
||||||
cv2.imwrite(file, face_frame)
|
cv2.imwrite(file, face_frame)
|
||||||
|
|
||||||
|
if score < self.config.face_recognition.threshold:
|
||||||
|
logger.debug(
|
||||||
|
f"Recognized face distance {score} is less than threshold {self.config.face_recognition.threshold}"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
if id in self.detected_faces and face_score <= self.detected_faces[id]:
|
if id in self.detected_faces and face_score <= self.detected_faces[id]:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Recognized face distance {score} and overall score {face_score} is less than previous overall face score ({self.detected_faces.get(id)})."
|
f"Recognized face distance {score} and overall score {face_score} is less than previous overall face score ({self.detected_faces.get(id)})."
|
||||||
|
|||||||
@ -166,7 +166,7 @@ class FaceClassificationModel:
|
|||||||
self.landmark_detector.loadModel("/config/model_cache/facedet/landmarkdet.yaml")
|
self.landmark_detector.loadModel("/config/model_cache/facedet/landmarkdet.yaml")
|
||||||
self.recognizer: cv2.face.LBPHFaceRecognizer = (
|
self.recognizer: cv2.face.LBPHFaceRecognizer = (
|
||||||
cv2.face.LBPHFaceRecognizer_create(
|
cv2.face.LBPHFaceRecognizer_create(
|
||||||
radius=2, threshold=(1 - config.threshold) * 1000
|
radius=2, threshold=(1 - config.min_score) * 1000
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
self.label_map: dict[int, str] = {}
|
self.label_map: dict[int, str] = {}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user