Este script é o "cérebro" do sistema. Ele lê todas as fotos capturadas no passo anterior, detecta os rostos e os converte em dados numéricos (encodings). O resultado é um arquivo compactado que servir
📋 Visão Geral
Função: Processar o dataset de imagens e gerar assinaturas biométricas.
Entrada: Pasta dataset/ contendo subpastas com fotos dos usuários.
Saída: Um arquivo encodings.pickle contendo os dados matemáticos dos rostos.
Método: Utiliza HOG (Histogram of Oriented Gradients) para detecção e uma rede neural pré-treinada para gerar 128 medidas faciais.
🛠 Pré-requisitos
Este script depende da biblioteca face_recognition, que por sua vez depende do dlib. A instalação pode ser um pouco mais complexa que o padrão.
Instale as dependências:
Bash
pip install opencv-python face-recognition
Nota Crítica: Se você estiver no Windows e tiver erros ao instalar o face_recognition (relacionados ao CMake ou Dlib), recomenda-se instalar o "Desktop development with C++" no Visual Studio Community ou procurar rodas (wheels) pré-compiladas do Dlib.
⚙️ Configuração
No início do script 02_treinar.py, as configurações de diretório são definidas:
Variável
Descrição
Padrão
dataset_path
Caminho onde estão as pastas com as fotos (gerado no passo 01).
"dataset/"
encoding_file
Nome do arquivo final onde os dados serão salvos.
"encodings.pickle"
🚀 Como Usar
Certifique-se da Estrutura:
Garanta que suas pastas estão organizadas assim (resultado do script anterior):
Plaintext
Execute o script:
Bash
Acompanhe o Processo:
O terminal mostrará o progresso:
[INFO] Processando: Sarris
[SUCESSO] Arquivo 'encodings.pickle' gerado com sucesso!
🔬 Entendendo o Código
O processo de "treinamento" aqui é, na verdade, uma extração de características (feature extraction). O script realiza os seguintes passos para cada imagem:
Conversão de Cor: O OpenCV carrega imagens em BGR, mas a biblioteca face_recognition espera RGB. O script faz essa conversão (cv2.cvtColor).
Detecção (HOG): O comando face_recognition.face_locations(rgb, model="hog") localiza onde está o rosto na imagem.
Nota: O modelo "hog" é mais rápido (CPU), mas menos preciso que o "cnn" (GPU).
Codificação (Encoding): O comando face_recognition.face_encodings analisa 128 pontos únicos do rosto (distância entre olhos, formato do queixo, etc.) e gera uma lista de números. É essa lista que torna o rosto único.
Serialização: Ao final, usamos a biblioteca pickle para salvar a lista de nomes e a lista de códigos numéricos em um arquivo binário.
Por que .pickle?
O formato .pickle permite salvar objetos Python complexos (como listas e dicionários) diretamente em um arquivo no disco, para que possam ser carregados rapidamente pelo script de reconhecimento em tempo real, sem precisar reprocessar as imagens.
⚠️ Solução de Problemas comuns
Erro: "No module named 'cmake'":
Instale o CMake antes: pip install cmake.
O script roda, mas não encontra rostos:
Verifique a iluminação das fotos no dataset.
Se o rosto estiver muito inclinado ou de perfil, o modelo "hog" pode falhar. Tente capturar fotos mais frontais.
Demora muito para processar:
Isso é normal se você tiver muitas fotos de alta resolução. O processo é pesado para a CPU.