Schnelle CPU-basierte Gesichtserkennung ohne schwere neuronale Netzwerk-Frameworks

Wenn du jemals versucht hast, ein 3D-Avatar oder einen Charakter in Echtzeit von einer normalen Webcam aus zu animieren, standest du wahrscheinlich vor einem Dilemma. Entweder verwendest du schwere Modelle, die deine Grafikkarte und die Hälfte deines Prozessors verbrauchen, oder das Ergebnis wird eine ruckelige Maske mit halbsekündiger Verzögerung. Für Game-Streaming ist das eine Katastrophe, da die GPU bereits mit dem Rendern ausgelastet ist.
Der Entwickler, bekannt als emilianavt, stieß genau auf dieses Problem bei der Erstellung von Tools für VTuber. Das Ergebnis war OpenSeeFace. Diese leichtgewichtige Gesichts- und Landmarken-Tracking-Bibliothek ist für die CPU optimiert und liefert stabile 30–60 fps selbst auf älterer Hardware.
Was steckt unter der Haube und warum es schnell funktioniert
Das Projekt zielt nicht darauf ab, ein vollwertiges Avatar-Animationsprogramm zu sein. Es ist ein spezialisierter Tracker. Es erfasst Video von einer Webcam oder Datei, erkennt das Gesicht, berechnet Landmarken-Koordinaten und sendet die fertigen Daten über UDP.
Das Modell wurde ursprünglich in MobileNetV3 in PyTorch trainiert. Aber unter Windows war die PyTorch CPU-Inferenz langsam. Der Autor konvertierte das Netzwerk in das ONNX-Format und wechselte die Ausführung zu onnxruntime. Die Release-Builds enthalten einen benutzerdefinierten ONNX Runtime Build ohne unnötige Telemetrie.
Die Architektur des Trackers löst mehrere angewandte Aufgaben gleichzeitig:
- Erfassung und Inferenz sind in ein eigenständiges Python-Skript oder eine Binärdatei getrennt. Wenn das Hauptprogramm (z.B. ein Unity-Spiel) abstürzt, zieht die Pipeline die Kamera nicht mit herunter.
- Die UDP-Koordinatenübertragung bedeutet, dass du das Tracking auf einem alten Laptop ausführen kannst, während du das Spiel oder die 3D-Szene auf deinem Haupt-PC laufen lässt. Das spart Ressourcen und schützt den Streamer davor, versehentlich sein echtes Gesicht im Stream zu zeigen.
- Das Modell wurde auf LS3D-W, WFLW, MPIIGaze-Datensätzen und synthetischen Augen von UnityEyes trainiert. Eine benutzerdefinierte Variante des Adaptive Wing Loss wurde für die Loss-Funktion verwendet.
Ein interessantes Detail: Der Autor passte die Landmarken speziell für Avatar-Animationen an, nicht für akademische Benchmarks. Die Beschriftung ist nahe an iBUG 68, aber mit quasi-3D-Konturen. Selbst wenn die Blickvektor-Koordinaten in absoluten Werten leicht abweichen, erkennt der Algorithmus Blinzeln und Mundform während des Sprechens genau.


Im Vergleich zu Google MediaPipe hält das OpenSeeFace-Tracking bei scharfen Kopfdrehungen, schlechten Lichtverhältnissen und Rauschen von günstigen Webcams besser stand. Der Mund wird genauer erkannt, obwohl das Augenbereich-Tracking hinter einigen spezialisierten Lösungen zurückbleibt.

Modellstufen für jede Hardware
Das Repository enthält mehrere vorgefertigte Modelle mit unterschiedlichen Genauigkeits-Geschwindigkeits-Kompromissen. Die Auswahl wird über das Argument --model festgelegt:
- Modell -1: Modus für sehr schwache Prozessoren. Liefert bis zu 213 fps auf einem einzelnen Kern ohne Blickverfolgung, aber das Tracking ist sehr grob.
- Modell 0: schnelles Modell mit grundlegender Genauigkeit (~68 fps).
- Modell 1: ausgewogener Kompromiss zwischen Geschwindigkeit und Qualität (~59 fps).
- Modell 2: gutes Tracking mit moderatem Ressourcenverbrauch (~50 fps).
- Modell 3: Standard und genaueste Option (~44 fps auf einem einzelnen Kern).
In der Praxis benötigt man für die Erfassung von Gesichtsausdrücken selten mehr als 30 fps, sodass das Skript auf eine Bildrate begrenzt werden kann, um CPU-Zeit zu sparen.
So startest du den Tracker
Um mit dem Code zu arbeiten, benötigst du Python 3.6 bis 3.9 und einen minimalen Satz an Bibliotheken:
pip install onnxruntime opencv-python pillow numpy
Wenn du dich nicht mit der Python-Umgebung beschäftigen möchtest, gibt es im Bereich Releases ein fertiges Archiv mit facetracker.exe, erstellt über pyinstaller.
Der grundlegende Start mit Visualisierung sieht so aus:
python facetracker.py --visualize 3 --pnp-points 1 --max-threads 4 -c 0
Das Flag -c 0 gibt den Webcam-Index an. Wenn du eine vorab aufgezeichnete Video verarbeiten musst, übergebe stattdessen den Dateipfad video.mp4.
Integration mit Unity und anderen Engines
Das Repository enthält gebrauchsfertige C#-Skripte für Unity. Die Komponente OpenSee lauscht in einem Hintergrundthread auf eingehende UDP-Pakete und speichert Koordinaten im öffentlichen Feld trackingData.
Um den Tracker mit einer Szene zu verbinden, sind nur wenige Schritte nötig:
- Füge die Komponenten
OpenSeeundOpenSeeShowPointszu einem leeren GameObject hinzu. - Führe die Szene im Unity-Editor aus.
- Starte das Skript
facetracker.py. Gesichtspunkte erscheinen sofort im Szenenraum. - Um den Kopf eines Charakters zu steuern, kannst du die Komponente
OpenSeeIKTargetzusammen mit FinalIK verbinden.
Der eingebaute Manager OpenSeeLauncher kann sich selbst starten und den Tracker-Binary über WinAPI Job Objects korrekt beenden. Wenn deine Unity-Anwendung mit einem Fehler abstürzt, bleibt der untergeordnete Tracker-Prozess nicht im Speicher hängen.
Emotionserkennung über LIBSVM
Über die Landmarken-Koordinaten hinaus enthält das Projekt die Komponente OpenSeeExpression. Sie löst die Aufgabe der Emotionsklassifikation (Lächeln, Wut, Überraschung) für eine bestimmte Person.
Statt zu versuchen, ein allgemeines neuronales Netz für jeden auf dem Planeten zu trainieren, verwendete der Autor einen SVM-Klassifikator. Der Benutzer kalibriert das System selbst:
- Gib den Emotionsnamen im Unity-Inspector ein.
- Mache den erforderlichen Gesichtsausdruck und aktiviere die Aufnahme.
- Drehe den Kopf und sprich, damit das Modell mimische Verzerrungen in Bewegung erinnert.
- Drücke Trainieren.
Das trainierte Modell wird in einer separaten Datei gespeichert und beim nächsten Anwendungsstart geladen.
Wo es bereits verwendet wird
OpenSeeFace ist zur Grundlage für mehrere beliebte Animations-Tools geworden:
- VSeeFace: kostenloses VTuber-Programm mit Unterstützung für VRM- und VSFAvatar-Formate.
- VTube Studio: Tool zur Steuerung von 2D-Live2D-Modellen über Webcam.
- VPUPPR: offener Avatar-Renderer auf der Godot-Engine.
Wer von diesem Projekt profitiert
Die Bibliothek ist ideal für Spieleentwickler und interaktive Installationen, die schnelle Facial Capture benötigen, ohne teure Headsets oder iPhones mit TrueDepth kaufen zu müssen. Der Code wird unter der permissiven BSD 2-Clause-Lizenz vertrieben, sodass du ihn bedenkenlos in kommerziellen Projekten verwenden kannst.
Wenn du feine Netzhaut-Details erkennen oder eine submillimetergenaue polygonal 3D-Maske für medizinische Zwecke erstellen musst, wird OpenSeeFace nicht funktionieren. Aber für Charakteranimation, Kopf bewegungsbasierte Interface-Steuerung und Streaming ist es eine der praktischsten und leichtgewichtigen Lösungen auf GitHub.
Ähnliche Projekte