Sobre el proyecto

face_recognition es una biblioteca de Python y una herramienta de línea de comandos para reconocer y manipular rostros. Está construida sobre los modelos de reconocimiento facial de vanguardia de dlib, y el archivo README reporta una precisión del 99.38% en el benchmark Labeled Faces in the Wild (LFW). Proporciona una API sencilla para localizar rostros, extraer rasgos faciales, calcular codificaciones faciales y comparar rostros para identificar personas. ## Características principales - Encuentra todos los rostros en una imagen con `face_locations()`, incluyendo un modelo CNN opcional basado en aprendizaje profundo para mayor precisión (requiere CUDA para un buen rendimiento). - Localiza y delinea rasgos faciales (ojos, nariz, boca, barbilla) con `face_landmarks()`, permitiendo aplicaciones como el maquillaje digital. - Identifica rostros comparando codificaciones faciales de 128 dimensiones generadas por `face_encodings()` y emparejadas mediante `compare_faces()`. - Incluye dos programas de línea de comandos: `face_recognition` para identificar personas conocidas en una carpeta de imágenes, y `face_detection` para obtener las coordenadas del cuadro delimitador del rostro. ## Instalación - Requiere Python 3.3+ o Python 2.7, en macOS o Linux. Windows no es oficialmente compatible, pero puede funcionar con las instrucciones proporcionadas por la comunidad. - `dlib` con enlaces de Python debe instalarse primero (compilar desde el código fuente en macOS/Ubuntu, o usar una máquina virtual preconfigurada). - Instalar mediante `pip3 install face_recognition` después de instalar `cmake` (por ejemplo, `brew install cmake` en macOS). - Se incluyen guías adicionales para plataformas como Nvidia Jetson Nano, Raspberry Pi 2+, FreeBSD (`pkg install graphics/py-face-recognition`) y Windows. - Se proporciona una imagen de Docker para facilitar el despliegue en hosts en la nube como Heroku o AWS. ## Ejemplo de uso (Python) ```python import face_recognition # Encontrar rostros en una imagen image = face_recognition.load_image_file("your_file.jpg") face_locations = face_recognition.face_locations(image) # Obtener rasgos faciales face_landmarks_list = face_recognition.face_landmarks(image) # Identificar a una persona known_image = face_recognition.load_image_file("biden.jpg") unknown_image = face_recognition.load_image_file("unknown.jpg") biden_encoding = face_recognition.face_encodings(known_image)[0] unknown_encoding = face_recognition.face_encodings(unknown_image)[0] results = face_recognition.compare_faces([biden_encoding], unknown_encoding) ``` ## Interfaz de línea de comandos - `face_recognition ./known_people/ ./unknown_pictures/` imprime una línea por cada rostro detectado, con el nombre del archivo y el nombre reconocido (o `unknown_person`). - `--tolerance 0.54` hace que la coincidencia sea más estricta; `--show-distance true` imprime la distancia facial calculada. - `--cpus 4` (o `-1` para todos los núcleos) permite el procesamiento paralelo en sistemas multinúcleo. - `face_detection ./folder_with_pictures/` imprime las coordenadas de píxeles superior, derecha, inferior e izquierda para cada rostro encontrado. ## Scripts de ejemplo El repositorio incluye muchos ejemplos, incluyendo: - Detección de rostros con el modelo HOG predeterminado y el modelo de aprendizaje profundo CNN. - Reconocimiento en tiempo real mediante cámara web (versiones simples y rápidas, requiere OpenCV). - Reconocimiento facial en archivos de video y en una Raspberry Pi con cámara. - Servicio web HTTP usando Flask. - Clasificadores de K-vecinos más cercanos (KNN) y SVM para entrenar con múltiples imágenes por persona. - Desenfoque de rostros en video de cámara web en vivo. ## Advertencias - El modelo de reconocimiento está entrenado con adultos y puede no funcionar bien con niños utilizando el umbral de comparación predeterminado de 0.6. - La precisión puede variar entre grupos étnicos; la wiki discute problemas de precisión conocidos. - Para el despliegue, se incluyen un Dockerfile e imágenes de Docker preconstruidas, con soporte de GPU para sistemas Linux que utilizan controladores Nvidia y nvidia-docker. Este proyecto es ampliamente utilizado como un envoltorio simple y de alto nivel para las capacidades de reconocimiento facial de dlib y es adecuado para la creación de prototipos y aplicaciones de producción donde se necesite detección e identificación facial.