Taula de continguts:

Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi: 7 passos (amb imatges)
Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi: 7 passos (amb imatges)

Vídeo: Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi: 7 passos (amb imatges)

Vídeo: Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi: 7 passos (amb imatges)
Vídeo: Все осталось позади! - Невероятный заброшенный викторианский особняк в Бельгии 2024, Juliol
Anonim
Image
Image
Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi
Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi
Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi
Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi

Navegant per Internet, he descobert que els preus dels sistemes de seguretat varien de 150 a 600 $ i més, però no totes les solucions (fins i tot les molt cares) es poden integrar amb altres eines intel·ligents de casa vostra. Per exemple, no podeu configurar una càmera de seguretat a la porta principal perquè obri automàticament la porta per a vosaltres o els vostres amics.

He decidit fer una solució senzilla, econòmica i potent que pugueu utilitzar a qualsevol lloc. Hi ha molts manuals sobre com crear sistemes de seguretat barats i casolans, però vull demostrar una aplicació realment no trivial: sistema de seguretat per a una nevera amb reconeixement facial.

Com funciona? La càmera IP situada a la part superior d’una nevera, els sensors (dos botons) detecten quan una persona obre la porta de la nevera, després Raspberry Pi fa una foto d’aquesta persona (amb càmera IP) i l’envia a l’API de Microsoft Face per analitzar la imatge i rebre el nom de la persona. Amb aquesta informació, Raspberry Pi escaneja la "llista d'accés": si la persona no té permís per accedir a la nevera, Raspberry ho notifica al propietari per correu electrònic, missatges de text i twitter. (Veure imatges més amunt)

Per què? El sistema us permet controlar els membres de la vostra família, sobretot quan segueixen una dieta o tenen dificultats per no menjar després de mitjanit. O utilitzeu-lo només per diversió!

A més, podeu configurar la càmera a la porta principal i configurar el sistema perquè obri la porta quan us acosteu vosaltres, els familiars o els amics. I aquest no és el final! Les possibilitats de l’aplicació són infinites.

Anem a començar!

Pas 1: Preparació

Preparació
Preparació

Necessitarà:

  • Raspberry Pi 3 (podeu utilitzar versions anteriors, però la tercera generació té Wi-Fi, de manera que és molt convenient)
  • Botons
  • Filferros
  • Antiga càmera Smartphone o Raspberry Pi

El primer que heu de fer és configurar el vostre Raspberry Pi. Podeu trobar instruccions detallades sobre com fer-ho aquí i aquí, però cobrirem els passos més importants d’aquest manual.

  1. Descarregueu Win32 DiskImager des d'aquí (si utilitzeu Windows)
  2. Descarregueu SD Formatter des d’aquí
  3. Inseriu la targeta SD a l'ordinador i formateu-la amb SD Formatter
  4. Descarregueu la imatge Raspbian des d'aquí (trieu "Jessie Raspbian amb píxel")
  5. Executeu Win32 DiskImager, trieu la vostra targeta SD, especifiqueu el camí a la imatge Raspbian i feu clic a "Escriu"
  6. Inseriu la targeta SD al vostre Raspberry Pi i engegueu-la.

A més, haureu de configurar el vostre Raspberry Pi per tenir accés al sistema mitjançant SSH. Hi ha moltes instruccions a Internet, podeu utilitzar-ho, per exemple, o podeu connectar monitor i teclat.

Ara el vostre Pi està configurat i esteu a punt per continuar.

Pas 2: fer un sensor

Fent un sensor
Fent un sensor
Fent un sensor
Fent un sensor
Fent un sensor
Fent un sensor

Descripció del pas: en aquest pas crearem un sensor que detecta quan una persona obre la porta d’una nevera i activa Raspberry Pi.

Per configurar-lo, necessitareu els 2 botons que heu preparat originalment. El primer botó detectarà quan s’obri la porta, el segon botó detectarà quan s’obri la porta fins al punt en què fem una foto d’una persona.

  1. Soldar els cables als botons.
  2. Col·loqueu el primer botó a la porta de la nevera de manera que s’empengui quan la porta estigui tancada (vegeu la imatge superior)
  3. Connecteu el segon botó a la porta de la nevera tal com es mostra a la foto superior. Aquest botó s'ha de deixar anar en tot moment, excepte quan la porta arriba al punt en què el sistema fa una fotografia. Per configurar-lo, heu d’adjuntar alguna cosa a la nevera perquè es premgui aquest botó quan s’obri la porta en la mesura desitjada (vegeu les fotos anteriors).
  4. Connecteu els cables dels botons al Raspberry Pi: primer botó a GPIO 23 i terra, segon botó a GPIO 24 i terra (vegeu el diagrama fritzing).

