>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Python

Tracking facciale veloce su CPU senza framework di reti neurali pesanti

Se hai mai provato ad animare un avatar 3D o un personaggio in tempo reale da una webcam normale, probabilmente ti sei trovato davanti a un dilemma. O usi modelli pesanti che divorano la scheda grafica e metà del processore, oppure il risultato diventa una maschera a scatti con un ritardo di mezzo secondo. Per lo streaming di giochi, questo è un disastro, dato che la GPU è già carica con il rendering.

Lo sviluppatore noto come emilianavt si è imbattuto esattamente in questo problema durante la creazione di strumenti per VTuber. Il risultato è stato OpenSeeFace. Questa libreria leggera di tracking facciale e landmark è ottimizzata per CPU e offre 30-60 fps stabili anche su hardware datato.

Cosa c'è sotto il cofano e perché funziona velocemente

Il progetto non si propone come programma completo di animazione avatar. È un tracker specializzato. Cattura il video da webcam o file, rileva il volto, calcola le coordinate dei landmark e invia i dati pronti tramite UDP.

Il modello è stato originariamente addestrato su MobileNetV3 in PyTorch. Ma su Windows, l'inferenza CPU di PyTorch era lenta. L'autore ha convertito la rete in formato ONNX e ha spostato l'esecuzione su onnxruntime. Le build di rilascio includono una build personalizzata di ONNX Runtime senza telemetria non necessaria.

L'architettura del tracker risolve diversi compiti applicativi contemporaneamente:

  • Cattura e inferenza sono separate in uno script Python autonomo o binario. Se il programma principale (per esempio un gioco Unity) si blocca, la pipeline non trascina giù la telecamera con sé.
  • La trasmissione delle coordinate via UDP significa che puoi eseguire il tracking su un laptop datato mentre il gioco o la scena 3D gira sul tuo PC principale. Questo risparmia risorse e protegge lo streamer dal mostrare accidentalmente il suo vero volto in streaming.
  • Il modello è stato addestrato sui dataset LS3D- W, WFLW, MPIIGaze e occhi sintetici da UnityEyes. È stata usata una variante personalizzata di Adaptive Wing Loss per la funzione di perdita.

Un dettaglio interessante: l'autore ha adattato i landmark specificamente per l'animazione avatar, non per benchmark accademici. La mappatura è vicina a iBUG 68, ma con contorni quasi-3D. Anche se le coordinate del vettore dello sguardo sono leggermente imprecise in valori assoluti, l'algoritmo rileva accuratamente l'ammiccamento e la forma della bocca durante il parlato.

Results1.png

Results2.png

Rispetto a Google MediaPipe, il tracking di OpenSeeFace regge meglio durante rotazioni rapide della testa, illuminazione scarsa e rumore da webcam economiche. La bocca viene riconosciuta più accuratamente, sebbene il tracking dell'area oculare sia inferiore ad alcune soluzioni specializzate.

EmiFace.png

Tier di modelli per qualsiasi hardware

Il repository include diversi modelli pre-costruiti con diversi compromessi tra accuratezza e velocità. La selezione avviene tramite l'argomento --model:

  • Modello -1: modalità per processori molto deboli. Offre fino a 213 fps su un singolo core senza tracking dello sguardo, ma il tracking è molto approssimativo.
  • Modello 0: modello veloce con accuratezza base (~68 fps).
  • Modello 1: compromesso equilibrato tra velocità e qualità (~59 fps).
  • Modello 2: buon tracking con uso moderato di risorse (~50 fps).
  • Modello 3: opzione predefinita e più accurata (~44 fps su un singolo core).

In realtà, raramente servono più di 30 fps per la cattura delle espressioni facciali, quindi lo script può limitare il frame rate per risparmiare tempo CPU.

Come avviare il tracker

Per lavorare con il codice servono Python 3.6-3.9 e un set minimo di librerie:

pip install onnxruntime opencv-python pillow numpy

Se non vuoi avere a che fare con l'ambiente Python, la sezione Releases ha un archivio pronto con facetracker.exe, compilato tramite pyinstaller.

Il lancio base con visualizzazione funziona così:

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

Il flag -c 0 specifica l'indice della webcam. Se devi elaborare un video pre-registrato, passa invece il percorso del file video.mp4.

Integrazione con Unity e altri motori

Il repository include script C# pronti all'uso per Unity. Il componente OpenSee ascolta i pacchetti UDP in arrivo in un thread in background e memorizza le coordinate nel campo pubblico trackingData.

Per collegare il tracker a una scena bastano pochi passaggi:

  1. Aggiungi i componenti OpenSee e OpenSeeShowPoints a un GameObject vuoto.
  2. Esegui la scena nell'editor Unity.
  3. Avvia lo script facetracker.py. I punti facciali appariranno immediatamente nello spazio della scena.
  4. Per controllare la testa di un personaggio, puoi collegare il componente OpenSeeIKTarget insieme a FinalIK.

Il manager OpenSeeLauncher integrato può avviarsi da solo e terminare correttamente il processo binario del tracker tramite WinAPI Job Objects. Se la tua applicazione Unity va in crash con un errore, il processo figlio del tracker non rimarrà bloccato in memoria.

Rilevamento delle emozioni tramite LIBSVM

Oltre alle coordinate dei landmark, il progetto include il componente OpenSeeExpression. Risolve il compito della classificazione delle emozioni (sorriso, rabbia, sorpresa) per una persona specifica.

Invece di provare ad addestrare una rete neurale generale per tutti sul pianeta, l'autore ha usato un classificatore SVM. L'utente calibra il sistema autonomamente:

  • Inserisce il nome dell'emozione nell'inspector di Unity.
  • Esegue l'espressione facciale richiesta e abilita la registrazione.
  • Ruota la testa e parla così che il modello ricordi le distorsioni mimiche in movimento.
  • Preme Train.

Il modello addestrato viene salvato in un file separato e caricato all'avvio successivo dell'applicazione.

Dove è già utilizzato

OpenSeeFace è diventato il fondamento per diversi strumenti di animazione popolari:

  • VSeeFace: programma VTuber gratuito con supporto per i formati VRM e VSFAvatar.
  • VTube Studio: strumento per controllare modelli 2D Live2D tramite webcam.
  • VPUPPR: renderer avatar open su motore Godot.

Chi trarrà beneficio da questo progetto

La libreria è ideale per sviluppatori di giochi e installazioni interattive che necessitano di facial capture veloce senza acquistare visori costosi o iPhone con TrueDepth. Il codice è distribuito con licenza BSD 2-Clause permissiva, quindi puoi incorporarlo in sicurezza in progetti commerciali.

Se hai bisogno di riconoscere dettagli retinici fini o costruire una maschera 3D poligonale sub-millimetrica accurata per scopi medici, OpenSeeFace non farà al caso tuo. Ma per l'animazione di personaggi, il controllo del movimento della testa e lo streaming, è una delle soluzioni più pratiche e leggere su GitHub.

Progetti correlati