File size: 1,853 Bytes
85fa7d2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
"""
Embedding Engine - Generación de vectores faciales
"""
from deepface import DeepFace
import numpy as np
from loguru import logger
class EmbeddingEngine:
"""
Genera embeddings faciales usando modelos de deep learning.
"""
SUPPORTED_MODELS = [
"VGG-Face", "Facenet", "Facenet512", "OpenFace",
"DeepFace", "DeepID", "ArcFace", "Dlib", "SFace"
]
def __init__(self, model="ArcFace"):
"""
Inicializa el motor de embeddings.
Args:
model: Modelo a usar (default: ArcFace - el más preciso)
"""
if model not in self.SUPPORTED_MODELS:
logger.warning(f"Modelo {model} no soportado, usando ArcFace")
model = "ArcFace"
self.model_name = model
logger.info(f"Embedding Engine inicializado con modelo: {model}")
def generate_embedding(self, face_image):
"""
Genera un vector de embedding para un rostro.
Args:
face_image: Imagen del rostro (numpy array RGB, 160x160)
Returns:
Vector numpy de embeddings o None si falla
"""
try:
# DeepFace espera un array numpy
embedding_obj = DeepFace.represent(
img_path=face_image,
model_name=self.model_name,
enforce_detection=False,
detector_backend='skip' # Ya hicimos detección con MTCNN
)
# Extraer el vector
embedding = np.array(embedding_obj[0]["embedding"])
logger.debug(f"Embedding generado: {len(embedding)} dimensiones")
return embedding
except Exception as e:
logger.error(f"Error generando embedding: {e}")
return None
|