from deepface import DeepFace import cv2 import os from modal_app.modal_app import verify_faces_remote from fastapi import UploadFile def face_verify_tool(img1: UploadFile, img2: UploadFile): img1_bytes = img1.file.read() img2_bytes = img2.file.read() results = verify_faces_remote(img1_bytes, img2_bytes) return results def verify_faces(img1_path, img2_path, model_name="Facenet", detector_backend="opencv"): """ Compares two face images and returns whether they belong to the same person. """ try: result = DeepFace.verify( img1_path, img2_path, model_name=model_name, detector_backend=detector_backend, enforce_detection=True ) return { "verified": result["verified"], "distance": result["distance"], "threshold": result["threshold"], "model": model_name } except Exception as e: return {"error": str(e)} def analyze_face(img_path, actions=["age", "gender", "emotion"], detector_backend="opencv"): """ Analyze attributes of a face in the image. """ try: analysis = DeepFace.analyze( img_path=img_path, actions=actions, detector_backend=detector_backend, enforce_detection=True ) return analysis[0] if isinstance(analysis, list) else analysis except Exception as e: return {"error": str(e)} def extract_embedding(img_path, model_name="Facenet", detector_backend="opencv"): """ Extract a face embedding from an image. """ try: embedding = DeepFace.represent( img_path=img_path, model_name=model_name, detector_backend=detector_backend, enforce_detection=True ) return embedding[0] if isinstance(embedding, list) else embedding except Exception as e: return {"error": str(e)}