Cuprins:

Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi: 7 pași (cu imagini)
Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi: 7 pași (cu imagini)

Video: Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi: 7 pași (cu imagini)

Video: Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi: 7 pași (cu imagini)
Video: SISTEM DE RECUNOAȘTERE FACIALĂ 2024, Septembrie
Anonim
Image
Image
Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi
Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi
Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi
Sistem de securitate de recunoaștere facială pentru un frigider cu Raspberry Pi

Navigând pe internet, am descoperit că prețurile pentru sistemele de securitate variază de la 150 $ la 600 $ și peste, dar nu toate soluțiile (chiar și cele foarte scumpe) pot fi integrate cu alte instrumente inteligente de acasă! De exemplu, nu puteți configura o cameră de securitate la ușa din față, astfel încât să deschidă automat ușa pentru dvs. sau prietenii dvs.!

Am decis să fac o soluție simplă, ieftină și puternică, pe care o puteți folosi oriunde! Există multe manuale despre cum să creați sisteme de securitate ieftine și de casă, totuși vreau să demonstrez aplicarea cu adevărat netivială a acestora - sistem de securitate pentru un frigider cu recunoaștere facială!

Cum functioneazã? Camera IP plasată în partea de sus a frigiderului, senzorii (două butoane) detectează când o persoană deschide ușa frigiderului, după aceea Raspberry Pi face o fotografie cu persoana respectivă (cu camera IP), apoi o trimite la Microsoft Face API pentru a analiza imaginea și a primi numele persoanei. Cu aceste informații, Raspberry Pi scanează „lista de acces”: dacă persoana nu are permisiunea de a accesa frigiderul, Raspberry anunță proprietarul prin e-mail, mesaj text și twitter! (Vezi imaginile de mai sus)

De ce? Sistemul vă permite să vă controlați membrii familiei, mai ales atunci când urmează o dietă sau se luptă să nu mănânce după miezul nopții! Sau folosește-l doar pentru distracție!

Mai mult, puteți configura camera la ușa din față și puteți configura sistemul pentru a deschide ușa atunci când vă apropiați dvs., membrii familiei sau prietenii. Și acesta nu este sfârșitul! Posibilitățile aplicației sunt nelimitate!

Sa incepem!

Pasul 1: Pregătirea

Pregătirea
Pregătirea

Vei avea nevoie:

  • Raspberry Pi 3 (puteți utiliza versiuni mai vechi, dar a treia generație are Wi-Fi, deci este foarte convenabil)
  • Butoane
  • Fire
  • Aparat foto vechi pentru smartphone sau Raspberry Pi

Primul lucru pe care trebuie să-l faceți este să vă configurați Raspberry Pi. Instrucțiuni detaliate despre cum să faceți acest lucru le puteți găsi aici și aici, dar vom acoperi cei mai importanți pași din acest manual.

  1. Descărcați Win32 DiskImager de aici (dacă utilizați Windows)
  2. Descărcați SD Formatter de aici
  3. Introduceți cardul SD în computer și formatați-l cu SD Formatter
  4. Descărcați imaginea Raspbian de aici (Alegeți „Raspbian Jessie cu pixel”)
  5. Rulați Win32 DiskImager, alegeți cardul SD, specificați calea către imaginea Raspbian, faceți clic pe „Scrieți”
  6. Introduceți cardul SD în Raspberry Pi și porniți alimentarea!

În plus, ar trebui să vă configurați Raspberry Pi pentru a avea acces la sistem prin SSH. Există multe instrucțiuni pe internet, puteți utiliza acest lucru, de exemplu, sau puteți atașa monitor și tastatură.

Acum Pi-ul dvs. este configurat și sunteți gata să continuați!

Pasul 2: Realizarea unui senzor

Realizarea unui senzor
Realizarea unui senzor
Realizarea unui senzor
Realizarea unui senzor
Realizarea unui senzor
Realizarea unui senzor

Pas Descriere: În acest pas vom realiza un senzor care detectează când persoana deschide ușa unui frigider și activează Raspberry Pi.

