>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Python

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

OSF.png

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.

Results1.png

Results2.png

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.

EmiFace.png

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:

  1. Adicione os componentes OpenSee e OpenSeeShowPoints a um GameObject vazio.
  2. Execute a cena no editor Unity.
  3. Inicie o script facetracker.py. Os pontos faciais aparecerão imediatamente no espaço da cena.
  4. Para controlar a cabeça de um personagem, você pode conectar o componente OpenSeeIKTarget junto 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