Nota: faig servir el pinout BCM (no Board), més sobre la diferència que es llegeix aquí.

Un cop connectat al vostre Raspberry Pi mitjançant SSH, per executar l'intèrpret d'ordres Python, escriviu el terminal:

python3

Si connecteu monitor i teclat a Raspberry Pi, només cal que executeu "Python 3 IDLE" des del menú.

El següent pas és fer que Raspberry Pi funcioni amb els botons. Adjuntarem oients especials a GPIO 23 i 24 pins, que escoltaran els esdeveniments de “pujada ascendent” i esdeveniment de “pujada descendent” en aquests pins. En cas de l’esdeveniment, els oients trucaran a les funcions que hem definit. "Vora ascendent" significa que el botó s'ha premut i ara s'ha deixat anar (primer botó - la porta està oberta), "vora descendent" significa que el botó s'ha alliberat i ara s'ha premut (el segon botó - porta ha arribat al punt específic). Més informació sobre la funcionalitat de botons: aquí.

En primer lloc, importeu la biblioteca que ens doni accés als pins:

importar RPi. GPIO com a GPIO

Ara definiu funcions especials que s'anomenaran quan s'activi l'esdeveniment:

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

Estableix el tipus de pinout:

GPIO.setmode (GPIO. BCM)

Configureu els pins:

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

Adjunta oients:

GPIO.add_event_detect (23, GPIO. RISING, devolució = sensor1, temps de rebot = 300) GPIO.add_event_detect (24, GPIO. FALLING, devolució = sensor2, temps de rebot = 300)

Ara podeu provar-ho! Si premeu el botó 1, veureu un missatge al terminal "sensor 1 activat", el botó 2 us mostrarà un missatge "sensor 2 activat".

Nota: Quan hàgiu acabat d'experimentar, no oblideu trucar a la funció següent: GPIO.cleanup ().

Configurem una funció més que es diu quan la porta arriba al punt on fem una foto. Podeu fer-ho vosaltres mateixos o fer servir la meva implementació que he adjuntat aquí (sensor.py)

Nota: sensor.py només s’utilitza amb finalitats de prova, els fitxers amb tota la funcionalitat que he adjuntat a l’últim pas.

Pas 3: configureu la càmera IP

Configureu la càmera IP
Configureu la càmera IP
Configureu la càmera IP
Configureu la càmera IP
Configureu la càmera IP
Configureu la càmera IP

Descripció del pas: ara configurarem el telèfon intel·ligent antic com a càmera IP.

L’ús del telèfon intel·ligent com a càmera IP es fa a través de l’aplicació. Hi ha diferents aplicacions per a Android, iOS, Windows Phone que podeu utilitzar. Vaig triar la que es deia "Càmera web IP" per a Android. Aquesta és una aplicació gratuïta i és fàcil de configurar.

Executeu l'aplicació, aneu a "Preferències de vídeo" per configurar la resolució de les fotos que proporcionarà l'aplicació. A continuació, toqueu "Inici del servidor" (primera imatge superior). A la part inferior de la pantalla heu de veure l'adreça IP de la càmera (vegeu la segona imatge superior). Al navegador podeu escriure https://cam_ip_address/photo-j.webp

Finalment, poseu la càmera a la nevera (darrera imatge superior).

Pas 4: API de cara

API Face
API Face

Descripció del pas: en aquest pas parlarem de l'API facial de Microsoft que fa reconeixement facial i identifica les persones.

L’API Face de Microsoft és un servei de reconeixement facial, a través del qual podem analitzar les fotos i identificar les persones que hi apareixen.

En primer lloc, necessiteu un compte de Microsoft Azure. Si no en teniu, podeu crear-lo gratuïtament aquí.

En segon lloc, aneu a https://portal.azure.com, feu clic a "Nou" a la part esquerra, escriviu el formulari "API de serveis cognitius", seleccioneu-lo i feu clic a "Crea". O podeu obrir aquest enllaç. Ara heu d’introduir el nom del vostre servei, seleccionar el tipus de subscripció, el tipus d’API que necessiteu (en el nostre cas és Face API), la ubicació, el nivell de preus, el grup de recursos i acceptar els Termes legals (vegeu la captura de pantalla afegida a aquest pas).

