Add API for reprocessing face

This commit is contained in:
Nicolas Mowen 2025-01-29 06:48:14 -07:00
parent ab12995b8d
commit 2615ee669c
3 changed files with 39 additions and 1 deletions

View File

@ -100,6 +100,39 @@ def train_face(request: Request, name: str, body: dict = None):
)
@router.post("/faces/train/{name}/reprocess")
def reclassify_face(request: Request, name: str, body: dict = None):
if not request.app.frigate_config.face_recognition.enabled:
return JSONResponse(
status_code=400,
content={"message": "Face recognition is not enabled.", "success": False},
)
json: dict[str, any] = body or {}
training_file = os.path.join(
FACE_DIR, f"train/{sanitize_filename(json.get('training_file', ''))}"
)
if not training_file or not os.path.isfile(training_file):
return JSONResponse(
content=(
{
"success": False,
"message": f"Invalid filename or no file exists: {training_file}",
}
),
status_code=404,
)
context: EmbeddingsContext = request.app.embeddings
response = context.reprocess_face()
return JSONResponse(
content=response,
status_code=200,
)
@router.post("/faces/{name}/delete")
def deregister_faces(request: Request, name: str, body: dict = None):
if not request.app.frigate_config.face_recognition.enabled:

View File

@ -401,7 +401,7 @@ class FaceProcessor(RealTimeProcessorApi):
"message": "Successfully registered face.",
"success": True,
}
elif topic == EmbeddingsRequestEnum.reprocess_face:
elif topic == EmbeddingsRequestEnum.reprocess_face.value:
current_file = request_data["image_file"]
face_score = current_file[current_file.rfind("-") : current_file.rfind(".")]
img = None

View File

@ -211,6 +211,11 @@ class EmbeddingsContext:
return self.db.execute_sql(sql_query).fetchall()
def reprocess_face(self, face_file: str) -> dict[str, any]:
return self.requestor.send_data(
EmbeddingsRequestEnum.reprocess_face.value, {"image_file": face_file}
)
def clear_face_classifier(self) -> None:
self.requestor.send_data(
EmbeddingsRequestEnum.clear_face_classifier.value, None