📸 01 - Captura de Rostos (Criação de Dataset)

Este script é responsável por coletar as imagens que serão utilizadas para treinar ou validar o modelo de reconhecimento facial. Ele se conecta a uma câmera (ESP32-CAM) via Wi-Fi, exibe o vídeo em tem

📋 Visão Geral

  • Função: Capturar imagens via stream HTTP (MJPEG).

  • Entrada: URL do stream do ESP32.

  • Saída: Arquivos .jpg salvos em uma pasta local organizada por nome.


🛠 Pré-requisitos

Antes de executar o script, certifique-se de ter as bibliotecas necessárias instaladas:

Bash

pip install opencv-python numpy requests

Certifique-se também de que o seu ESP32-CAM já está programado, ligado e transmitindo vídeo na mesma rede Wi-Fi do computador.


⚙️ Configuração

No início do script 01_capturar_rostos.py, você deve ajustar duas variáveis principais para adequar ao seu ambiente:

Variável

Descrição

Exemplo

nome_pessoa

O nome da pessoa que será capturada. Isso definirá o nome da pasta onde as fotos serão salvas.

"Sarris", "Joao", "Visitante"

url_esp32

O endereço IP do seu ESP32 seguido da rota de stream.

"http://192.168.1.15/stream"

Nota: O IP (192.168.18.159) deve ser substituído pelo IP que aparece no Monitor Serial da Arduino IDE quando você inicia o ESP32.


🚀 Como Usar

  1. Execute o script:

    Bash

  2. Verifique a Conexão:

    O terminal exibirá Conectando ao ESP32.... Se tudo estiver correto, uma janela chamada "Captura Manual" abrirá mostrando o vídeo.

  3. Comandos de Controle:

    Com a janela do vídeo selecionada, utilize as seguintes teclas:

    • s (Save): Salva o quadro (frame) atual. O terminal confirmará com ✅ Foto salva: dataset/Nome/0.jpg.

    • ESC: Fecha a janela e encerra o script.


🧠 Entendendo o Código

O script não utiliza a captura padrão do OpenCV (cv2.VideoCapture) devido à instabilidade frequente com streams HTTP em algumas redes. Em vez disso, ele implementa um parser manual de MJPEG:

  1. Requisição HTTP: Utiliza a biblioteca requests com stream=True para manter a conexão aberta.

  2. Buffer de Bytes: O script lê o fluxo de dados em pedaços (chunks) de 4096 bytes.

  3. Identificação de JPEG: Ele procura pelos "números mágicos" que definem o início e o fim de uma imagem JPEG:

    • Início: \xff\xd8

    • Fim: \xff\xd9

  4. Decodificação: Quando uma imagem completa é isolada no buffer, ela é convertida para um array NumPy e decodificada pelo OpenCV (cv.imdecode).

Estrutura de Pastas Gerada

O script cria automaticamente a seguinte estrutura de diretórios se ela não existir:

Plaintext


⚠️ Solução de Problemas

  • Erro: "Connection timed out" ou Travamento:

    • Verifique se o ESP32 está ligado.

    • Confirme se o IP no código (url_esp32) está correto.

    • Certifique-se de que o computador e o ESP32 estão na mesma rede Wi-Fi (frequência 2.4GHz é comum para ESP32).

  • A imagem está corrompida ou cinza:

    • Isso pode ocorrer se houver perda de pacotes na rede. O script possui um bloco try/except para ignorar frames incompletos e evitar que o programa feche.

Atualizado