En tercer lloc, feu clic a "Tots els recursos", seleccioneu el servei Face API i consulteu les estadístiques d'ús, les credencials, etc.

Els detalls de l'API Face es poden trobar aquí, es proporcionen exemples en diferents llenguatges de programació. Per a aquest projecte estem utilitzant python. Podeu llegir documentació i crear el vostre propi conjunt de funcionalitats o podeu utilitzar el que es proporciona aquí (no és el conjunt complet de funcionalitats que proporciona Microsoft, només els punts necessaris per a aquest projecte). Els meus fitxers python s’adjunten a aquest pas.

Passem a l'estructura de treball amb Face API. Per utilitzar la funcionalitat "Identificació", hem de crear una biblioteca de persones que utilitzen el servei Face API que reconeixerà les fotos que està prenent l'aplicació. Per configurar-lo, seguiu els passos següents:

  1. Creeu un grup
  2. Afegiu persones a aquest grup
  3. Afegiu cares a aquestes persones
  4. Grup de tren
  5. Envieu una foto amb la persona que vulgueu identificar (heu de proporcionar una foto i un identificador de grup en el servei que buscarà candidats)
  6. Resultat: en resposta obtindreu una llista de candidats que poden aparèixer a la foto que heu enviat.

He creat tres fitxers amb funcionalitats específiques que permeten treballar amb grups, persones soles i fotos individuals:

  • PersonGroup.py: conté funcions que permeten: crear un grup, obtenir informació sobre el grup, obtenir una llista de tots els grups, formar un grup i obtenir l'estat de la formació
  • Person.py: conté funcions que permeten: crear una persona, obtenir informació sobre la persona, llistar totes les persones del grup especificat, afegir cares a la persona especificada
  • Face.py: conté funcions que permeten: detectar la cara a la imatge, identificar la persona, obtenir el nom de la persona identificada

Al fitxer anomenat "reconnaissance.py" ofereixo funcions que permeten comprovar si la imatge conté una cara i afegir cares a la persona especificada (afegeix automàticament la cara de moltes imatges de la carpeta especificada).

Descarregueu el fitxer adjunt a aquest pas, descomprimiu-lo, canvieu la variable global "KEY" en aquests tres fitxers: PersonGroup.py, Person.py i Face.py a la vostra clau, que podeu trobar: portal.azure.com> tots els recursos > servei de cara API (o com l’heu anomenat)> pestanya de tecles. Podeu utilitzar qualsevol de les dues tecles.

Nota: aquí entrenarem el servei Face API per reconèixer les persones, de manera que es poden fer les accions següents des de qualsevol equip (per a això no és necessari Raspberry Pi): els canvis es desen al servidor de Microsoft.

Després de canviar KEY, executeu reconnaissance.py i introduïu l'ordre següent a l'intèrpret d'ordres de Python:

PersonGroup.create ("family", 'fff-fff')) // podeu utilitzar el vostre propi nom i identificador per

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

Heu de veure dades sobre el grup que acabeu de crear. Ara introduïu:

printResJson (Person.createPerson ('fff-fff', 'nom de la persona'))

Ara obtindreu una identificació de persona. Crea una carpeta amb imatges d'aquesta persona perquè totes les imatges continguin la cara d'aquesta persona. Podeu utilitzar la funció detectFaceOnImages a recognoscència.py que us mostra quina cara de fotos es detecta. Ara, executeu l'ordre:

addFacesToPerson ('carpeta amb imatges', 'identificador de persona que heu obtingut després de l'ordre anterior', 'fff-fff')

Després hem d’entrenar el nostre servei introduint el següent:

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

Ara el nostre grup està format i està preparat per identificar una persona.

Per comprovar la persona a la imatge podeu:

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

Com a resposta, obtindreu una llista de candidats i probabilitats que apareixen a la foto.

Nota: cada vegada que afegiu cares a una persona o persona a un grup, heu d’entrenar el grup.

Pas 5: Configuració de node-vermell

Configuració Node-Red
Configuració Node-Red

Descripció del pas: en aquest pas, crearem un flux Node-Red que us notificarà sobre la infracció d'accés a la vostra nevera =)

Si el vostre Raspberry Pi funciona amb Raspbian Jessie el novembre de 2015 o una versió posterior, no cal que instal·leu Node-Red, ja que ja està preinstal·lat. Només cal que l’actualitzeu. Utilitzeu el manual aquí.

Ara hem d’instal·lar el node Twilio al Node-Red, de manera que podríem activar un missatge de text. Obriu el terminal i escriviu:

cd ~ /.node-rednpm instal·la node-red-node-twilio

Més informació sobre el node Twilio aquí. Després, executeu el Node-Red escrivint al terminal:

vermell de node

A continuació, aneu a: https://127.0.0.1:1880/ - si obriu el navegador al vostre gerd Pihttps:// {raspberry_pi_ip}: 1880 / - si voleu obrir l'editor Node-Red des d'un altre ordinador

Per conèixer l'adreça IP de raspberry pi, utilitzeu aquesta instrucció.

Ara heu de trobar el node Twilio a la llista de nodes del vostre editor Node-Red (normalment apareix després del grup "social").

És hora de crear el flux!

Nota: podeu utilitzar el meu flux adjunt a aquest pas, però no oblideu configurar els nodes: correu electrònic, twitter i twilio. Llegiu-ne més endavant.

El nostre flux comença amb el node "notificar" que accepta la sol·licitud POST del nostre programa principal amb algunes dades sobre la violació de l'accés (es pot trobar un exemple de les dades al node de comentaris "sobre la recepció d'objectes"). Aquest node respon immediatament amb el missatge "Ok", de manera que el programa principal sap que les dades s'han rebut (Flow: / notification> resposta amb Ok> resposta). Hi ha un node verd a la part inferior amb el nom msg.payload amb finalitats de depuració: si alguna cosa no funciona, podeu utilitzar-lo.

Des del primer node (/ notificar) les dades propagades a "Tema de dades" i "Tema d'imatge" on s'afegeixen temes "dades" i "imatge" respectivament.

Al node "compila" rebem dades (que obtenim durant el primer pas) amb el tema "dades" i una imatge amb el tema "imatge" (la imatge està extreta de /home/pi/image.jpg). Aquests dos missatges s’han de compilar en un sol objecte, però els dos objectes es reben en un moment diferent. Per fer-ho, utilitzarem la característica "context" que ens permet emmagatzemar dades entre invocacions de funcions.

El següent pas és comprovar si una persona de la nostra llista d’accés o és una persona desconeguda (node checkConditions). Hi ha un camp "TrustPerson" a les dades que rebem: "true" significa que coneixem aquesta persona, però que ha infringit el permís d'accés, "false" significa que la persona és desconeguda.

Quan el resultat sigui "cert", enviem una notificació a twitter, twilio i correu electrònic; quan el resultat és "fals": només correu electrònic i twilio. Creem un objecte per correu electrònic amb un missatge, imatge adjunta i assumpte del correu electrònic, un objecte per a twilio amb un missatge. Per a twitter, afegim dades a un objecte si "TrustPerson" és cert. A continuació, envieu aquests tres objectes a tres nodes diferents.

Nota: Si el node següent no ha de rebre cap missatge, només li enviem "nul".

És hora de configurar els nodes per a la notificació.

Twitter Afegiu el node "twitter" al flux. Obriu-lo fent doble clic. Feu clic al llapis al costat de "Identificador de Twitter". A continuació, feu clic a "Feu clic aquí per autenticar-vos amb Twitter". Entreu al vostre compte de twitter i doneu els permisos necessaris per a Node-Red.

Afegiu un node "correu electrònic" al flux. Si no utilitzeu Gmail, haureu de canviar les dades als camps següents: "Servidor" i "Port" (podeu trobar quin servidor i quin port heu d'utilitzar a les pàgines d'ajuda del vostre agent de correu electrònic) en cas contrari, no canvieu-les camps.

  • A> adreça de correu electrònic a la qual s'enviaran els missatges
  • Userid> iniciar sessió des del vostre correu electrònic (potser el mateix que el camp "A")
  • Contrasenya> contrasenya del vostre compte de correu electrònic
  • Nom> nom d'aquest node

Twilio Aneu a https://www.twilio.com/try-twilio i registreu un compte. Verifiqueu-ho. Aneu a https://www.twilio.com/console. Feu clic a "Números de telèfon" (icona gran #) i creeu un número gratuït. Si sou fora dels EUA, heu d'afegir permisos GEO, aneu a https://www.twilio.com/console/sms/settings/geo-pe… i afegiu el vostre país.

Ara aneu a l’editor Node-Red, afegiu el node Twilio, feu doble clic sobre ell per configurar i omplir tots els camps:

  • Credencials> Utilitzeu credencials locals
  • Twilio> edita
    • SID del compte> agafa aquí
    • De> escriviu el número virtual que heu creat
    • Token> prendre des d'aquí
    • Nom> Twilio
  • Sortida> SMS
  • A> el vostre número de telèfon
  • Nom> nom d'aquest node.

Feu clic a Desplega

Ara el vostre flux està llest. Podeu provar-ho enviant una sol·licitud POST amb l'objecte especificat.

Pas 6: compilació del projecte sencer

Recopilació del projecte sencer
Recopilació del projecte sencer
Recopilació del projecte sencer
Recopilació del projecte sencer

Descripció del pas: en aquest pas unirem totes les parts i les farem funcionar com un sistema independent.

En aquest pas heu de:

  1. Configureu el telèfon intel·ligent antic com a càmera IP
  2. Disposen de sensors de treball
  3. API Face de Microsoft amb formació
  4. Flux Node-Red configurat

Ara hem de millorar el codi que vam escriure al pas 2. Més específicament process process () que es diu quan una persona obre la porta. En aquesta funció farem el següent:

  1. Obteniu imatge de la càmera IP i deseu-la a “/ home / pi /” amb el nom “image.jpg” (funció “fromIpCam” al fitxer “getImage”)
  2. Obteniu el nom de la persona en aquesta imatge (funció "checkPerson" al fitxer "reconeixement")
  3. Comproveu el permís d'accés per a aquesta persona (funció "comprovar" al fitxer "accés")
  4. Basat en el resultat del missatge de redacció de la funció "comprovar"
  5. Enviar missatge compost a Node-Red (funció "toNodeRed" al fitxer "sendData")

Nota: per veure el codi complet de les funcions esmentades, descarregueu el fitxer zip adjunt a aquest pas.

Quant a la funció “fromIpCam”. Aquesta funció fa la sol·licitud GET a la càmera IP, obtingueu una imatge focalitzada en resposta i deseu-la al camí especificat. Heu de proporcionar l'adreça IP de la càmera a aquesta funció.

Quant a la funció "checkPerson". La funció obté el camí cap a la imatge i el grup en què voleu cercar una persona de la foto com a paràmetres. En primer lloc, detecta una cara a la imatge proporcionada (fitxer Face.py, funció "detectar"). En resposta, obté la identificació de la cara detectada. A continuació, crida a la funció "identificar" (fitxer Face.py) que troba persones similars en un grup especificat. En resposta, obté una identificació de persona si es troba una persona. A continuació, truqueu a la funció "persona" (fitxer Person.py) amb l'identificador de persona com a paràmetre, la funció "persona" retorna la persona amb l'identificador especificat, obtenim el nom de la persona i el retornem.

Sobre la funció "comprovar". Aquesta funció es col·loca al fitxer "access" on també col·loca "access list" com a variable global (podeu modificar-la com vulgueu). Obtenint el nom de la persona de la funció anterior, la funció "comprova" compara aquesta persona amb la llista d'accés i retorna el resultat.

Nota: el projecte complet s'adjunta al següent pas.

Pas 7: Conclusió

En aquest pas, he adjuntat el projecte complet que heu de descomprimir i col·locar al vostre Raspberry Pi.

Per fer funcionar aquest projecte, executeu el fitxer "main.py".

Si controleu Raspberry Pi mitjançant SSH, heu d’executar dos programes des d’un mateix intèrpret: el programa python i el Node-Red. Escriviu al terminal el següent:

vermell de node

Presioneu "Ctrl + Z" i escriviu:

feines

Heu vist el procés Node-Red. Mireu l'identificador del procés i escriviu:

bg

Ara Node-Red ha de començar a treballar en segon pla. A continuació, aneu al directori amb el vostre projecte i executeu el programa principal:

python3 main.py

Nota: no us oblideu de canviar la CLAU als fitxers Python (pas 4) i les credencials al flux Node-Red (pas 5)

Fet! La vostra nevera és segura.

Espero que us hagi agradat aquest intratable! No dubteu a deixar la vostra ment en els comentaris.

Agrairia que votés el meu projecte =)

Gràcies!

Recomanat: