FaceSwap ist eine App, die ich ursprünglich als Übung für meine Studenten im Studiengang „Mathematik in Multimedia“ an der Technischen Universität Warschau erstellt habe. Die App ist in Python geschrieben und nutzt Gesichtsausrichtung, Gauss-Newton-Optimierung und Bildmischung, um das Gesicht einer von der Kamera gesehenen Person mit dem Gesicht einer Person in einem bereitgestellten Bild auszutauschen.
Eine kurze Präsentation der Möglichkeiten des Programms finden Sie im folgenden Video (klicken Sie hier, um zu YouTube zu gelangen):
Um das Programm zu starten, müssen Sie ein Python-Skript namens zad2.py (Polnisch für Übung 2) ausführen. Sie müssen Python 3 und einige zusätzliche Bibliotheken installiert haben. Sobald Python auf Ihrem Computer installiert ist, sollten Sie in der Lage sein, die Bibliotheken automatisch zu installieren, indem Sie pip install -r requirements.txt
im Stammverzeichnis des Repos ausführen.
Sie müssen auch das Gesichtsausrichtungsmodell von hier herunterladen: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 und es in das Hauptprojektverzeichnis entpacken.
Eine schnellere und stabilere Version von FaceSwap ist hier auf Dropbox verfügbar. Diese neue Version basiert auf der Deep Alignment Network-Methode, die bei Ausführung auf einer GPU schneller als die derzeit verwendete Methode ist und stabilere und präzisere Gesichtsmarkierungen liefert. Anweisungen zur Einrichtung finden Sie im GitHub-Repository von Deep Alignment Network.
Ich hoffe, dass ich bald Zeit finde, diese schnellere Version in den Repo-Code aufzunehmen.
Der allgemeine Überblick über die Methode ist wie folgt:
Zuerst nehmen wir das Eingabebild (das Bild einer Person, die wir auf unserem eigenen Gesicht sehen möchten) und suchen den Gesichtsbereich und seine Orientierungspunkte. Sobald wir wissen, dass wir das 3D-Modell an diese Orientierungspunkte anpassen (dazu später mehr), sind die auf den Bildraum projizierten Scheitelpunkte dieses Modells unsere Texturkoordinaten.
Sobald dies abgeschlossen und alles initialisiert ist, beginnt die Kamera mit der Aufnahme von Bildern. Für jedes aufgenommene Bild werden die folgenden Schritte durchgeführt:
Das wichtigste Element des gesamten Prozesses ist die Anpassung des 3D-Modells. Das Modell selbst besteht aus:
Das Modell wird mit der folgenden Gleichung in den Bildraum projiziert:
Dabei ist s die projizierte Form, a der Skalierungsparameter, P die ersten beiden Zeilen einer Rotationsmatrix, die die 3D-Gesichtsform dreht, S_0 die neutrale Gesichtsform, w_1-n die Blendshape-Gewichte und S_1-n die Blendshapes, t ist ein 2D-Translationsvektor und n ist die Anzahl der Blendshapes.
Die Modellanpassung erfolgt durch Minimierung der Differenz zwischen der projizierten Form und den lokalisierten Orientierungspunkten. Die Minimierung wird in Bezug auf die Blendshape-Gewichte, Skalierung, Rotation und Translation mithilfe der Gauss-Newton-Methode erreicht.
Der Code ist unter der MIT-Lizenz lizenziert, einige der Daten im Projekt werden von Websites Dritter heruntergeladen:
Wenn Sie Hilfe benötigen oder die App hilfreich fanden, zögern Sie nicht, mir Bescheid zu geben.
Marek Kowalski [email protected], Homepage: http://home.elka.pw.edu.pl/~mkowals6/