Rastreamento Facial Rápido Baseado em CPU Sem Frameworks Pesados de Redes Neurais

Se você já tentou animar um avatar 3D ou personagem em tempo real a partir de uma webcam comum, provavelmente enfrentou um dilema. Ou você usa modelos pesados que devoram sua placa de vídeo e metade do seu processador, ou o resultado se torna uma máscara tremida com atraso de meio segundo. Para streaming de jogos, isso é um desastre, já que a GPU já está carregada com a renderização.
O desenvolvedor conhecido como emilianavt encontrou exatamente esse problema ao criar ferramentas para VTubers. O resultado foi o OpenSeeFace. Esta biblioteca leve de rastreamento facial e de pontos de referência é otimizada para CPU e oferece 30–60 fps estáveis mesmo em hardware mais antigo.
O Que Está Por Trás e Por Que Funciona Rápido
O projeto não tem como objetivo ser um programa completo de animação de avatares. É um rastreador especializado. Ele captura vídeo de uma webcam ou arquivo, detecta o rosto, calcula as coordenadas dos pontos de referência e envia os dados prontos via UDP.
O modelo foi originalmente treinado em MobileNetV3 no PyTorch. Mas no Windows, a inferência do PyTorch CPU era lenta. O autor converteu a rede para o formato ONNX e mudou a execução para o onnxruntime. As builds de lançamento incluem uma build personalizada do ONNX Runtime sem telemetria desnecessária.
A arquitetura do rastreador resolve várias tarefas aplicadas de uma vez:
- Captura e inferência são separadas em um script Python independente ou binário. Se o programa principal (por exemplo, um jogo Unity) travar, o pipeline não arrastará a câmera junto.
- A transmissão de coordenadas via UDP significa que você pode executar o rastreamento em um laptop antigo enquanto executa o jogo ou cena 3D no seu PC principal. Isso economiza recursos e protege o streamer de mostrar acidentalmente seu rosto real na transmissão.
- O modelo foi treinado nos conjuntos de dados LS3D-W, WFLW, MPIIGaze e olhos sintéticos do UnityEyes. Uma variante personalizada do Adaptive Wing Loss foi usada para a função de perda.
Um detalhe interessante: o autor adaptou os pontos de referência especificamente para animação de avatares, não para benchmarks acadêmicos. O labeling é próximo ao iBUG 68, mas com contornos quase-3D. Mesmo que as coordenadas do vetor de olhar sejam ligeiramente diferentes em valores absolutos, o algoritmo detecta com precisão o piscar de olhos e a forma da boca durante a fala.


Comparado ao Google MediaPipe, o rastreamento do OpenSeeFace se sai melhor durante rotações rápidas da cabeça, iluminação precária e ruído de webcams baratas. A boca é reconhecida com mais precisão, embora o rastreamento da área dos olhos fique atrás de algumas soluções especializadas.

Camadas de Modelos Para Qualquer Hardware
O repositório inclui vários modelos pré-construídos com diferentes compensações de precisão-velocidade. A seleção é definida através do argumento --model:
- Modelo -1: modo para processadores muito fracos. Oferece até 213 fps em um único núcleo sem rastreamento de olhar, mas o rastreamento é muito rudimentar.
- Modelo 0: modelo rápido com precisão básica (~68 fps).
- Modelo 1: compromisso equilibrado entre velocidade e qualidade (~59 fps).
- Modelo 2: bom rastreamento com uso moderado de recursos (~50 fps).
- Modelo 3: opção padrão e mais precisa (~44 fps em um único núcleo).
Na realidade, você raramente precisa de mais de 30 fps para captura de expressão facial, então o script pode ser limitado em taxa de quadros para economizar tempo de CPU.
Como Iniciar o Rastreador
Trabalhar com o código requer Python 3.6 a 3.9 e um conjunto mínimo de bibliotecas:
pip install onnxruntime opencv-python pillow numpy
Se você não quer lidar com o ambiente Python, a seção Releases tem um arquivo pronto com facetracker.exe, construído via pyinstaller.
O lançamento básico com visualização fica assim:
python facetracker.py --visualize 3 --pnp-points 1 --max-threads 4 -c 0
O flag -c 0 especifica o índice da webcam. Se você precisa processar um vídeo pré-gravado, passe o caminho do arquivo em vez video.mp4.
Integração com Unity e Outros Motores
O repositório inclui scripts C# prontos para uso no Unity. O componente OpenSee escuta pacotes UDP recebidos em uma thread em segundo plano e armazena coordenadas no campo público trackingData.
Para conectar o rastreador a uma cena, apenas algumas etapas são necessárias:
- Adicione os componentes
OpenSeeeOpenSeeShowPointsa um GameObject vazio. - Execute a cena no editor Unity.
- Inicie o script
facetracker.py. Os pontos faciais aparecerão imediatamente no espaço da cena. - Para controlar a cabeça de um personagem, você pode conectar o componente
OpenSeeIKTargetjunto com o FinalIK.
O gerenciador integrado OpenSeeLauncher pode iniciar-se sozinho e encerrar corretamente o binário do rastreador via WinAPI Job Objects. Se seu aplicativo Unity travar com um erro, o processo filho do rastreador não ficará preso na memória.
Detecção de Emoções via LIBSVM
Além das coordenadas dos pontos de referência, o projeto inclui o componente OpenSeeExpression. Ele resolve a tarefa de classificação de emoções (sorriso, raiva, surpresa) para uma pessoa específica.
Em vez de tentar treinar uma rede neural geral para todos no planeta, o autor usou um classificador SVM. O usuário calibra o sistema ele mesmo:
- Insere o nome da emoção no inspector do Unity.
- Faz a expressão facial necessária e ativa a gravação.
- Gira a cabeça e fala para que o modelo lembre das distorções miméticas em movimento.
- Pressiona Treinar.
O modelo treinado é salvo em um arquivo separado e carregado no próximo início do aplicativo.
Onde Já Está Sendo Usado
O OpenSeeFace se tornou a base para várias ferramentas populares de animação:
- VSeeFace: programa VTuber gratuito com suporte para formatos VRM e VSFAvatar.
- VTube Studio: ferramenta para controlar modelos 2D Live2D via webcam.
- VPUPPR: renderizador de avatar aberto no motor Godot.
Quem Se Beneficiará Deste Projeto
A biblioteca é ideal para desenvolvedores de jogos e instalações interativas que precisam de captura facial rápida sem comprar headsets caros ou iPhones com TrueDepth. O código é distribuído sob a licença permissiva BSD 2-Clause, então você pode incorporá-lo com segurança em projetos comerciais.
Se você precisa reconhecer detalhes retinianos finos ou construir uma máscara 3D poligonal submilimétrica precisa para fins médicos, o OpenSeeFace não funcionará. Mas para animação de personagens, controle de interface por movimento da cabeça e streaming, é uma das soluções mais práticas e leves no GitHub.
Projetos relacionados