Pentru a-l configura, veți avea nevoie de cele 2 butoane pe care le-ați pregătit inițial. Primul buton va detecta când ușa este deschisă, al doilea buton va detecta când ușa este deschisă până când facem fotografia unei persoane.

  1. Sârmă de lipit la butoane.
  2. Atașați primul buton la ușa frigiderului, astfel încât să fie împins când ușa este închisă (a se vedea imaginea de mai sus)
  3. Atașați al doilea buton la ușa frigiderului așa cum se arată în fotografia de mai sus. Acest buton trebuie eliberat în orice moment, cu excepția cazului în care ușa ajunge la punctul în care sistemul face o fotografie. Pentru a-l configura, trebuie să atașați ceva la frigider, astfel încât acest buton să fie apăsat când ușa este deschisă în măsura dorită (vezi fotografiile de mai sus).
  4. Atașați firele de la butoane la Raspberry Pi: primul buton la GPIO 23 și masă, al doilea buton la GPIO 24 și masă (Vedeți diagrama fritzing).

Notă: Eu folosesc BCM pinout (nu Board), mai multe despre diferența citită aici.

Odată conectat la Raspberry Pi prin SSH, pentru a rula shell-ul python, tastați terminalul:

python3

Dacă atașați monitor și tastatură la Raspberry Pi, rulați doar „Python 3 IDLE” din meniu.

Următorul pas este de a face Raspberry Pi să funcționeze cu butoanele. Vom atașa ascultători speciali la GPIO 23 și 24 de pini, care vor asculta evenimentul „edge edge” și evenimentul „edge edge” pe acei pini. În cazul evenimentului, ascultătorii vor apela funcțiile pe care le-am definit. „Marginea ascendentă” înseamnă că butonul a fost apăsat și eliberat acum (primul buton - ușa este deschisă), „marginea descendentă” înseamnă că butonul a fost eliberat și acum apăsat (al doilea buton - ușa a atins punctul specific). Mai multe despre funcționalitatea butoanelor - aici.

Mai întâi, importați biblioteca care ne oferă acces la pinii:

importați RPi. GPIO ca GPIO

Acum definiți funcții speciale care vor fi apelate la declanșarea evenimentului:

def sensor1 (canal): print („senzor 1 declanșat”) def sensor2 (canal): print („senzor 2 declanșat)

Setați tipul de identificare:

GPIO.setmode (GPIO. BCM)

Configurați pinii:

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

Atașați ascultători:

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

Acum îl puteți testa! Dacă apăsați butonul 1, veți vedea un mesaj în terminalul „senzor 1 declanșat”, butonul 2 vă oferă un mesaj „senzor 2 declanșat”.

Notă: Când ați terminat experimentarea, nu uitați să apelați următoarea funcție: GPIO.cleanup ().

Să configurăm încă o funcție care se numește când ușa ajunge la punctul în care facem o fotografie! Puteți să o faceți singur sau să folosiți implementarea mea pe care am atașat-o aici (sensor.py)

Notă: sensor.py este utilizat numai în scopul testării, fișierele cu funcționalitate completă pe care le-am atașat la ultimul pas.

Pasul 3: Configurați camera IP

Configurați camera IP
Configurați camera IP
Configurați camera IP
Configurați camera IP
Configurați camera IP
Configurați camera IP

Descrierea pasului: Acum vom configura smartphone-ul vechi ca o cameră IP.

Utilizarea smartphone-ului ca cameră IP se face prin aplicație. Există diferite aplicații pentru Android, iOS, Windows Phone pe care le puteți utiliza. Am ales-o pe cea numită „IP Webcam” pentru Android. Aceasta este o aplicație gratuită și este ușor de configurat.

Rulați aplicația, accesați „Preferințe video” pentru a configura rezoluția fotografiilor pe care le va furniza aplicația. Apoi atingeți „Porniți serverul” (prima imagine de mai sus). În partea de jos a ecranului trebuie să vedeți adresa IP a camerei (a se vedea a doua imagine de mai sus). În browser puteți tasta https://cam_ip_address/photo-j.webp

În cele din urmă, atașați camera la frigider (Ultima imagine de mai sus).

Pasul 4: Face API

Face API
Face API

Pas Descriere: În acest pas vom vorbi despre API-ul Microsoft Face care face recunoaștere facială și identifică oamenii.

API-ul Face Microsoft este un serviciu de recunoaștere a feței, prin intermediul căruia putem analiza fotografiile și identifica persoanele de pe ele.

Mai întâi, aveți nevoie de un cont Microsoft Azure. Dacă nu aveți unul, îl puteți crea gratuit aici.

În al doilea rând, accesați https://portal.azure.com, faceți clic pe „Nou” în partea stângă, introduceți formularul „API-uri de servicii cognitive”, selectați-l și faceți clic pe „Creați”. Sau puteți deschide acest link. Acum trebuie să introduceți numele serviciului dvs., să selectați tipul de abonament, tipul de API de care aveți nevoie (în cazul nostru este API API), locația, nivelul de tarifare, grupul de resurse și sunteți de acord cu Termenii legali (consultați captura de ecran adăugată la acest pas).

