>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

Seguimiento facial rápido basado en CPU sin marcos pesados de redes neuronales

OSF.png

Si alguna vez has intentado animar un avatar 3D o personaje en tiempo real desde una webcam normal, probablemente te has enfrentado a un dilema. O usas modelos pesados que devoran tu tarjeta gráfica y la mitad de tu procesador, o el resultado se convierte en una máscara entrecortada con un retraso de medio segundo. Para streaming de juegos, esto es un desastre, ya que la GPU ya está cargada con la renderización.

El desarrollador conocido como emilianavt se encontró exactamente con este problema al crear herramientas para VTubers. El resultado fue OpenSeeFace. Esta biblioteca ligera de seguimiento facial y de landmarks está optimizada para CPU y ofrece 30–60 fps estables incluso en hardware antiguo.

Qué hay bajo el capó y por qué funciona rápido

El proyecto no pretende ser un programa de animación de avatares con todas las funciones. Es un rastreador especializado. Captura video de una webcam o archivo, detecta la cara, calcula las coordenadas de los landmarks y envía los datos listos a través de UDP.

El modelo se entrenó originalmente en MobileNetV3 con PyTorch. Pero en Windows, la inferencia de PyTorch CPU era lenta. El autor convirtió la red a formato ONNX y cambió la ejecución a onnxruntime. Las builds de lanzamiento incluyen una compilación personalizada de ONNX Runtime sin telemetría innecesaria.

La arquitectura del rastreador resuelve varias tareas aplicadas a la vez:

  • La captura y la inferencia están separadas en un script Python independiente o binario. Si el programa principal (por ejemplo, un juego de Unity) falla, la tubería no arrastrará la cámara con ella.
  • La transmisión de coordenadas por UDP significa que puedes ejecutar el seguimiento en una laptop antigua mientras ejecutas el juego o la escena 3D en tu PC principal. Esto ahorra recursos y protege al streamer de mostrar accidentalmente su cara real en la transmisión.
  • El modelo se entrenó en los conjuntos de datos LS3D-W, WFLW, MPIIGaze y ojos sintéticos de UnityEyes. Se utilizó una variante personalizada de Adaptive Wing Loss para la función de pérdida.

Un detalle interesante: el autor adaptó los landmarks específicamente para animación de avatares, no para benchmarks académicos. El etiquetado es similar a iBUG 68, pero con contornos casi 3D. Incluso si las coordenadas del vector de mirada están ligeramente desviadas en valores absolutos, el algoritmo detecta con precisión el parpadeo y la forma de la boca durante el habla.

Results1.png

Results2.png

En comparación con Google MediaPipe, el seguimiento de OpenSeeFace se mantiene mejor durante giros bruscos de cabeza, poca iluminación y ruido de webcams baratas. La boca se reconoce con mayor precisión, aunque el seguimiento del área de los ojos queda por debajo de algunas soluciones especializadas.

EmiFace.png

Niveles de modelos para cualquier hardware

El repositorio incluye varios modelos preconstruidos con diferentes compensaciones de precisión-velocidad. La selección se establece a través del argumento --model:

  • Modelo -1: modo para procesadores muy débiles. Ofrece hasta 213 fps en un solo núcleo sin seguimiento de mirada, pero el seguimiento es muy burdo.
  • Modelo 0: modelo rápido con precisión básica (~68 fps).
  • Modelo 1: compromiso equilibrado entre velocidad y calidad (~59 fps).
  • Modelo 2: buen seguimiento con uso moderado de recursos (~50 fps).
  • Modelo 3: opción predeterminada y más precisa (~44 fps en un solo núcleo).

En realidad, rara vez necesitas más de 30 fps para la captura de expresiones faciales, por lo que el script puede limitar la tasa de cuadros para ahorrar tiempo de CPU.

Cómo iniciar el rastreador

Trabajar con el código requiere Python 3.6 a 3.9 y un conjunto mínimo de bibliotecas:

pip install onnxruntime opencv-python pillow numpy

Si no quieres lidiar con el entorno de Python, la sección de Releases tiene un archivo listo con facetracker.exe, construido con pyinstaller.

El lanzamiento básico con visualización se ve así:

python facetracker.py --visualize 3 --pnp-points 1 --max-threads 4 -c 0

El indicador -c 0 especifica el índice de la webcam. Si necesitas procesar un video pregrabado, pasa la ruta del archivo en su lugar video.mp4.

Integración con Unity y otros motores

El repositorio incluye scripts C# listos para usar para Unity. El componente OpenSee escucha los paquetes UDP entrantes en un hilo en segundo plano y almacena las coordenadas en el campo público trackingData.

Para conectar el rastreador a una escena, solo se necesitan unos pocos pasos:

  1. Añade los componentes OpenSee y OpenSeeShowPoints a un GameObject vacío.
  2. Ejecuta la escena en el editor de Unity.
  3. Inicia el script facetracker.py. Los puntos faciales aparecerán inmediatamente en el espacio de la escena.
  4. Para controlar la cabeza de un personaje, puedes conectar el componente OpenSeeIKTarget junto con FinalIK.

El administrador integrado OpenSeeLauncher puede iniciarse solo y terminar correctamente el binario del rastreador a través de WinAPI Job Objects. Si tu aplicación de Unity falla con un error, el proceso hijo del rastreador no permanecerá colgado en memoria.

Detección de emociones a través de LIBSVM

Más allá de las coordenadas de los landmarks, el proyecto incluye el componente OpenSeeExpression. Resuelve la tarea de clasificación de emociones (sonrisa, enojo, sorpresa) para una persona específica.

En lugar de intentar entrenar una red neuronal general para todos en el planeta, el autor usó un clasificador SVM. El usuario calibra el sistema él mismo:

  • Ingresa el nombre de la emoción en el inspector de Unity.
  • Realiza la expresión facial requerida y habilita la grabación.
  • Gira la cabeza y habla para que el modelo recuerde las distorsiones miméticas en movimiento.
  • Presiona Entrenar.

El modelo entrenado se guarda en un archivo separado y se carga en el próximo inicio de la aplicación.

Dónde ya se usa

OpenSeeFace se ha convertido en la base de varias herramientas populares de animación:

  • VSeeFace: programa VTuber gratuito con soporte para formatos VRM y VSFAvatar.
  • VTube Studio: herramienta para controlar modelos 2D Live2D a través de webcam.
  • VPUPPR: renderizador de avatares abierto en el motor Godot.

A quién le será útil este proyecto

La biblioteca es ideal para desarrolladores de juegos e instalaciones interactivas que necesitan captura facial rápida sin comprar cascos caros o iPhones con TrueDepth. El código se distribuye bajo la licencia permisiva BSD 2-Clause, por lo que puedes integrarlo de forma segura en proyectos comerciales.

Si necesitas reconocer detalles retinianos finos o construir una máscara 3D poligonal de submilímetro de precisión para fines médicos, OpenSeeFace no funcionará. Pero para animación de personajes, control de interfaz por movimiento de cabeza y streaming, es una de las soluciones más prácticas y ligeras en GitHub.

Proyectos relacionados