Pular para o conteúdo principal

Análise de Rosto via UDP com reCamera

Introdução

Esta demonstração mostra como construir um sistema de análise de rosto em tempo real usando a reCamera. O sistema realiza:

  • Detecção de Rosto: Usando o modelo de detecção de rosto YOLO
  • Análise de Atributos: Estimativa de idade, gênero e raça usando o modelo FairFace
  • Reconhecimento de Emoções: Detecção de emoções em 7 classes
  • Transmissão UDP: Envia quadros JPEG com metadados de detecção para o PC via UDP

O aplicativo em C++ é executado na reCamera e envia quadros de vídeo juntamente com os resultados de detecção (caixas delimitadoras, atributos) por meio de UDP. Um script receptor em Python executado no seu PC exibe o fluxo de vídeo anotado em tempo real.

Principais recursos:

  • Detecção de rosto em tempo real com controle de limiar de confiança
  • Análise de múltiplos atributos por rosto (gênero, idade, raça, emoção)
  • Transmissão UDP eficiente com compactação JPEG
  • Inferência com pulo de quadros para reduzir a carga de CPU/TPU
  • Estatísticas de desempenho detalhadas

Configuração da Demo

Para configurar esta demonstração, você precisa:

  1. Compilar o programa em C++ na reCamera
  2. Executar o executável compilado na reCamera
  3. Executar o script receptor em Python no seu PC

1. Compilar o Programa em C++

nota

Antes de compilar esta solução, certifique-se de que você configurou o ambiente ReCamera-OS de acordo com a documentação principal do projeto.

Defina as seguintes variáveis de ambiente para o ambiente de compilação do ReCamera-OS antes de executar cmake:

export PATH='current compile chain path'/host-tools/gcc/riscv64-linux-musl-x86_64/bin:$PATH

Primeiro, certifique-se de que você tem os modelos necessários:

  • yolo_face.cvimodel - modelo de detecção de rosto YOLO
  • age_gender_race.cvimodel - modelo FairFace para idade/gênero/raça
  • emotion.cvimodel - modelo de reconhecimento de emoções

Você pode baixar estes três arquivos de modelo a partir do lançamento sscma-example-sg200x v1.0.1, ou treinar seus próprios modelos e então quantizá-los/convertê-los para o formato .cvimodel.

Navegue até o diretório da solução e compile:

git clone https://github.com/RobotXTeam/sscma-example-sg200x.git
cd sscma-example-sg200x/solutions/sesg-project/face_udp
export SG200X_SDK_PATH='current clone path'/sg2002_recamera_emmc
rm -rf build && mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-std=c++17" ..
make -j$(nproc)

O executável compilado estará em: build/face_udp

nota

O repositório inclui modelos pré-compilados na pasta da solução:

  • yolo-face_mixfp16.cvimodel
  • age_gender_race_bf16.cvimodel
  • emotion_bf16.cvimodel

2. Configurar a reCamera

atenção

Antes de executar o programa em C++, você deve parar os serviços padrão do Node-RED, pois eles ocupam os recursos da câmera. Execute os seguintes comandos via SSH:

sudo /etc/init.d/S03node-red stop
sudo /etc/init.d/S91sscma-node stop
sudo /etc/init.d/S93sscma-supervisor stop

3. Executar o Executável na reCamera

Envie o executável compilado e os modelos para /home/recamera/ na reCamera e então execute:

chmod +x face_udp
./face_udp <yolo_face.cvimodel> <age_gender_race.cvimodel> <emotion.cvimodel> [single|multi] [threshold] [skip] [udp_ip] [udp_port] [log_every_n_infer]

Parâmetros

ParâmetroDescriçãoPadrão
yolo_face.cvimodelModelo de detecção de rosto YOLO (obrigatório)-
age_gender_race.cvimodelModelo FairFace (obrigatório)-
emotion.cvimodelModelo de emoções (obrigatório)-
single|multiTipo de head YOLOmulti
thresholdLimiar de detecção0.5 (multi) / 0.7 (single)
skipInferência a cada N quadros3 (multi) / 1 (single)
udp_ipEndereço IP do PC para UDP-
udp_portNúmero da porta UDP-
log_every_n_inferImprime log a cada N inferências20

Comandos de Exemplo

Uso básico (sem transmissão UDP):

./face_udp yolo-face_mixfp16.cvimodel age_gender_race_bf16.cvimodel emotion_bf16.cvimodel

Com transmissão UDP:

./face_udp yolo-face_mixfp16.cvimodel age_gender_race_bf16.cvimodel emotion_bfpf16.cvimodel multi 0.5 3 192.168.31.100 5001
nota

Lembre-se de substituir 192.168.31.100 pelo endereço IP real do seu PC na mesma rede da reCamera.

4. Executar o Receptor em Python no PC

No seu PC, certifique-se de que o Python com as bibliotecas necessárias está instalado:

pip install opencv-python numpy

Navegue até o diretório da solução e execute:

cd sscma-example-sg200x/solutions/sesg-project/face_udp
python3 udp_receiver.py

Saída Esperada

No Terminal da reCamera

O programa exibirá estatísticas de desempenho em tempo real a cada 2 segundos:

========== Performance Stats (Last 2 Seconds) ==========
Video FPS: 30.2 | UDP FPS: 9.8
Frames: 300 | Inferences: 100

Average YOLO Timing:
Preprocess: 0.9 ms
Inference: 35.5 ms
Postprocess: 32.3 ms
Total: 68.7 ms

Average Attribute/Emotion Overhead:
mmap: 1.2 ms
AGR: 45.3 ms/frame | 45.3 ms/face
EMO: 12.1 ms/frame | 12.1 ms/face

UDP Send:
avg_send: 2.1 ms | throughput: 850.5 kbps
======================================

Na Janela do Receptor em Python

O PC exibirá uma janela mostrando:

  • Fluxo de vídeo ao vivo com quadros JPEG
  • Caixas delimitadoras de rosto (retângulos verdes)
  • Rótulos de atributos no canto superior esquerdo:
    • Gênero (Masculino/Feminino)
    • Faixa etária
    • Classificação de raça
    • Emoção (raiva/nojo/medo/feliz/triste/surpreso/neutro)

Solução de Problemas

Erro de Acesso à Câmera

Se você vir o erro "No camera":

  • Certifique-se de que os serviços do Node-RED estão parados (veja a Etapa 2 acima)
  • Verifique a conexão da câmera

Falha na Conexão UDP

Se o PC não receber dados:

  • Verifique se o PC e a reCamera estão na mesma rede
  • Verifique as configurações de firewall no PC
  • Confirme se a porta UDP 5001 não está bloqueada
  • Teste com ping entre os dispositivos

Erro ao Carregar o Modelo

Se o modelo falhar ao carregar:

  • Verifique se os arquivos de modelo foram enviados para /home/recamera/
  • Verifique as permissões de arquivo com ls -la
  • Certifique-se de que há espaço de armazenamento suficiente

Suporte Técnico & Discussão de Produtos

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...