FaceSwap es una aplicación que creé originalmente como un ejercicio para mis estudiantes de "Matemáticas en Multimedia" en la Universidad Tecnológica de Varsovia. La aplicación está escrita en Python y utiliza alineación de rostros, optimización de Gauss Newton y combinación de imágenes para intercambiar el rostro de una persona vista por la cámara con el rostro de una persona en una imagen proporcionada.
Encontrará una breve presentación de las capacidades del programa en el siguiente vídeo (haga clic para ir a YouTube):
Para iniciar el programa tendrás que ejecutar un script de Python llamado zad2.py (en polaco para el ejercicio 2). Necesita tener Python 3 y algunas bibliotecas adicionales instaladas. Una vez que Python esté en su máquina, debería poder instalar automáticamente las bibliotecas ejecutando pip install -r requirements.txt
en el directorio raíz del repositorio.
También deberá descargar el modelo de alineación facial desde aquí: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 y descomprimirlo en el directorio principal del proyecto.
Una versión más rápida y estable de FaceSwap está disponible en Dropbox aquí. Esta nueva versión se basa en el método Deep Alignment Network, que es más rápido que el método utilizado actualmente si se ejecuta en una GPU y proporciona puntos de referencia faciales más estables y precisos. Consulte el repositorio GitHub de Deep Alignment Network para obtener instrucciones de configuración.
Espero encontrar tiempo para incluir pronto esta versión más rápida en el código del repositorio.
El esquema general del método es el siguiente:
Primero tomamos la imagen de entrada (la imagen de una persona que queremos ver en nuestro rostro) y buscamos la región del rostro y sus puntos de referencia. Una vez que hayamos ajustado el modelo 3D a esos puntos de referencia (más sobre esto más adelante), los vértices de ese modelo proyectados en el espacio de la imagen serán nuestras coordenadas de textura.
Una vez terminado y todo inicializado, la cámara comienza a capturar imágenes. Para cada imagen capturada se siguen los siguientes pasos:
El elemento más crucial de todo el proceso es la adaptación del modelo 3D. El modelo en sí consta de:
El modelo se proyecta en el espacio de la imagen mediante la siguiente ecuación:
donde s es la forma proyectada, a es el parámetro de escala, P son las dos primeras filas de una matriz de rotación que gira la forma de la cara 3D, S_0 es la forma de la cara neutra, w_1-n son los pesos de la forma combinada, S_1-n son los blendshapes, t es un vector de traducción 2D y n es el número de blendshapes.
El ajuste del modelo se logra minimizando la diferencia entre la forma proyectada y los puntos de referencia localizados. La minimización se logra con respecto a los pesos de las formas combinadas, el escalado, la rotación y la traslación, utilizando el método de Gauss Newton.
El código tiene la licencia MIT, algunos de los datos del proyecto se descargan de sitios web de terceros:
Si necesitas ayuda o si la aplicación te resultó útil, no dudes en hacérmelo saber.
Marek Kowalski [email protected], página web: http://home.elka.pw.edu.pl/~mkowals6/