În al treilea rând, faceți clic pe „Toate resursele”, selectați serviciul Face API și vedeți statisticile de utilizare, acreditările etc.

Detaliile API-ului Face pot fi găsite aici, sunt oferite exemple în diferite limbaje de programare. Pentru acest proiect folosim python. Puteți citi documentația și crea propriul set de funcționalități sau îl puteți utiliza pe cel furnizat aici (acesta nu este setul complet de funcționalități furnizate de Microsoft, ci doar punctele necesare pentru acest proiect). Fișierele mele Python sunt atașate la acest pas.

Să trecem la structura de lucru cu Face API. Pentru a utiliza funcționalitatea „Identificare”, trebuie să creăm o bibliotecă de persoane care utilizează serviciul Face API care va recunoaște fotografiile realizate de aplicație. Pentru a-l configura, urmați pașii:

  1. Creați un grup
  2. Adăugați persoane la acest grup
  3. Adăugați fețe acestor persoane
  4. Grup de tren
  5. Trimiteți fotografia cu persoana pe care doriți să o identificați (trebuie să furnizați fotografia și codul de grup în care serviciul va căuta candidați)
  6. Rezultat: ca răspuns veți obține o listă de candidați care pot fi pe fotografia pe care ați trimis-o.

Am creat trei fișiere cu funcționalități specifice care permit să lucreze cu grupuri, persoane singure și fotografii singure:

  • PersonGroup.py - conține caracteristici care permit: crearea unui grup, obținerea de informații despre grup, obținerea listei tuturor grupurilor dvs., instruirea grupului și obținerea statutului de instruire
  • Person.py - conține caracteristici care permit: crearea unei persoane, obținerea informațiilor despre persoană, listarea tuturor persoanelor din grupul specificat, adăugarea fețelor la persoana specificată
  • Face.py - conține caracteristici care permit: detectarea feței pe imagine, identificarea persoanei, obținerea numelui persoanei identificate

În fișierul numit „recunoaștere.py” ofer funcții care vă permit să verificați dacă imaginea conține o față și să adăugați fețe la persoana specificată (adaugă automat față din multe imagini din folderul specificat).

Descărcați fișierul atașat la acest pas, despachetați-l, schimbați variabila globală „KEY” în aceste trei fișiere: PersonGroup.py, Person.py și Face.py pentru propria cheie pe care o puteți găsi: portal.azure.com> toate resursele > serviciu API față (sau cum l-ați numit)> fila taste. Puteți utiliza oricare dintre cele două taste.

Notă: aici vom instrui serviciul Face API pentru a recunoaște oamenii, astfel încât următoarele acțiuni pot fi efectuate de pe orice computer (Raspberry Pi nu este necesar pentru asta) - modificările sunt salvate pe serverul Microsoft.

După ce ați schimbat KEY, rulați reconnaissance.py și introduceți următoarea comandă în shell-ul python:

PersonGroup.create ("familie", 'fff-fff')) // puteți utiliza propriul nume și id pentru

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

Trebuie să vedeți date despre grupul pe care tocmai l-ați creat. Acum introduceți:

printResJson (Person.createPerson ('fff-fff', 'numele persoanei'))

Acum primești un ID de persoană. Creați un dosar cu imagini ale acestei persoane, astfel încât toate imaginile să conțină fața acestei persoane. Puteți utiliza funcția detectFaceOnImages în recognization.py care vă arată pe ce față este detectată fotografia. Acum, executați comanda:

addFacesToPerson („folder cu imagini”, „ID de persoană pe care l-ați obținut după comanda anterioară”, „fff-fff”)

Apoi, trebuie să ne instruim serviciul introducând următoarele:

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

Acum grupul nostru este instruit și este gata să identifice o persoană.

Pentru a verifica persoana pe imagine puteți:

Face.checkPerson (imagine, „fff-fff”)

Ca răspuns, veți obține o listă de candidați și probabilitățile care apar pe fotografie.

Notă: de fiecare dată când adăugați fețe la o persoană sau la o persoană într-un grup, trebuie să pregătiți grupul!

Pasul 5: Configurare nod-roșu

Configurare nod-roșu
Configurare nod-roșu

Pas Descriere: În acest pas, vom crea un flux Nod-Roșu care vă va notifica despre încălcarea accesului la frigider =)

