Índice:

Sistema de segurança de reconhecimento facial para geladeira com Raspberry Pi: 7 etapas (com fotos)
Sistema de segurança de reconhecimento facial para geladeira com Raspberry Pi: 7 etapas (com fotos)

Vídeo: Sistema de segurança de reconhecimento facial para geladeira com Raspberry Pi: 7 etapas (com fotos)

Vídeo: Sistema de segurança de reconhecimento facial para geladeira com Raspberry Pi: 7 etapas (com fotos)
Vídeo: Reconhecimento Facial Tutorial - Opencv Python Deep Learning 2024, Novembro
Anonim
Image
Image
Sistema de segurança de reconhecimento facial para uma geladeira com Raspberry Pi
Sistema de segurança de reconhecimento facial para uma geladeira com Raspberry Pi
Sistema de segurança de reconhecimento facial para uma geladeira com Raspberry Pi
Sistema de segurança de reconhecimento facial para uma 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 configurar uma câmera de segurança na porta da frente para que ela abra automaticamente a porta para você ou seus amigos!

Decidi fazer uma solução simples, barata e poderosa, que você pode usar em qualquer lugar! Existem muitos manuais sobre como criar sistemas de segurança baratos e caseiros, porém quero demonstrar a aplicação realmente não trivial deles - sistema de segurança para geladeira com reconhecimento facial!

Como funciona? A câmera IP colocada no topo de uma geladeira, sensores (dois botões) detectam quando uma pessoa abre a porta da geladeira, depois que Raspberry Pi tira uma foto dessa pessoa (com câmera IP), em seguida, envia para a API Microsoft Face para analisar a imagem e receber o nome da pessoa. Com essas informações, o Raspberry Pi faz a varredura da “lista de acesso”: se a pessoa não tiver permissão para acessar a geladeira, o Raspberry notifica o proprietário por e-mail, mensagem de texto e twitter! (Veja as fotos acima)

Porque? O sistema permite que você controle os membros da sua família, especialmente quando eles estão de dieta ou lutando para não comer depois da meia-noite! Ou use-o apenas para se divertir!

Além disso, você pode configurar a câmera na porta da frente e configurar o sistema para abrir a porta quando você, seus familiares ou amigos estiverem se aproximando. E este não é o fim! As possibilidades do aplicativo são infinitas!

Vamos começar!

Etapa 1: Preparação

Preparação
Preparação

Você vai precisar de:

  • Raspberry Pi 3 (você pode usar versões mais antigas, mas a terceira geração tem Wi-Fi, por isso é muito conveniente)
  • Botões
  • Fios
  • Smartphone antigo ou câmera Raspberry Pi

A primeira coisa que você precisa fazer é configurar o Raspberry Pi. Instruções detalhadas sobre como fazer isso podem ser encontradas aqui e aqui, mas cobriremos as etapas mais importantes neste manual.

  1. Baixe Win32 DiskImager aqui (se você usa Windows)
  2. Baixe o SD Formatter aqui
  3. Insira o cartão SD em seu computador e formate-o com o SD Formatter
  4. Baixe a imagem Raspbian aqui (escolha "Raspbian Jessie com pixel")
  5. Execute Win32 DiskImager, escolha seu cartão SD, especifique o caminho para a imagem Raspbian, clique em "Gravar"
  6. Insira o cartão SD em seu Raspberry Pi e ligue-o!

Além disso, você precisará configurar seu Raspberry Pi para ter acesso ao sistema via SSH. Existem muitas instruções na internet, você pode usar isto, por exemplo, ou você pode conectar monitor e teclado.

Agora seu Pi está configurado e você está pronto para continuar!

Etapa 2: fazendo um sensor

Fazendo um Sensor
Fazendo um Sensor
Fazendo um Sensor
Fazendo um Sensor
Fazendo um Sensor
Fazendo um Sensor

Descrição da etapa: Nesta etapa faremos um sensor que detecta quando uma pessoa abre a porta de uma geladeira e ativa o Raspberry Pi.

