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
Execute o script:
Bash
Verifique a Conexão:
O terminal exibirá Conectando ao ESP32.... Se tudo estiver correto, uma janela chamada "Captura Manual" abrirá mostrando o vídeo.
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:
Requisição HTTP: Utiliza a biblioteca requests com stream=True para manter a conexão aberta.
Buffer de Bytes: O script lê o fluxo de dados em pedaços (chunks) de 4096 bytes.
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
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.