Dacă Raspberry Pi rulează pe Raspbian Jessie noiembrie 2015 sau o versiune ulterioară, nu este necesar să instalați Node-Red, deoarece este deja preinstalat. Trebuie doar să îl actualizați. Vă rugăm să folosiți manualul aici.

Acum, trebuie să instalăm nodul Twilio pe Node-Red, astfel încât să putem declanșa un mesaj text. Deschideți terminalul și tastați:

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

Mai multe despre nodul Twilio aici. După aceea, rulați Node-Red tastând în terminal:

roșu nod

Apoi accesați: https://127.0.0.1:1880/ - dacă deschideți browserul pe Raspberry Pihttps:// {raspberry_pi_ip}: 1880 / - dacă doriți să deschideți editorul Node-Red de pe alt computer

Pentru a cunoaște adresa IP a raspberry pi, utilizați această instrucțiune.

Acum trebuie să găsiți nodul Twilio în lista nodurilor din editorul Node-Red (de obicei apare după grupul „social”).

Este timpul să creăm fluxul!

Notă: puteți utiliza fluxul meu atașat la acest pas, dar nu uitați să configurați nodurile: e-mail, twitter și twilio. Citiți despre asta mai târziu.

Fluxul nostru începe cu nodul „notificare” care acceptă cererea POST de la programul nostru principal cu câteva date despre încălcarea accesului (exemplu de date poate fi găsit în nodul de comentarii „despre primirea obiectelor”). Acest nod răspunde imediat cu mesajul „Ok”, deci programul principal știe că datele au fost primite (Flux: / notificare> răspuns cu Ok> răspuns). Nodul verde din partea de jos cu numele msg.payload este acolo pentru a depana: dacă ceva nu funcționează, îl puteți folosi.

De la nodul primar (/ notificare) datele propagate la „Subiect de date” și „Subiect de imagine” unde au fost adăugate subiecte „date” și „imagine”.

În nodul „compilați” primim date (pe care le obținem în timpul primului pas) cu subiectul „date” și o imagine cu subiectul „imagine” (imaginea este preluată de la /home/pi/image.jpg). Aceste două mesaje ar trebui să fie compilate într-un singur obiect, dar cele două obiecte sunt primite la un moment diferit! Pentru a gestiona acest lucru vom folosi caracteristica „context” care ne permite să stocăm date între invocațiile funcției.

Următorul pas este să verificăm dacă o persoană din lista noastră de acces sau dacă este străină (nodul CheckConditions). În datele pe care le primim există un câmp „TrustPerson”: „adevărat” înseamnă că cunoaștem această persoană, dar a încălcat permisiunea de acces, „fals” înseamnă că persoana este străină.

Când rezultatul este „adevărat”, trimitem o notificare către twitter, twilio și e-mail; când rezultatul este „fals” - doar e-mail și twilio. Creăm un obiect pentru e-mail cu un mesaj, imagine atașată și subiectul e-mailului, un obiect pentru twilio cu un mesaj. Pentru twitter adăugăm date la un obiect dacă „TrustPerson” este adevărat. Apoi trimiteți aceste trei obiecte către trei noduri diferite.

Notă: Dacă următorul nod nu ar trebui să primească un mesaj, îi trimitem „nul”.

Este timpul să configurați nodurile pentru notificare!

Twitter Adăugați nodul "twitter" la flux. Deschideți-l făcând dublu clic. Faceți clic pe creion lângă „ID-ul Twitter”. Apoi faceți clic pe „Faceți clic aici pentru a vă autentifica cu Twitter”. Intrați în contul dvs. de twitter și acordați permisiunile necesare pentru Node-Red.

Adăugați un nod „e-mail” în flux. Dacă nu utilizați Gmail, va trebui să schimbați datele în următoarele câmpuri - „Server” și „Port” (puteți găsi ce server și port ar trebui să utilizați în paginile de ajutor ale agentului dvs. de e-mail) altfel nu le modificați câmpuri.

  • Pentru a> adresa de e-mail la care mesajele vor fi trimise
  • Userid> autentificare din e-mailul dvs. (poate același lucru cu câmpul „Către”)
  • Parolă> parolă din contul dvs. de e-mail
  • Nume> nume pentru acest nod

Twilio Accesați https://www.twilio.com/try-twilio și înregistrați un cont. Verifică-l. Accesați https://www.twilio.com/console. Faceți clic pe „Numere de telefon” (pictograma # mare) și creați un număr gratuit. Dacă vă aflați în afara SUA, trebuie să adăugați permisiuni GEO, accesați https://www.twilio.com/console/sms/settings/geo-pe… și adăugați țara dvs.