Para configurá-lo, você precisaria dos 2 botões que preparou originalmente. O primeiro botão detectará quando a porta for aberta, o segundo botão detectará quando a porta for aberta até o ponto em que estivermos tirando a foto de uma pessoa.

  1. Solda os fios nos botões.
  2. Prenda o primeiro botão na porta da geladeira para que seja pressionado quando a porta for fechada (veja a imagem acima)
  3. Prenda o segundo botão na porta da geladeira conforme mostrado na foto acima. Este botão deve estar sempre solto, exceto quando a porta atinge o ponto em que o sistema tira a foto. Para configurá-lo, você precisa prender algo na geladeira para que este botão seja pressionado quando a porta for aberta na medida desejada (veja as fotos acima).
  4. Conecte os fios dos botões ao Raspberry Pi: primeiro botão ao GPIO 23 e aterramento, o segundo botão ao GPIO 24 e aterramento (veja o diagrama de fritzing).

Nota: Eu uso pinagem BCM (não Board), mais sobre a diferença leia aqui.

Uma vez conectado ao Raspberry Pi via SSH, para executar o shell python, digite no terminal:

python3

Se você estiver conectando monitor e teclado ao Raspberry Pi, execute “Python 3 IDLE” no menu.

O próximo passo é fazer o Raspberry Pi funcionar com os botões. Iremos anexar ouvintes especiais aos pinos GPIO 23 e 24, que ouvirão eventos de “borda ascendente” e evento de “borda descendente” nesses pinos. No caso do evento, os ouvintes irão chamar as funções que definimos. “Borda de subida” significa que o botão foi pressionado e agora solto (primeiro botão - a porta é aberta), “borda de descida” significa que o botão foi solto e agora pressionado (segundo botão - a porta atingiu o ponto específico). Mais sobre a funcionalidade dos botões - aqui.

Primeiro, importe a biblioteca que nos dá acesso aos pinos:

importar RPi. GPIO como GPIO

Agora defina funções especiais que serão chamadas quando o evento for disparado:

def sensor1 (canal): imprimir (“sensor 1 acionado”) def sensor2 (canal): imprimir (“sensor 2 acionado)

Defina o tipo de pinagem:

GPIO.setmode (GPIO. BCM)

Configure os pinos:

GPIO.setup (23, GPIO. IN, pull_up_down = GPIO. PUD_UP) GPIO.setup (24, GPIO. IN, pull_up_down = GPIO. PUD_UP)

Anexe ouvintes:

GPIO.add_event_detect (23, GPIO. RISING, callback = sensor1, bouncetime = 300) GPIO.add_event_detect (24, GPIO. FALLING, callback = sensor2, bouncetime = 300)

Agora você pode testar! Se você apertar o botão 1, verá uma mensagem no terminal “sensor 1 acionado”, o botão 2 exibe a mensagem “sensor 2 acionado”.

Nota: Quando terminar de experimentar, não se esqueça de chamar a seguinte função: GPIO.cleanup ().

Vamos configurar mais uma função que é chamada quando a porta chega ao ponto onde tiramos a foto! Você pode fazer isso sozinho ou usar minha implementação que anexei aqui (sensor.py)

Observação: sensor.py é usado apenas para fins de teste, os arquivos com todas as funcionalidades que anexei na última etapa.

Etapa 3: configurar a câmera IP

Configurar câmera IP
Configurar câmera IP
Configurar câmera IP
Configurar câmera IP
Configurar câmera IP
Configurar câmera IP

Descrição da etapa: Agora vamos configurar o smartphone antigo como uma câmera IP.

O uso do smartphone como câmera IP é feito via aplicativo. Existem diferentes aplicativos para Android, iOS, Windows Phone que você pode usar. Escolhi a chamada "IP Webcam" para Android. Este é um aplicativo gratuito e fácil de configurar.

Execute o aplicativo, vá em "Preferências de vídeo" para configurar a resolução das fotos que o aplicativo irá fornecer. Em seguida, toque em "Iniciar servidor" (primeira imagem acima). Na parte inferior da tela, você deve ver o endereço IP da câmera (veja a segunda imagem acima). No navegador você pode digitar https://cam_ip_address/photo-j.webp

Finalmente, coloque a câmera na geladeira (última imagem acima).

Etapa 4: API Face

Face API
Face API

Descrição da etapa: Nesta etapa, falaremos sobre a API Face da Microsoft, que faz reconhecimento facial e identifica pessoas.

O Face API da Microsoft é um serviço de reconhecimento facial, por meio do qual podemos analisar fotos e identificar pessoas nelas.

Primeiro, você precisa da conta do Microsoft Azure. Se você não tiver um, pode criá-lo gratuitamente aqui.

