Índice:

Campainha com reconhecimento facial: 7 etapas (com fotos)
Campainha com reconhecimento facial: 7 etapas (com fotos)

Vídeo: Campainha com reconhecimento facial: 7 etapas (com fotos)

Vídeo: Campainha com reconhecimento facial: 7 etapas (com fotos)
Vídeo: MELHOR FECHADURA! | Reconhece seu Rosto, Abre por Biometria, Senha e muito mais! 2024, Novembro
Anonim
Campainha com reconhecimento facial
Campainha com reconhecimento facial

Motivação

Recentemente, houve uma onda de roubos em meu país, dirigidos a idosos em suas próprias casas. Normalmente, o acesso é concedido pelos próprios ocupantes, uma vez que os visitantes os convencem de que são cuidadores / enfermeiros. Está além das palavras, o quão zangado e triste essas histórias me fazem sentir. O lar deve ser seu primeiro porto seguro, ainda mais se você já estiver em uma posição vulnerável ao sair de casa. Com isso em mente, iniciei este projeto.

Informação geral

O sistema de campainha é projetado principalmente para pessoas idosas ou com deficiência visual e é bastante simples em seu funcionamento. Em suma, o interruptor da campainha aciona a câmera para obter a filmagem. Em seguida, os rostos na filmagem são detectados e combinados com uma lista de permissões e uma lista negra. O ocupante obtém um feedback visual claro por meio de um display de semáforo claro. Assim, a luz verde, amarela ou vermelha indica que a (s) pessoa (s) estão na lista branca, desconhecidas do sistema ou na lista negra, respectivamente. Se a luz amarela ou vermelha for acionada, a foto é enviada por um bot do Telegram para informar / avisar um parente ou zelador.

Nível de especialização

O projeto foi criado para entusiastas que têm particular curiosidade em usar a visão computacional e a inteligência artificial. Este instrutível foi escrito para um público iniciante, então não se preocupe se você não tiver experiência! Além disso, o projeto também pode ser interessante para fabricantes mais experientes, já que o pipeline é organizado de forma que você possa expandi-lo com sua própria visão computacional e ideias de reconhecimento de rosto sem muito trabalho.

Etapa 1: Materiais

Materiais
Materiais

Lista de produtos com requisitos mínimos:

produtos Ligação Comente
Raspberry Pi 3b RPi O link mostra RPi 4, pois tem um desempenho muito melhor e preço quase igual ao RPi 3b.
Micro SD Amazonas Um cartão micro SD de 16 GB ou maior fará o trabalho. Mas os cartões de 16 GB na Amazon agora têm praticamente o mesmo preço dos cartões de 32 GB.
Câmera Raspberry Pi Amazonas A câmera v1 é mais barata, mas a v2 é melhor e terá suporte por mais tempo.
Cabo flexível FPC de 15 pinos Amazonas A duração realmente depende das circunstâncias de realização deste projeto. Se você deseja apenas construir um protótipo, o cabo flexível original fará o trabalho.
Fonte de alimentação 5v micro usb Adafruit Este nunca se decepcionou! Otima qualidade. (Não na foto)
Botões Arcade com LED embutido Amazonas Escolha o tamanho desejado, mas o design CAD é baseado em botões de 60 mm
Resistores Amazonas Você só precisa de alguns resistores de 1k e 100 ohm. 1 / 4W normais estão bem.
Capacitores 0,1 uF Amazonas São necessários três capacitores. (Não na foto)
Fios de jumper / cabo de fita AmazonAmazon Se você quiser economizar algum dinheiro, você também pode usar um velho cabo de fita para unidade de disquete (veja a foto).
Tubo de encolhimento / fita elétrica AmazonAmazon

Ferramentas necessárias:

Ferramenta Essencial? Comente
Ferro de solda sim
Multímetro sim
Descascador de fios sim Ou você pode usar uma faca / tesoura.
Cortador a laser Não
impressora 3d Não
Grampos Não Útil para manter a caixa unida na fase de teste.

Observações:

Para aumentar a acessibilidade do projeto, decidi desenvolvê-lo usando um Raspberry Pi 3b. Enquanto aumenta a acessibilidade, diminui os recursos do aplicativo, uma vez que os RPi não são tão rápidos. Se você está procurando um computador de placa única mais rápido, pode dar uma olhada no NVIDIA Jetson Nano

Etapa 2: Fiação

Fiação
Fiação
Fiação
Fiação
Fiação
Fiação

O diagrama esquemático é mais informativo para esta etapa e é bastante autoexplicativo. Caso você seja novo em eletrônica, pode usar a imagem da legenda. O valor do componente (se aplicável) é indicado no diagrama esquemático. As fotos podem ajudar a ver como construo o circuito. Basicamente, conectei todos os componentes o mais próximo possível do botão de arcade, o que resulta em uma visão geral clara do que está acontecendo.

Observações:

  • Eu realmente gosto de usar conectores de cabo de fita, pois eles são muito mais resistentes do que fios de jumper simples.
  • Como sugerido, usei um cabo de fita descartado de um computador antigo. Isso é um pouco complicado, pois você terá que confirmar manualmente a configuração do cabo. Neste projeto, por exemplo, descobri que alguns furos estavam conectados entre si (provavelmente usados como aterramento para a aplicação original). Portanto, tive que conseguir um cabo diferente mais tarde, como vocês podem ver nas fotos.

Etapa 3: Construindo o Invólucro

Construindo o Invólucro
Construindo o Invólucro
Construindo o Invólucro
Construindo o Invólucro
Construindo o Invólucro
Construindo o Invólucro
Construindo o Invólucro
Construindo o Invólucro

Invólucro da câmera

Muitas cápsulas para a picamera podem ser baixadas gratuitamente da internet. Então, eu escolho não reinventar a roda e escolho um case básico, mas legal, da internet: thingiverse.com - case / gabinete para câmera Raspberry pi. (Grite para o designer VGer.)

Caixa de semáforo

Para a caixa do semáforo, projetei uma pequena caixa no Autodesk Fusion 360 (que pode ser baixada gratuitamente, consulte as Observações) que se ajusta a todo o hardware. No anexo, você pode encontrar o arquivo que enviei para minha empresa de corte a laser local. Por este meio, o projeto é baseado em uma espessura de placa de 6 mm. No entanto, se você quiser ajustar as coisas, pode acessar todos os tipos de formatos de arquivo usando este link. Conforme mostrado nas fotos, você também pode usar uma caixa de papelão se não tiver acesso a um cortador a laser. Usei a caixa de papelão da imagem para fazer a prototipagem e funcionou perfeitamente.

A montagem é bastante simples:

  1. Monte os interruptores do Arcade.
  2. Certifique-se de que mantém os fios da campainha livres.
  3. Conecte o cabo de fita ao RPi.
  4. Aparafuse o RPi no painel inferior.
  5. Conecte os fios da campainha a um conector de fio e monte-o também no painel inferior.
  6. Conecte a Picamera ao RPi.
  7. Faça um orifício em um dos painéis laterais para o fio de comutação da campainha e o fio de alimentação RPi.

O conector de fio é usado como ponto de montagem para os fios da campainha, para que possa ser fixado posteriormente a uma campainha existente. Agora tudo está no lugar e pode ser colado. No entanto, você pode primeiro querer terminar as próximas etapas para ter certeza de que tudo funciona como deveria.

Observações:

O Autodesk Fusion 360 está disponível gratuitamente para entusiastas! Se você deseja obter sua cópia, visite este link: autodesk.com - Fusion 360 For Hobbyists. Existem alguns termos, portanto, certifique-se de lê-los e aplicá-los. Foi meu primeiro projeto com o Fusion 360 e não tenho muita experiência no uso de software CAD, mas devo dizer que gosto muito do software e de todas as ferramentas adicionais que vêm com o Fusion 360

Etapa 4: Configurando a câmera

Configurando a Câmera
Configurando a Câmera
Configurando a Câmera
Configurando a Câmera
Configurando a Câmera
Configurando a Câmera

Presume-se que você tenha o Raspbian instalado e que ele seja executado no modo GUI. Se você ainda não instalou o Raspbian, siga este artigo: raspberrypi.org - Instalando imagens do sistema operacional. Se você inicializar o Raspbian, deverá ver uma área de trabalho conforme mostrado nas imagens.

Vamos configurar a câmera no RPi e ver se funciona! O método descrito aqui é diretamente do raspberrypi.org - Documentação. Primeiro, vamos atualizar para os pacotes mais recentes (incluindo firmware da câmera) executando os seguintes comandos em uma janela de terminal (veja as fotos):

atualização do apt sudo

atualização completa do apt sudo

Em seguida, a câmera deve ser ativada usando o seguinte comando:

sudo raspi-config

No menu, vá para 5. Opções de interface -> Câmera P1. Escolha habilitar a câmera e reiniciar o RPi executando:

reinício

A câmera agora deve estar configurada corretamente. Ele pode ser testado abrindo uma janela de terminal e execute:

raspistill -v -o /home/pi/test.jpg

A imagem é salva em: / home / pi.

Etapa 5: configurando o Docker

Configurando o Docker
Configurando o Docker
Configurando o Docker
Configurando o Docker
Configurando o Docker
Configurando o Docker
Configurando o Docker
Configurando o Docker

