Esta é uma implementação do FaceNet para reconhecimento facial. Um dispositivo remoto Raspberry PI fotografa uma pessoa e envia para um servidor. O servidor ajusta e processa a foto, utilizando um modelo criado por Machine Learning, para reconhecer a pessoa que está na foto ou não. Veja aqui como montar o tutorial, incluindo o Raspberry.
ENGLISH VERSION: https://github.com/cleuton/FaceGuard
VÍDEO: https://youtu.be/sqkxT7MBa8U
Os arquivos para este tutorial estão no Github: https://github.com/cleuton/FaceGuard
Você precisará de um computador e um Raspberry para executar o tutorial. Uma rede wifi é importante, embora você possa utilizar Ethernet.
A maior parte do código-fonte deste demo é derivado do trabalho de David Sandberg. O arquivo de licença original está no repositório: "ORIGINAL_LICENSE".
O código-fonte adicionado por este trabalho é composto pelos arquivos:
- photoserver.py: Servidor que recebe uma foto e a classifica, tentando obter um "match";
- Foto.py: Classe auxiliar para o photoserver;
- photoclient.py: Cliente para o Raspberry PI, que captura a foto e a envia ao Servidor.
Todo o código-fonte produzido por este trabalho está licenciado de acordo com os termos da licença Apache, versão 2.0.
Preparação
Clone o repositório ou baixe um arquivo ZIP. Instale o Anaconda.
Primeiramente, você deverá criar um ambiente virtual Python utilizando o Anaconda:
conda env create -f ds-env.yml
O arquivo "ds-env.yml" está na pasta principal do repositório. Para ativar o ambiente virtual, use o comando: "source activate facenet" (para Linux e MacOS) ou "activate facenet" (para MS Windows).
Você precisará treinar um classificador utilizando o dataset LFW - Labeled Faces in the Wild, Siga o tutorial de David Sandberg: https://github.com/davidsandberg/facenet/wiki/Validate-on-LFW.
Você poderá, então, usar suas próprias fotos. Siga o tutorial: https://github.com/davidsandberg/facenet/wiki/Train-a-classifier-on-own-images
Após isto, você poderá subir o script photoserver e executar o photoclient em seu Raspberry PI 3.
O circuito Raspberry
O dispositivo remoto Raspberry tem uma câmera, um botão e três leis: Amarelo, Verde e Vermelho.
Aponte a câmera para você mesmo (ou para outra pessoa), pressione o botão na protoboard, o Led amarelo acenderá e a foto será transmitida para o Servidor RESTfull. Quando o processamento terminar, o Raspberry acenderá o Led verde, se o reconhecer (60% de precisão) ou vermelho, se não o reconhecer.
A lista de materiais é:
- Um Raspberry PI 3;
- Uma protoboard;
- Um conector para Raspberry e protoboard, com um cabo paralelo (colorido);
- 3 leds: Amarelo, Verde e Vermelho;
- 3 resistires de 330 Ohms;
- Alguns cabos com jumpers de cores diferentes;
- Um switch (Botão);
- Uma câmera para Raspberry.
Você poderá encontrar todos esses materiais no MercadoLivre.
Montagem do circuito na protoboard
Plugue o conector com os nomes das portas na protoboard, deixando o sulco da protoboard bem no meio dele (veja na figura anterior). Este conector tem os nomes das portas do Raspberry PI: GPIOs, GND (terra), voltagem 3.3, voltagem 5 etc.
Plugue o outro lado no Raspberry. Preste atenção ao lado correto. Se estiver inseguro, use um multímetro e verifique as voltagens na protoboard. Veja a figura anterior! No lado de cima, o primeiro conector à direita deve ter 3,3 volts, e o primeiro abaixo à esquerda, deve ter 5 volts. Se estiverem assim, então você plugou corretamente.
Agora, instale o switch (o botão) exatamente como na figura. O switch tem quatro pernas, ligadas duas a duas. Se você pressionar o botão, ele causará o curto-circuito entre todas. Preste atenção porque pode ser mais difícil do que parece. Leia este artigo que ensina a instalar switch em protoboard: https://www.hackster.io/hardikrathod/push-button-with-raspberry-pi-6b6928
Lembre-se de instalar um cabo jumper a um lado do switch e a uma das GPIOs. Eu utilizei a GPIO 18. Se você conectar o switch a outra GPIO, terá que alterar o código do photoclient. O outro lado do switch, ligue a uma das GND (terras) do Raspberry.
Finalmente, instale os 3 leds. Um Led tem duas pernas: uma longa e outra curta. A longa é chamada de "anodo" e é conectada ao positivo, no nosso caso, a uma das GPIOs do Raspberry. A perna curta é chamada de "catodo" é conectada ao terra (uma das tomadas GND).
Resistores
Temos que proteger o Raspberry e os Leds de sobrecarga. Portanto, conectaremos resistores de 330 ohm entre o GND e a perna curta de cada Led, como na figura.
A protoboard tem circuitos horizontais e verticais. Existem duas faixas horizontais de cada lado: uma azul (negativa) e outra vermelha (positiva). Você pode conectar a negativa a qualquer tomada GND do conector do Raspberry, então, plugue uma perna de cada resistor de 330 ohm nesta linha.
A outra perna de cada resistor deve ser conectada a um circuito vertical, depois da linha vermelha, exatamente como na foto.
Cada led deve ter sua perna longa conectada (usando um cabo jumper) a uma tomada GPIO. Eu usei estas tomadas (preste atenção! Se utilizar tomadas diferentes, terá que alterar o código do photoclient):
- Led amarelo: GPIO 23;
- Led vermelho: GPIO 25;
- Led verde: GPIO 24.
O lado do Raspberry
Preste atenção na conexão do cabo paralelo e o socket do Raspberry. Deve estar na posição correta, caso contrário, você poderá danificar seu Raspberry PI! Use um multímetro, como eu expliquei anteriormente.
A câmera deve ser conectada no slot próximo da tomada HDMI. Ela tem um lado condutivo e um blindado, conecte de maneira certa. Leia este artigo: https://projects.raspberrypi.org/en/projects/getting-started-with-picamera.
A câmera tem uma posição fixa, logo, você deve rotaciona-la para que a foto fique na posição correta. Execute o programa raspa-config para habilitar sua câmera: https://www.raspberrypi.org/documentation/usage/camera/python/README.md
Nenhum comentário:
Postar um comentário