Em segundo lugar, acesse https://portal.azure.com, clique em "Novo" à esquerda, digite no formulário "APIs de serviços cognitivos", selecione-o e clique em "Criar". Ou você pode abrir este link. Agora você precisa inserir o Nome do seu serviço, selecionar o tipo de assinatura, o tipo de API de que você precisa (no nosso caso é a Face API), localização, faixa de preço, grupo de recursos e concordar com os Termos Legais (veja a captura de tela adicionada a esta etapa).

Terceiro, clique em "Todos os recursos", selecione seu serviço Face API e veja as estatísticas de uso, credenciais, etc.

Os detalhes da API Face podem ser encontrados aqui, exemplos em diferentes linguagens de programação são fornecidos. Para este projeto, estamos usando python. Você pode ler a documentação e fazer seu próprio conjunto de funcionalidades ou usar o fornecido aqui (este não é o conjunto completo de funcionalidades fornecido pela Microsoft, apenas os pontos necessários para este projeto). Meus arquivos python estão anexados a esta etapa.

Vamos passar para a estrutura de trabalho com a API Face. Para usar a funcionalidade de "Identificação", temos que criar uma biblioteca de pessoas usando o serviço Face API que reconhecerá as fotos que estão sendo tiradas pelo aplicativo. Para configurá-lo, siga as etapas:

  1. Crie um grupo
  2. Adicionar pessoas a este grupo
  3. Adicione rostos a essas pessoas
  4. Grupo de trem
  5. Envie foto com a pessoa que você deseja identificar (você deve fornecer foto e identificação do grupo em que serviço irá procurar os candidatos)
  6. Resultado: em resposta, você receberá uma lista de candidatos que podem estar na foto que você enviou.

Criei três arquivos com funcionalidade específica que permite trabalhar com grupos, pessoas solteiras e fotos individuais:

  • PersonGroup.py - contém recursos que permitem: criar grupo, obter informações sobre o grupo, obter a lista de todos os seus grupos, treinar o grupo e obter o status do treinamento
  • Person.py - contém recursos que permitem: criar uma pessoa, obter informações da pessoa, listar todas as pessoas em um grupo específico, adicionar rostos a uma pessoa especificada
  • Face.py - contém recursos que permitem: detectar rosto na imagem, identificar pessoa, obter o nome da pessoa identificada

No arquivo chamado "recognition.py", forneço recursos que permitem verificar se a imagem contém um rosto e adicionar rostos a uma pessoa especificada (adiciona automaticamente o rosto de muitas imagens da pasta especificada).

Baixe o arquivo anexado a esta etapa, descompacte-o, altere a variável global 'KEY' nestes três arquivos: PersonGroup.py, Person.py e Face.py para sua própria chave que você pode encontrar: portal.azure.com> todos os recursos > serviço de API facial (ou como você o chamou)> guia de teclas. Você pode usar qualquer uma das duas chaves.

Nota: aqui vamos treinar o serviço Face API para reconhecer pessoas, para que as seguintes ações possam ser feitas de qualquer computador (Raspberry Pi não é necessário para isso) - as alterações são salvas no servidor da Microsoft.

Depois de alterar a chave, execute o reconhecimento.py e digite o seguinte comando no shell do python:

PersonGroup.create ("family", 'fff-fff')) // você pode usar seu próprio nome e id para

grupo printResJson (PersonGroup.getPersonGroup ('fff-fff'))

Você tem que ver os dados sobre o grupo que acabou de criar. Agora digite:

printResJson (Person.createPerson ('fff-fff', 'nome da pessoa'))

Agora você obtém a identificação da pessoa. Crie uma pasta com imagens dessa pessoa para que todas as imagens contenham o rosto dessa pessoa. Você pode usar a função detectFaceOnImages em recognition.py, que mostra qual rosto da foto foi detectado. Agora, execute o comando:

addFacesToPerson ('pasta com imagens', 'ID da pessoa que você obteve após o comando anterior', 'fff-fff')

Então temos que treinar nosso serviço, inserindo o seguinte:

PersonGroup.trainPersonGroup ('fff-fff') printResJson (PersonGroup.getPersonGroupTrainingStatus ('fff-fff'))

Agora nosso grupo está treinado e pronto para identificar uma pessoa.

Para verificar a pessoa na imagem, você pode:

Face.checkPerson (imagem, 'fff-fff')

Em resposta, você obterá uma lista de candidatos e probabilidade de quem está na foto.

Nota: toda vez que você adiciona rostos a uma pessoa ou pessoa a um grupo, você tem que treinar o grupo!

