Taula de continguts:
- Pas 1: Preparació
- Pas 2: fer un sensor
- Pas 3: configureu la càmera IP
- Pas 4: API de cara
- Pas 5: Configuració de node-vermell
- Pas 6: compilació del projecte sencer
- Pas 7: Conclusió
Vídeo: Sistema de seguretat de reconeixement facial per a una nevera amb Raspberry Pi: 7 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
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ó
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.
- Descarregueu Win32 DiskImager des d'aquí (si utilitzeu Windows)
- Descarregueu SD Formatter des d’aquí
- Inseriu la targeta SD a l'ordinador i formateu-la amb SD Formatter
- Descarregueu la imatge Raspbian des d'aquí (trieu "Jessie Raspbian amb píxel")
- Executeu Win32 DiskImager, trieu la vostra targeta SD, especifiqueu el camí a la imatge Raspbian i feu clic a "Escriu"
- 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
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.
- Soldar els cables als botons.
- 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)
- 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).
- 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
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
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:
- Creeu un grup
- Afegiu persones a aquest grup
- Afegiu cares a aquestes persones
- Grup de tren
- 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)
- 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
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
Descripció del pas: en aquest pas unirem totes les parts i les farem funcionar com un sistema independent.
En aquest pas heu de:
- Configureu el telèfon intel·ligent antic com a càmera IP
- Disposen de sensors de treball
- API Face de Microsoft amb formació
- 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:
- Obteniu imatge de la càmera IP i deseu-la a “/ home / pi /” amb el nom “image.jpg” (funció “fromIpCam” al fitxer “getImage”)
- Obteniu el nom de la persona en aquesta imatge (funció "checkPerson" al fitxer "reconeixement")
- Comproveu el permís d'accés per a aquesta persona (funció "comprovar" al fitxer "accés")
- Basat en el resultat del missatge de redacció de la funció "comprovar"
- 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:
Abellcadabra (sistema de panys de porta de reconeixement facial): 9 passos
Abellcadabra (sistema de panys de reconeixement facial): estirat durant la quarantena, vaig intentar trobar una manera de matar el temps construint un reconeixement facial per a la porta de la casa. El vaig anomenar Abellcadabra, que és una combinació entre Abracadabra, una frase màgica amb timbre que només agafo la campana. LOL
Nevera / nevera casolana Peltier amb controlador de temperatura DIY: 6 passos (amb imatges)
Nevera / nevera casolana Peltier amb controlador de temperatura: Com fer un bricolatge casolà / mini nevera Peltier termoelèctric amb controlador de temperatura W1209. Aquest mòdul TEC1-12706 i l'efecte Peltier fan que el bricolatge perfecte sigui més fresc. Aquest instructiu és un tutorial pas a pas que us mostra com fer
Mirall de reconeixement facial amb compartiment secret: 15 passos (amb imatges)
Mirall de reconeixement facial amb compartiment secret: sempre he estat intrigat pels compartiments secrets sempre creatius que s’utilitzen en històries, pel·lícules i similars. Per tant, quan vaig veure el Concurs de compartiments secrets, vaig decidir experimentar jo mateixa amb la idea i fer un mirall d’aspecte normal que obrís un
Timbre amb reconeixement facial: 7 passos (amb imatges)
Timbre amb reconeixement facial: motivació Recentment, al meu país hi ha hagut una onada de robatoris dirigits a persones grans a casa seva. Normalment, l’accés el concedeixen els mateixos ocupants, ja que els visitants els convencen que són cuidadors / infermeres. És
Reconeixement facial en temps real: un projecte d'extrem a extrem: 8 passos (amb imatges)
Reconeixement facial en temps real: un projecte de punta a punta: en el meu darrer tutorial que explorava OpenCV, vam aprendre EL SEGUIMENT AUTOMÀTIC D'OBJECTES DE VISIÓ. Ara utilitzarem la nostra PiCam per reconèixer les cares en temps real, com podeu veure a continuació: Aquest projecte es va fer amb aquest fantàstic "Open Source Computer Vision Library & qu