Para evitar a dependência e erros de instalação, decidi construir uma imagem Docker personalizada para este projeto (consulte wikipedia.org - Docker). Se você nunca usou ou ouviu falar do Docker, não se preocupe, explicarei passo a passo como usá-lo neste projeto. Na verdade, é super fácil! Caso você queira executar este projeto em uma instalação local (em vez de em um contêiner Docker), darei algumas dicas. Mas é altamente recomendável usar a imagem Docker. Afinal, eu o construí para tornar mais fácil para você executar este projeto!

O que é Docker?

Nota: esta parte fornece algumas informações básicas sobre o Docker, que podem ser ignoradas se você quiser apenas executar o código.

Este projeto é a primeira vez que usei o Docker e é simplesmente incrível! Talvez você já tenha ouvido falar sobre virtualenv ou Anaconda para Python? Bem, o Docker é muito semelhante no sentido de que você pode gerenciar facilmente versões de pacote e executar diferentes versões de Python em um sistema host usando um ambiente diferente (ou contêiner, como é chamado no Docker). Mas, em comparação com o virtualenv e o Anaconda, o Docker é muito mais poderoso, pois não se limita a conter apenas pacotes Python. Na verdade, em um contêiner Docker, você pode instalar e gerenciar também os pacotes de um sistema operacional desejado. Por exemplo, considere um site que você deseja migrar que executa uma estrutura da web Python (por exemplo, Django) com um banco de dados (por exemplo, MySQL). Sem um contêiner Docker, você teria que instalar todos os pacotes no novo servidor, um processo que é muito sujeito a erros e bugs. Por outro lado, quando seu site tiver sido construído no Docker, a migração é basicamente tão fácil quanto mover os arquivos / arquivos de imagem para o novo servidor e executá-los. Como você pode imaginar, o Docker também é muito útil para projetos no Instructables;)! Se você quiser saber mais sobre o Docker, confira o site deles: docker.org - Docker: Enterprise Container Platform. Agora, vamos começar a usar o Docker!

Instalando Docker

Instale o Docker executando:

curl -sSL https://get.docker.com | sh

Em seguida, o usuário é adicionado ao grupo de usuários 'docker', que fornece os direitos para executar o Docker. Isso é feito por:

sudo usermod -aG docker $ USER

Agora, você deve conseguir executar o Docker. Isso pode ser validado executando a imagem hello-world:

docker run hello-world

Por último, vamos extrair a imagem Docker que contém todas as dependências necessárias para executar os scripts Python da campainha. Este processo pode demorar um pouco, pois a imagem é muito grande (~ 1,5 GB). Executar:

docker pull erientes / campainha

Nota: o Dockerfile pode ser encontrado no repositório de campainhas no Github. Agora, tudo está pronto para rodar os scripts de campainha, que serão discutidos na próxima etapa.

Instalação local

Novamente, eu recomendo usar a imagem Docker em vez de uma instalação local. Mas, para completar este tutorial, agora descreverei algumas das etapas que executei para a instalação local.

Para poder executar o código, a versão do python deve ser> = 3.5 (usei o python 3.5.3) e os seguintes pacotes devem ser instalados:

  • reconhecimento de face
  • picamera
  • entorpecido
  • Almofada
  • python-telegram-bot
  • RPi. GPIO

Este link é bastante útil: Github - Instale dlib e face_recognition em um Raspberry Pi. No entanto, existem algumas ressalvas aqui: 1) O travesseiro precisa de pelo menos Python 3.5, que não será instalado seguindo este método. 2) Além disso, nem todos os pacotes necessários no projeto da campainha serão instalados seguindo este método. No entanto, você deve ser capaz de instalá-lo simplesmente usando pip3.

Etapa 6: executando os scripts da campainha

Executando os scripts da campainha
Executando os scripts da campainha
Executando os scripts da campainha
Executando os scripts da campainha
Executando os scripts da campainha
Executando os scripts da campainha

Obtenha os scripts

Os scripts podem ser baixados manualmente em: github.com - Erientes / campainha. Ou se você tiver o Git instalado, execute:

git clone

Crie aliases

Agora, para tornar nossas vidas um pouco mais fáceis, vamos criar alguns apelidos para executar os scripts. Executar:

leafpad ~ /.bashrc

Adicione as seguintes linhas e salve o arquivo:

alias doorbell_run = 'docker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -it erientes / doorbell python $ 1'

alias doorbell_login = 'docker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -it erientes / doorbell bash'

Scripts de teste

Para testar se tudo está instalado corretamente, abra um novo terminal e execute:

exemplos de campainha_run / 0_test_installation.py