Etapa 5: configuração do nó vermelho

Configuração Node-Red
Configuração Node-Red

Descrição da etapa: nesta etapa, criaremos um fluxo Node-Red que o notificará sobre a violação de acesso à sua geladeira =)

Se o seu Raspberry Pi for executado no Raspbian Jessie novembro de 2015 ou versão posterior, você não precisa instalar o Node-Red, porque ele já vem pré-instalado. Você só precisa atualizá-lo. Por favor, use o manual aqui.

Agora, temos que instalar o nó Twilio no Node-Red, para que possamos acionar uma mensagem de texto. Abra o terminal e digite:

cd ~ /.node-rednpm install node-red-node-twilio

Mais sobre o nó Twilio aqui. Depois disso, execute o Node-Red digitando no terminal:

nó-vermelho

Em seguida, vá para: https://127.0.0.1:1880/ - se você abrir o navegador no Raspberry Pihttps:// {raspberry_pi_ip}: 1880 / - se quiser abrir o editor Node-Red em outro computador

Para saber o endereço IP do raspberry pi, use esta instrução.

Agora você tem que encontrar o nó Twilio na lista de nós em seu editor Node-Red (geralmente ele aparece após o grupo 'social').

É hora de criar o fluxo!

Obs: você pode usar meu fluxo anexado a esta etapa, mas não se esqueça de configurar os nós: email, twitter e twilio. Leia sobre isso mais tarde.

Nosso fluxo começa com o nó "notificar" que aceita a solicitação POST de nosso programa principal com alguns dados sobre violação de acesso (exemplos dos dados podem ser encontrados no nó de comentário "sobre o recebimento de objetos"). Este nó responde imediatamente com a mensagem "Ok", para que o programa principal saiba que os dados foram recebidos (Fluxo: / notificar> resposta com Ok> resposta). O nó verde na parte inferior com o nome msg.payload está lá para fins de depuração: se algo não estiver funcionando, você pode usá-lo.

Do primeiro nó (/ notificação) dados propagados para "Tópico de dados" e "Tópico de imagem", onde os tópicos "dados" e "imagem" foram adicionados respectivamente.

No nó "compilar" recebemos dados (que obtemos durante a primeira etapa) com o tópico "dados" e uma imagem com o tópico "imagem" (a imagem é tirada de /home/pi/image.jpg). Essas duas mensagens devem ser compiladas em um objeto, mas os dois objetos são recebidos em momentos diferentes! Para lidar com isso, usaremos o recurso de "contexto" que nos permite armazenar dados entre as invocações de função.

O próximo passo é verificar se a pessoa de nossa lista de acesso é um estranho (nó checkConditions). Há um campo "TrustedPerson" nos dados que recebemos: "verdadeiro" significa que conhecemos essa pessoa, mas ela violou a permissão de acesso, "falso" significa que a pessoa é um estranho.

Quando o resultado é “verdadeiro” enviamos notificação para twitter, twilio e email; quando o resultado é “falso” - apenas e-mail e twilio. Criamos um objeto para email com uma mensagem, imagem anexada e assunto do email, um objeto para twilio com uma mensagem. Para o Twitter, adicionamos dados a um objeto se "trustedPerson" for verdadeiro. Em seguida, envie esses três objetos para três nós diferentes.

Nota: Se o nó a seguir não receber uma mensagem, simplesmente enviamos "nulo" para ele.

É hora de configurar os nós para notificação!

Twitter Adicione o nó "twitter" ao fluxo. Abra-o com um clique duplo. Clique no lápis ao lado de "Twitter ID". Em seguida, clique em "Clique aqui para autenticar com o Twitter". Entre na sua conta do Twitter e dê ao Node-Red as permissões necessárias.

EmailAdicione o nó "email" ao fluxo. Se você não usa o Gmail, você precisa alterar os dados nos seguintes campos - "Servidor" e "Porta" (você pode encontrar qual servidor e porta deve usar nas páginas de ajuda do seu agente de e-mail), caso contrário, não os altere Campos.

  • Para> endereço de e-mail para o qual as mensagens serão enviadas
  • ID do usuário> login do seu e-mail (talvez o mesmo que o campo "Para")
  • Senha> senha da sua conta de e-mail
  • Nome> nome para este nó

