faces_server_python_rknpu_o.../app/api/photos.py
2025-12-27 15:36:20 +01:00

56 lines
1.4 KiB
Python

from fastapi import APIRouter, UploadFile
import cv2
import numpy as np
import uuid
from app.core.detector import detect_faces
from app.core.embedder import get_embedding
from app.core.matcher import match_embedding
from app.storage import save_raw_photo, save_processed_photo
router = APIRouter()
@router.post("/upload")
async def upload_photo(file: UploadFile):
# Leggi immagine
img_bytes = await file.read()
img = np.frombuffer(img_bytes, np.uint8)
img = cv2.imdecode(img, cv2.IMREAD_COLOR)
# Salva raw
filename = f"{uuid.uuid4().hex}.jpg"
save_raw_photo(filename, img)
# Detection
boxes = detect_faces(img)
results = []
# Disegna bounding box
processed = img.copy()
for box in boxes:
x1, y1, x2, y2 = box
face = img[y1:y2, x1:x2]
emb = get_embedding(face)
match = match_embedding(emb)
# Disegna box
color = (0, 255, 0) if match else (0, 0, 255)
cv2.rectangle(processed, (x1, y1), (x2, y2), color, 2)
if match:
cv2.putText(processed, match["name"], (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2)
results.append({
"box": box,
"match": match
})
# Salva immagine processata
save_processed_photo(filename, processed)
return {
"file": filename,
"faces": results
}