O resultado deve ser simplesmente uma mensagem na janela do terminal que diz 'A instalação da campainha foi finalizada com sucesso!'. Para testar se a câmera pode ser acessada pelo contêiner do Docker, execute:

exemplos de campainha de porta / 1_test_camera.py

Ao executar 1_test_camera.py, uma foto será tirada e salva como 'test.jpg', que pode ser encontrada em / home / pi / doorbell. Por último, os drivers de LED podem ser testados executando:

exemplos de campainha de porta / 2_test_voicehat_drivers.py

Quando este script está sendo executado, o LED no switch de arcade deve responder quando o botão é pressionado.

Execução de scripts Doorbell

Para executar os scripts Doorbell, primeiro as credenciais do bot do Telegram precisam ser obtidas. Instale o Telegram no seu telefone e vá para telegram.me - Botfather. Inicie uma conversa e digite:

/ newbot

Preencha um nome e um nome de usuário para o bot. Depois disso, você receberá o token de acesso. Copie esse valor para o arquivo 'credentials_telegram_template.py' em / home / pi / doorbell e salve-o em um novo arquivo chamado 'credentials_telegram.py'. Por último, inicie uma conversa com o bot que você acabou de criar clicando no link que o Botfather fornece a você.

Finalmente, vamos executar o Doorbell com reconhecimento facial:

doorbell_run main.py

Observações:

Se você quiser saber mais sobre como o código funciona, verifique os comentários nos próprios scripts. Se você tiver alguma dúvida sobre o código, entre em contato comigo via Github

Etapa 7: usando a campainha

Image
Image
Usando a campainha
Usando a campainha
Usando a campainha
Usando a campainha

Vamos executar o script da campainha executando:

doorbell_run main.py Depois de carregar os pacotes, os scripts ficam ociosos. Existem basicamente 2 coisas que podem acontecer:

  1. Alguém toca a campainha.
  2. Alguém é adicionado à lista de permissões.

Alguem toca a campainha

Nesse caso, o script começará a tirar fotos até tirar uma foto em que um rosto seja detectado. Após a detecção, alguns métodos do pacote python 'face_recognition' são chamados para calcular uma codificação 128 do rosto. Em seguida, a codificação obtida é comparada às codificações em whitelist.csv e blacklist.csv. Os resultados possíveis resultam na seguinte resposta:

Na lista de permissões? Na lista negra? Resposta
sim Não A luz verde acende.
sim sim A luz amarela acende. A câmera da campainha envia fotos para o bot do Telegram com o ícone laranja. Este estado pode ocorrer se alguém foi adicionado às duas listas. Por exemplo, quando alguém era bem-vindo no início, mas depois foi colocado na lista negra.
Não Não A luz amarela acende. A câmera da campainha envia fotos para o bot do Telegram com o ícone laranja.
Não sim A luz vermelha acende. A câmera da campainha envia fotos para o bot do Telegram com o ícone vermelho.

Alguém foi adicionado à lista de permissões

Para adicionar alguém à lista de permissões, pressione o botão amarelo do semáforo quando a campainha estiver ociosa. Primeiro, a luz amarela acenderá. Se a luz verde piscar 3 vezes, o rosto da pessoa foi adicionado com sucesso à lista de permissões. Se a luz verde não piscar 3 vezes, a tentativa não foi bem-sucedida. Nesse caso, pressione o botão amarelo novamente. Você pode verificar facilmente se foi bem-sucedido tocando a campainha e verificando se a luz verde passou.

Como adicionar alguém à lista negra?

Obviamente, pessoas mal intencionadas não vão passar para nos dar uma foto de seu rosto. Então, em vez disso, você pode adicionar imagens de pessoas notórias que (por exemplo) a polícia publicou na pasta img / lista negra. A cada hora, esta pasta é verificada em busca de novas imagens. Se houver uma nova imagem, a codificação do rosto é calculada e adicionada a blacklist.csv. A imagem é então renomeada e movida para a pasta / img / lista negra / codificada.

Observações:

  • Operar os scripts por login no RPi proporciona muito mais controle e informações, mas o controle e as informações básicas podem ser obtidos utilizando apenas o display do semáforo.
  • O reconhecimento facial é implementado usando o pacote python 'face_recognition'. Este pacote é baseado no Dlib que contém um algoritmo de reconhecimento facial de última geração, que executa uma precisão de 99,38% no benchmark Labeled Faces in the Wild (fonte: dlib.net - High Quality Face Recognition with Deep Metric Learning)
Concurso de tecnologia assistiva
Concurso de tecnologia assistiva
Concurso de tecnologia assistiva
Concurso de tecnologia assistiva

Primeiro Prêmio no Concurso de Tecnologia Assistiva

Recomendado: