🧠 02 - Treinamento (Geração de Encodings)

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.

  1. 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

  1. Certifique-se da Estrutura:

    Garanta que suas pastas estão organizadas assim (resultado do script anterior):

    Plaintext

  2. Execute o script:

    Bash

  3. 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:

  1. 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).

  2. 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).

  3. 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.

  4. 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.

Atualizado