Acum, accesați editorul Node-Red, adăugați nodul Twilio, faceți dublu clic pe acesta pentru a configura și completa toate câmpurile:

  • Acreditări> Utilizați acreditări locale
  • Twilio> editează

    • SID cont> ia de aici
    • Din> introduceți numărul virtual pe care l-ați creat
    • Jeton> ia de aici
    • Nume> Twilio
  • Ieșire> SMS
  • Pentru a> numărul dvs. de telefon
  • Nume> nume pentru acest nod.

Faceți clic pe Implementare

Acum fluxul tău este gata! O puteți testa trimițând cererea POST cu obiectul specificat!

Pasul 6: Compilarea întregului proiect

Compilarea întregului proiect
Compilarea întregului proiect
Compilarea întregului proiect
Compilarea întregului proiect

Pas Descriere: În acest pas vom pune toate părțile împreună și le vom face să funcționeze ca un sistem separat.

Prin acest pas trebuie să:

  1. Configurați smartphone-ul vechi ca cameră IP
  2. Au senzori de lucru
  3. A instruit API-ul Microsoft Face
  4. Flux Nod-Roșu configurat

Acum trebuie să îmbunătățim codul pe care l-am scris în pasul 2. Mai precis funcția proces () care se numește atunci când persoana deschide ușa. În această funcție vom face următoarele:

  1. Obțineți imaginea de pe camera IP și salvați-o în „/ home / pi /” cu numele „image.jpg” (funcția „fromIpCam” în fișierul „getImage”)
  2. Obțineți numele persoanei de pe acea imagine (funcția „checkPerson” în fișierul „recunoaștere”)
  3. Verificați permisiunea de acces pentru acea persoană (funcția „verificați” în fișierul „acces”)
  4. Pe baza rezultatului funcției „verificare” compuneți mesajul
  5. Trimiteți mesajul compus către Node-Red (funcția „toNodeRed” din fișierul „sendData”)

Notă: pentru a vedea codul complet al funcțiilor menționate, vă rugăm să descărcați fișierul zip atașat la acest pas.

Despre funcția „fromIpCam”. Această funcție face solicitarea GET către camera dvs. IP, obțineți imaginea focalizată ca răspuns și salvați-o pe calea specificată de dvs. Trebuie să furnizați adresa IP a camerei pentru această funcție.

Despre funcția „checkPerson”. Funcția obține calea către imagine și grup în care doriți să căutați persoana din fotografie ca parametri. În primul rând, detectează o față pe imaginea furnizată (fișierul Face.py, funcția „detectează”). Ca răspuns, se identifică dacă fața a fost detectată. Apoi, apelează funcția „identificare” (fișier Face.py) care găsește persoane similare în grupul specificat. Ca răspuns, obține o identitate a persoanei dacă este găsită persoana respectivă. Apoi, apelați funcția „persoană” (fișierul Person.py) cu ID-ul persoanei ca parametru, funcția „persoană” returnează persoana cu ID-ul specificat, obținem numele persoanei și îl returnăm.

Despre funcția „verificați”. Această funcție este plasată în fișierul „acces” unde plasează și „lista de acces” ca o variabilă globală (o puteți modifica după cum doriți). Obținând numele persoanei din funcția anterioară, funcția „verifică” compară această persoană cu lista de acces și returnează rezultatul.

Notă: proiectul complet este atașat la pasul următor.

Pasul 7: Concluzie

În acest pas am atașat proiectul complet pe care ar trebui să îl dezarhivați și să-l plasați la Raspberry Pi.

Pentru a face acest proiect să ruleze fișierul „main.py”.

Dacă controlați Raspberry Pi prin SSH, trebuie să rulați două programe dintr-un singur shell: program python și Node-Red. Tastați în terminal următoarele:

roșu nod

Apăsați „Ctrl + Z” și tastați:

locuri de munca

Ați văzut procesul Node-Red. Uitați-vă la ID-ul procesului și tastați:

bg

Acum Node-Red trebuie să înceapă să lucreze în fundal. Apoi accesați directorul cu proiectul dvs. și rulați programul principal:

python3 main.py

Notă: nu uitați să schimbați cheia în fișierele python (pasul 4) și acreditările în fluxul Node-Red (pasul 5)

Terminat! Frigiderul dvs. este în siguranță!

Sper că ți-a plăcut acest lucru de nerezolvat! Simțiți-vă liber să vă lăsați mintea în comentarii.

Aș aprecia dacă votați pentru proiectul meu =)

Mulțumesc!

Recomandat: