Índice:
- Etapa 1: Materiais
- Etapa 2: Fiação
- Etapa 3: Construindo o Invólucro
- Etapa 4: Configurando a câmera
- Etapa 5: configurando o Docker
- Etapa 6: executando os scripts da campainha
- Etapa 7: usando a campainha
Vídeo: Campainha com reconhecimento facial: 7 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
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
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
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
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:
- Monte os interruptores do Arcade.
- Certifique-se de que mantém os fios da campainha livres.
- Conecte o cabo de fita ao RPi.
- Aparafuse o RPi no painel inferior.
- Conecte os fios da campainha a um conector de fio e monte-o também no painel inferior.
- Conecte a Picamera ao RPi.
- 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
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
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
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
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:
- Alguém toca a campainha.
- 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)
Primeiro Prêmio no Concurso de Tecnologia Assistiva
Recomendado:
Abellcadabra (sistema de travamento de porta com reconhecimento facial): 9 etapas
Abellcadabra (Sistema de Trava de Porta de Reconhecimento de Rosto): Durante a quarentena, tentei encontrar uma maneira de matar o tempo construindo um sistema de reconhecimento de rosto para a porta da casa. Eu chamei de Abellcadabra - que é a combinação entre Abracadabra, uma frase mágica com campainha que eu só pego a campainha. LOL
Espelho de reconhecimento facial com compartimento secreto: 15 etapas (com fotos)
Espelho de reconhecimento facial com compartimento secreto: Sempre fiquei intrigado com os compartimentos secretos sempre criativos usados em histórias, filmes e coisas do gênero. Então, quando eu vi o Concurso de Compartimento Secreto, decidi experimentar a ideia sozinho e fazer um espelho de aparência comum que abre um s
Fechadura de reconhecimento facial: 8 etapas
Fechadura de reconhecimento facial: Em construção há cerca de um mês, apresento a fechadura de reconhecimento facial! Tentei fazer com que parecesse o mais elegante possível, mas só consigo fazer tanto quanto um garoto de 13 anos. Esta fechadura de reconhecimento facial é operada por um Raspberry Pi 4, com uma batente portátil especial
Reconhecimento e identificação facial - Arduino Face ID usando OpenCV Python e Arduino: 6 etapas
Reconhecimento e identificação facial | Arduino Face ID usando OpenCV Python e Arduino .: O reconhecimento facial AKA Face ID é um dos recursos mais importantes em telefones celulares hoje em dia. Então, eu tinha uma pergunta " posso ter um ID de rosto para meu projeto Arduino? e a resposta é sim … Minha jornada começou da seguinte maneira: Etapa 1: Acesso a nós
Sistema de segurança de reconhecimento facial para geladeira com Raspberry Pi: 7 etapas (com fotos)
Sistema de reconhecimento facial de segurança para geladeira com Raspberry Pi: navegando na internet descobri que os preços dos sistemas de segurança variam de 150 $ a 600 $ e acima, mas nem todas as soluções (mesmo as muito caras) podem ser integradas com outras ferramentas inteligentes em sua casa! Por exemplo, você não pode definir