>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Suivi facial rapide sur CPU sans frameworks de réseaux de neurones lourds

OSF.png

Si vous avez déjà essayé d'animer un avatar 3D ou un personnage en temps réel à partir d'une webcam ordinaire, vous avez probablement été confronté à un dilemme. Soit vous utilisez des modèles lourds qui dévorent votre carte graphique et la moitié de votre processeur, soit le résultat devient un masque saccadé avec un décalage d'une demi-seconde. Pour le streaming de jeux, c'est un désastre, car le GPU est déjà chargé avec le rendu.

Le développeur connu sous le nom d'emilianavt a rencontré exactement ce problème lors de la création d'outils pour les VTubers. Le résultat est OpenSeeFace. Cette bibliothèque légère de suivi des points de repère du visage et des repères est optimisée pour le CPU et offre une fréquence d'images stable de 30 à 60 ips même sur du matériel plus ancien.

Ce qui se cache sous le capot et pourquoi c'est rapide

Le projet ne vise pas à être un programme d'animation d'avatar complet. C'est un suiveur spécialisé. Il capture la vidéo d'une webcam ou d'un fichier, détecte le visage, calcule les coordonnées des points de repère et envoie les données prêtes via UDP.

Le modèle a été initialement entraîné sur MobileNetV3 dans PyTorch. Mais sous Windows, l'inférence CPU de PyTorch était lente. L'auteur a converti le réseau au format ONNX et a basculé l'exécution vers onnxruntime. Les versions release incluent une version personnalisée d'ONNX Runtime sans télémétrie inutile.

L'architecture du suiveur résout plusieurs tâches appliquées à la fois :

  • La capture et l'inférence sont séparées dans un script Python autonome ou un binaire. Si le programme principal (par exemple, un jeu Unity) plante, le pipeline n'entraînera pas la caméra avec lui.
  • La transmission de coordonnées UDP signifie que vous pouvez exécuter le suivi sur un ancien ordinateur portable tout en exécutant le jeu ou la scène 3D sur votre PC principal. Cela économise des ressources et protège le streamer de montrer accidentellement son vrai visage en direct.
  • Le modèle a été entraîné sur les ensembles de données LS3D-W, WFLW, MPIIGaze et les yeux synthétiques d'UnityEyes. Une variante personnalisée de l'Adaptive Wing Loss a été utilisée pour la fonction de perte.

Un détail intéressant : l'auteur a adapté les points de repère spécifiquement pour l'animation d'avatar, et non pour les benchmarks académiques. L'étiquetage est proche de iBUG 68, mais avec des contours quasi-3D. Même si les coordonnées du vecteur du regard sont légèrement décalées en valeurs absolues, l'algorithme détecte avec précision le clignement des yeux et la forme de la bouche pendant la parole.

Results1.png

Results2.png

Par rapport à Google MediaPipe, le suivi OpenSeeFace se comporte mieux lors de rotations rapides de la tête, d'un mauvais éclairage et de bruit provenant de webcams bon marché. La bouche est reconnue plus précisément, bien que le suivi de la zone des yeux soit inférieur à certaines solutions spécialisées.

EmiFace.png

Niveaux de modèles pour tout matériel

Le dépôt comprend plusieurs modèles pré-construits avec différents compromis précision-vitesse. La sélection se fait via l'argument --model :

  • Modèle -1 : mode pour les processeurs très faibles. Offre jusqu'à 213 ips sur un seul cœur sans suivi du regard, mais le suivi est très grossier.
  • Modèle 0 : modèle rapide avec une précision de base (~68 ips).
  • Modèle 1 : compromis équilibré entre vitesse et qualité (~59 ips).
  • Modèle 2 : bon suivi avec une utilisation modérée des ressources (~50 ips).
  • Modèle 3 : option par défaut et la plus précise (~44 ips sur un seul cœur).

En réalité, vous avez rarement besoin de plus de 30 ips pour la capture d'expressions faciales, donc le script peut être limité en fréquence d'images pour économiser du temps CPU.

Comment lancer le suiveur

Pour travailler avec le code, vous avez besoin de Python 3.6 à 3.9 et d'un ensemble minimal de bibliothèques :

pip install onnxruntime opencv-python pillow numpy

Si vous ne voulez pas gérer l'environnement Python, la section Releases propose une archive prête à l'emploi avec facetracker.exe, construite via pyinstaller.

Un lancement basique avec visualisation ressemble à ceci :

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

Le flag -c 0 spécifie l'index de la webcam. Si vous devez traiter une vidéo pré-enregistrée, transmettez le chemin du fichier à la place video.mp4.

Intégration avec Unity et autres moteurs

Le dépôt comprend des scripts C# prêts à l'emploi pour Unity. Le composant OpenSee écoute les paquets UDP entrants dans un thread d'arrière-plan et stocke les coordonnées dans le champ public trackingData.

Pour connecter le suiveur à une scène, quelques étapes seulement sont nécessaires :

  1. Ajoutez les composants OpenSee et OpenSeeShowPoints à un GameObject vide.
  2. Exécutez la scène dans l'éditeur Unity.
  3. Lancez le script facetracker.py. Les points du visage apparaîtront immédiatement dans l'espace de la scène.
  4. Pour contrôler la tête d'un personnage, vous pouvez connecter le composant OpenSeeIKTarget вместе с FinalIK.

Le gestionnaire intégré OpenSeeLauncher peut se lancer lui-même et terminer correctement le binaire du suiveur via les objets de travail WinAPI. Si votre application Unity se bloque avec une erreur, le processus enfant du suiveur ne restera pas en mémoire.

Détection d'émotions via LIBSVM

Au-delà des coordonnées des points de repère, le projet inclut le composant OpenSeeExpression. Il résout la tâche de classification des émotions (sourire, colère, surprise) pour une personne spécifique.

Au lieu d'essayer d'entraîner un réseau neuronal général pour tout le monde, l'auteur a utilisé un classificateur SVM. L'utilisateur calibre lui-même le système :

  • Saisit le nom de l'émotion dans l'inspecteur Unity.
  • Fait l'expression faciale requise et active l'enregistrement.
  • Tourne la tête et parle pour que le modèle se souvienne des distorsions mimiques en mouvement.
  • Appuie sur Entraîner.

Le modèle entraîné est sauvegardé dans un fichier séparé et chargé au prochain démarrage de l'application.

Où c'est déjà utilisé

OpenSeeFace est devenu la base de plusieurs outils d'animation populaires :

  • VSeeFace : programme VTuber gratuit avec support des formats VRM et VSFAvatar.
  • VTube Studio : outil pour contrôler les modèles Live2D 2D via webcam.
  • VPUPPR : moteur de rendu d'avatar ouvert sur le moteur Godot.

Qui bénéficiera de ce projet

La bibliothèque est idéale pour les développeurs de jeux et les installations interactives qui ont besoin d'une capture faciale rapide sans acheter de casques coûteux ou d'iPhones avec TrueDepth. Le code est distribué sous la licence BSD 2-Clause permissive, vous pouvez donc l'intégrer en toute sécurité dans des projets commerciaux.

Si vous avez besoin de reconnaître des détails rétiniens fins ou de construire un masque polygonal 3D précis au sous-millimètre à des fins médicales, OpenSeeFace ne conviendra pas. Mais pour l'animation de personnages, le contrôle d'interface par mouvement de tête et le streaming, c'est l'une des solutions les plus pratiques et légères disponibles sur GitHub.

Projets similaires