bump project
This commit is contained in:
44
app/recognition/routes.py
Normal file
44
app/recognition/routes.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from flask import Blueprint, current_app, jsonify, request
|
||||
|
||||
from app.models import Person, Role
|
||||
from app.services.attendance import last_presence_summary
|
||||
from app.services.recognition import RecognitionUnavailable, recognize_faces
|
||||
from app.services.security import roles_required
|
||||
|
||||
bp = Blueprint("recognition", __name__, url_prefix="/recognition")
|
||||
|
||||
|
||||
@bp.post("/identify")
|
||||
@roles_required(Role.ADMIN, Role.OPERATOR)
|
||||
def identify():
|
||||
image = request.form.get("image", "")
|
||||
if not image:
|
||||
return jsonify({"error": "No image was provided."}), 400
|
||||
|
||||
people = Person.query.filter_by(active=True).all()
|
||||
try:
|
||||
result = recognize_faces(image, people, tolerance=current_app.config["FACE_MATCH_TOLERANCE"])
|
||||
except RecognitionUnavailable as exc:
|
||||
return jsonify({"error": str(exc)}), 503
|
||||
except ValueError as exc:
|
||||
return jsonify({"error": str(exc)}), 400
|
||||
|
||||
faces = []
|
||||
for face in result.faces:
|
||||
if not face.person:
|
||||
faces.append({"matched": False, "confidence": None})
|
||||
continue
|
||||
faces.append(
|
||||
{
|
||||
"matched": True,
|
||||
"person_id": face.person.id,
|
||||
"full_name": face.person.full_name,
|
||||
"employee_id": face.person.employee_id,
|
||||
"confidence": round(face.confidence, 3) if face.confidence is not None else None,
|
||||
"last_presence": last_presence_summary(face.person),
|
||||
}
|
||||
)
|
||||
|
||||
return jsonify({"faces": faces, "annotated_image": result.annotated_image})
|
||||
Reference in New Issue
Block a user