FaceSwap est une application que j'ai initialement créée comme exercice pour mes étudiants en "Mathématiques et multimédia" à l'Université de Technologie de Varsovie. L'application est écrite en Python et utilise l'alignement du visage, l'optimisation de Gauss Newton et la fusion d'images pour échanger le visage d'une personne vue par la caméra avec le visage d'une personne dans une image fournie.
Vous trouverez une courte présentation des capacités du programme dans la vidéo ci-dessous (cliquez pour aller sur YouTube) :
Pour démarrer le programme vous devrez exécuter un script Python nommé zad2.py (polonais pour l'exercice 2). Vous devez avoir installé Python 3 et quelques bibliothèques supplémentaires. Une fois Python sur votre ordinateur, vous devriez pouvoir installer automatiquement les bibliothèques en exécutant pip install -r requirements.txt
dans le répertoire racine du dépôt.
Vous devrez également télécharger le modèle d'alignement des visages à partir d'ici : http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 et le décompresser dans le répertoire principal du projet.
Une version plus rapide et plus stable de FaceSwap est disponible sur Dropbox ici. Cette nouvelle version est basée sur la méthode Deep Alignment Network, qui est plus rapide que la méthode actuellement utilisée si elle est exécutée sur un GPU et fournit des repères faciaux plus stables et plus précis. Veuillez consulter le référentiel GitHub de Deep Alignment Network pour les instructions de configuration.
J'espère trouver bientôt le temps d'inclure cette version plus rapide dans le code du dépôt.
Les grandes lignes de la méthode sont les suivantes :
Nous prenons d’abord l’image d’entrée (l’image d’une personne que nous voulons voir sur notre propre visage) et trouvons la région du visage et ses repères. Une fois que nous avons cela, nous adaptons le modèle 3D à ces points de repère (nous en parlerons plus tard), les sommets de ce modèle projetés dans l'espace image seront nos coordonnées de texture.
Une fois cela terminé et tout est initialisé, la caméra commence à capturer des images. Pour chaque image capturée, les étapes suivantes sont suivies :
L’élément le plus crucial de l’ensemble du processus est l’ajustement du modèle 3D. Le modèle lui-même se compose de :
Le modèle est projeté dans l'espace image à l'aide de l'équation suivante :
où s est la forme projetée, a est le paramètre de mise à l'échelle, P sont les deux premières lignes d'une matrice de rotation qui fait pivoter la forme du visage 3D, S_0 est la forme neutre du visage, w_1-n sont les poids de la forme de mélange, S_1-n sont les blendshapes, t est un vecteur de translation 2D et n est le nombre de blendshapes.
L'ajustement du modèle est réalisé en minimisant la différence entre la forme projetée et les points de repère localisés. La minimisation est réalisée en ce qui concerne les poids de forme de mélange, la mise à l'échelle, la rotation et la translation, en utilisant la méthode Gauss Newton.
Le code est sous licence MIT, certaines des données du projet sont téléchargées à partir de sites Web tiers :
Si vous avez besoin d'aide ou si vous avez trouvé l'application utile, n'hésitez pas à me le faire savoir.
Marek Kowalski [email protected], page d'accueil : http://home.elka.pw.edu.pl/~mkowals6/