Twilio Vá para https://www.twilio.com/try-twilio e registre uma conta. Verifique isso. Vá para https://www.twilio.com/console. Clique em "Números de telefone" (ícone # grande) e crie um número gratuito. Se você estiver fora dos EUA, terá que adicionar permissões GEO, vá para https://www.twilio.com/console/sms/settings/geo-pe … e adicione seu país.

Agora, vá ao editor Node-Red, adicione o nó Twilio, clique duas vezes nele para configurar e preencher todos os campos:

  • Credenciais> Usar credenciais locais
  • Twilio> editar

    • SID da conta> tirar daqui
    • De> digite o número virtual que você criou
    • Token> tirar daqui
    • Nome> Twilio
  • Saída> SMS
  • Para> seu número de telefone
  • Nome> nome para este nó.

Clique em Implementar

Agora seu fluxo está pronto! Você pode testá-lo enviando uma solicitação POST com o objeto especificado!

Etapa 6: Compilando todo o projeto

Compilando todo o projeto
Compilando todo o projeto
Compilando todo o projeto
Compilando todo o projeto

Descrição da etapa: nesta etapa, colocaremos todas as partes juntas e faremos com que funcionem como um sistema separado.

Por esta etapa, você deve:

  1. Configurar smartphone antigo como câmera ip
  2. Ter sensores funcionando
  3. API do Face da Microsoft treinada
  4. Fluxo Node-Red configurado

Agora temos que melhorar o código que escrevemos na etapa 2. Mais especificamente, function process () que é chamado quando a pessoa abre a porta. Nesta função, faremos o seguinte:

  1. Obtenha a imagem da câmera ip e salve-a em “/ home / pi /” com o nome “image.jpg” (função “fromIpCam” no arquivo “getImage”)
  2. Pegue o nome da pessoa nessa imagem (função “checkPerson” no arquivo “reconhecimento”)
  3. Verifique a permissão de acesso para essa pessoa (função “verificar” no arquivo “acesso”)
  4. Com base no resultado da mensagem de composição da função “verificar”
  5. Envie mensagem composta para Node-Red (função “toNodeRed” no arquivo “sendData”)

Observação: para ver o código completo das funções mencionadas, baixe o arquivo zip anexado a esta etapa.

Sobre a função “fromIpCam”. Esta função faz a solicitação GET para sua câmera ip, obtém a imagem focada em resposta e salve-a no caminho especificado por você. Você deve fornecer o endereço IP da câmera para esta função.

Sobre a função “checkPerson”. A função obtém o caminho para a imagem e o grupo no qual você deseja buscar a pessoa da foto como parâmetros. Em primeiro lugar, ele detecta um rosto na imagem fornecida (arquivo Face.py, função “detectar”). Em resposta, ele obtém a identificação se o rosto for detectado. Em seguida, chama a função “identificar” (arquivo Face.py) que encontra pessoas semelhantes em um grupo específico. Em resposta, ele obtém uma identificação de pessoa se a pessoa for encontrada. Em seguida, chame a função “pessoa” (arquivo Person.py) com o ID da pessoa como parâmetro, a função “pessoa” retorna a pessoa com o ID especificado, obtemos o nome da pessoa e o retornamos.

Sobre a função “verificar”. Esta função é colocada no arquivo “access” onde também coloca a “access list” como uma variável global (você pode modificá-la como quiser). Pegando o nome da pessoa da função anterior, a função “verificar” compare essa pessoa com a lista de acesso e retorne o resultado.

Nota: o projeto completo está anexado à próxima etapa.

Etapa 7: Conclusão

Nesta etapa, anexei o projeto completo que você deve descompactar e colocar no seu Raspberry Pi.

Para fazer este projeto funcionar, execute o arquivo “main.py”.

Se você controlar o Raspberry Pi via SSH, terá que executar dois programas em um shell: o programa python e o Node-Red. Digite o seguinte no terminal:

nó-vermelho

Pressione “Ctrl + Z” e digite:

empregos

Você viu o processo Node-Red. Observe a ID do processo e digite:

bg

Agora o Node-Red precisa começar a trabalhar em segundo plano. Em seguida, vá para o diretório com seu projeto e execute o programa principal:

python3 main.py

Observação: não se esqueça de alterar a CHAVE nos arquivos Python (etapa 4) e as credenciais no fluxo Node-Red (etapa 5)

Feito! Sua geladeira está segura!

Espero que tenham gostado deste intratável! Sinta-se à vontade para deixar seus comentários em mente.

Eu agradeceria se você votasse no meu projeto =)

Obrigado!

Recomendado: