Sadržaj:

Sigurnosni sistem za prepoznavanje lica za hladnjak sa Raspberry Pi: 7 koraka (sa slikama)
Sigurnosni sistem za prepoznavanje lica za hladnjak sa Raspberry Pi: 7 koraka (sa slikama)

Video: Sigurnosni sistem za prepoznavanje lica za hladnjak sa Raspberry Pi: 7 koraka (sa slikama)

Video: Sigurnosni sistem za prepoznavanje lica za hladnjak sa Raspberry Pi: 7 koraka (sa slikama)
Video: SCP-261 Пан-мерное Торговый и эксперимент Войти 261 объявление Де + полный + 2024, Juli
Anonim
Image
Image
Sigurnosni sistem za prepoznavanje lica za frižider sa Raspberry Pi
Sigurnosni sistem za prepoznavanje lica za frižider sa Raspberry Pi
Sigurnosni sistem za prepoznavanje lica za frižider sa Raspberry Pi
Sigurnosni sistem za prepoznavanje lica za frižider sa Raspberry Pi

Pretražujući internet otkrio sam da cijene sigurnosnih sistema variraju od 150 $ do 600 $ pa naviše, ali ne mogu se sva rješenja (čak ni ona vrlo skupa) integrirati s drugim pametnim alatima u vašem domu! Na primjer, ne možete postaviti sigurnosnu kameru na ulazna vrata tako da automatski otvara vrata vama ili vašim prijateljima!

Odlučio sam napraviti jednostavno, jeftino i moćno rješenje koje možete koristiti bilo gdje! Postoji mnogo priručnika o tome kako stvoriti jeftine i domaće sigurnosne sisteme, međutim želim pokazati zaista netrivijalnu primjenu ovih - sigurnosni sistem za hladnjak sa prepoznavanjem lica!

Kako to radi? IP kamera postavljena na vrhu frižidera, senzori (dva tastera) detektuju kada osoba otvori vrata frižidera, nakon toga Raspberry Pi snima tu osobu (sa IP kamerom), a zatim je šalje Microsoft Face API -u da analiziraju sliku i dobiju ime osobe. S ovim podacima Raspberry Pi skenira “pristupnu listu”: ako osoba nema dozvolu za pristup hladnjaku, Raspberry obavještava vlasnika putem e -pošte, tekstualne poruke i twittera! (Pogledajte slike iznad)

Zašto? Sistem vam omogućava da kontrolišete članove svoje porodice, posebno kada su na dijeti ili se bore da ne jedu poslije ponoći! Ili ga koristite samo za zabavu!

Štaviše, možete postaviti kameru na ulazna vrata i konfigurirati sistem tako da otvara vrata kada se približavate vi, članovi vaše porodice ili prijatelji. I ovo nije kraj! Mogućnosti aplikacije su beskrajne!

Počnimo!

Korak 1: Priprema

Priprema
Priprema

Trebat će vam:

  • Raspberry Pi 3 (možete koristiti starije verzije, ali treća generacija ima Wi-Fi, pa je vrlo zgodno)
  • Buttons
  • Žice
  • Stari pametni telefon ili Raspberry Pi kamera

Prvo što trebate učiniti je konfigurirati svoj Raspberry Pi. Detaljna uputstva o tome kako to učiniti možete pronaći ovdje i ovdje, ali mi ćemo pokriti najvažnije korake u ovom priručniku.

  1. Preuzmite Win32 DiskImager odavde (ako koristite Windows)
  2. Preuzmite SD Formatter odavde
  3. Umetnite SD karticu u računar i formatirajte je pomoću SD Formattera
  4. Preuzmite Raspbian sliku odavde (odaberite "Raspbian Jessie sa pikselom")
  5. Pokrenite Win32 DiskImager, odaberite svoju SD karticu, navedite putanju do Raspbian slike, kliknite "Napiši"
  6. Umetnite SD karticu u svoj Raspberry Pi i uključite napajanje!

Osim toga, potrebno je konfigurirati Raspberry Pi tako da ima pristup sistemu putem SSH -a. Na internetu postoji mnogo uputa, možete ih koristiti, na primjer, ili možete priključiti monitor i tastaturu.

Sada je vaš Pi konfiguriran i spremni ste za nastavak!

Korak 2: Izrada senzora

Izrada senzora
Izrada senzora
Izrada senzora
Izrada senzora
Izrada senzora
Izrada senzora

Korak Opis: U ovom koraku napravit ćemo senzor koji detektira kada osoba otvori vrata hladnjaka i aktivira Raspberry Pi.

Da biste ga postavili, potrebna su vam 2 gumba koja ste izvorno pripremili. Prvo dugme će otkriti kada se vrata otvore, drugo dugme će otkriti kada se vrata otvore do tačke kada fotografišemo osobu.

  1. Lemljenje žica na dugmad.
  2. Pričvrstite prvo dugme na vrata frižidera tako da se pritisne kada su vrata zatvorena (pogledajte gornju sliku)
  3. Pričvrstite drugo dugme na vrata frižidera kao što je prikazano na gornjoj fotografiji. Ovo dugme morate otpustiti u svakom trenutku, osim kada vrata dođu do tačke kada sistem snima sliku. Da biste ga postavili, morate pričvrstiti nešto na hladnjak tako da se ovo dugme pritisne kada se vrata otvore u željenoj mjeri (pogledajte fotografije iznad).
  4. Priključite žice s dugmadi na Raspberry Pi: prvo dugme na GPIO 23 i masu, drugo dugme na GPIO 24 i uzemljenje (vidi dijagram frcanja).

Napomena: Koristim BCM pinout (ne ploču), više o razlici pročitajte ovdje.

Jednom kada se povežete na Raspberry Pi putem SSH -a, za pokretanje python ljuske upišite terminal:

python3

Ako priključujete monitor i tastaturu na Raspberry Pi, samo pokrenite „Python 3 IDLE“iz menija.

Sljedeći korak je učiniti da Raspberry Pi radi s gumbima. Priključit ćemo posebne slušatelje na GPIO 23 i 24 pinove, koji će osluškivati događaje "rastuće ivice" i "padajuće ivice" na tim pinovima. U slučaju događaja slušatelji će pozvati funkcije koje smo definirali. “Rastuća ivica” znači da je dugme pritisnuto i sada otpušteno (prvo dugme - vrata su otvorena), “padajuća ivica” znači da je dugme otpušteno i sada pritisnuto (drugo dugme - vrata su dosegla određenu tačku). Više o funkcijama dugmadi - ovdje.

Prvo uvozite biblioteku koja nam daje pristup iglama:

uvezite RPi. GPIO kao GPIO

Sada definirajte posebne funkcije koje će se pozivati kada se događaj pokrene:

def senzor1 (kanal): ispis ("senzor 1 aktiviran") def senzor2 (kanal): ispis ("senzor 2 aktiviran)

Postavite vrstu isječka:

Način rada GPIO.set (GPIO. BCM)

Konfigurirajte pinove:

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

Priloži slušatelje:

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

Sada ga možete isprobati! Ako pritisnete tipku 1, vidjet ćete poruku na terminalu „senzor 1 aktiviran“, gumb 2 daje poruku „senzor 2 aktiviran“.

Napomena: Kada završite s eksperimentiranjem, ne zaboravite pozvati sljedeću funkciju: GPIO.cleanup ().

Postavimo još jednu funkciju koja se poziva kada vrata dosegnu točku gdje fotografiramo! Možete to učiniti sami ili upotrijebiti moju implementaciju koju sam priložio ovdje (sensor.py)

Napomena: sensor.py se koristi samo u svrhe testiranja, datoteke s punom funkcionalnošću koje sam priložio posljednjem koraku.

Korak 3: Konfigurirajte IP kameru

Konfigurirajte IP kameru
Konfigurirajte IP kameru
Konfigurirajte IP kameru
Konfigurirajte IP kameru
Konfigurirajte IP kameru
Konfigurirajte IP kameru

Opis koraka: Sada ćemo konfigurirati stari pametni telefon kao IP kameru.

Korištenje pametnog telefona kao IP kamere vrši se putem aplikacije. Postoje različite aplikacije za Android, iOS, Windows Phone koje možete koristiti. Odabrao sam onu koja se zove "IP web kamera" za Android. Ovo je besplatna aplikacija i lako ju je konfigurirati.

Pokrenite aplikaciju, idite na "Postavke videozapisa" da postavite rezoluciju fotografija koje će aplikacija pružiti. Zatim dodirnite "Pokreni server" (Prva slika gore). Na dnu ekrana morate vidjeti IP adresu kamere (vidi drugu sliku iznad). U pretraživač možete upisati https://cam_ip_address/photo-j.webp

Na kraju, pričvrstite kameru na frižider (zadnja slika gore).

Korak 4: Face API

Face API
Face API

Korak Opis: U ovom koraku govorit ćemo o Microsoftovom API -ju za lice koji prepoznaje lica i identificira ljude.

Microsoftov Face API je usluga prepoznavanja lica pomoću koje možemo analizirati fotografije i identificirati ljude na njima.

Prvo vam je potreban Microsoft Azure račun. Ako ga nemate, možete ga besplatno stvoriti ovdje.

Drugo, idite na https://portal.azure.com, kliknite "Novo" s lijeve strane, upišite obrazac "API -ji kognitivnih usluga", odaberite ga i kliknite "Kreiraj". Ili možete otvoriti ovu vezu. Sada morate unijeti naziv svoje usluge, odabrati vrstu pretplate, vrstu API -ja koji vam je potreban (u našem slučaju to je Face API), lokaciju, nivo cijena, grupu resursa i složiti se s pravnim uslovima (pogledajte snimak ekrana dodan ovom koraku).

Treće, kliknite "Svi resursi", odaberite Face API uslugu i pogledajte statistiku korištenja, vjerodajnice itd.

Detalje o API -ju za lice možete pronaći ovdje, dati su primjeri na različitim programskim jezicima. Za ovaj projekt koristimo python. Možete pročitati dokumentaciju i napraviti vlastiti skup funkcionalnosti ili možete koristiti onu koja je ovdje navedena (ovo nije potpuni skup funkcija koje pruža Microsoft, samo točke koje su potrebne za ovaj projekt). Moje python datoteke pridružene su ovom koraku.

Prijeđimo na strukturu rada s Face API -jem. Da bismo koristili funkciju "Identifikacija", moramo stvoriti biblioteku ljudi pomoću koje će Face API usluga prepoznavati fotografije koje aplikacija snima. Da biste ga postavili, slijedite korake:

  1. Kreirajte grupu
  2. Dodajte osobe u ovu grupu
  3. Dodajte lica ovim osobama
  4. Grupa voza
  5. Pošaljite fotografiju s osobom koju želite identificirati (morate navesti fotografiju i ID grupe u kojoj će služba tražiti kandidate)
  6. Rezultat: Kao odgovor dobit ćete listu kandidata koji mogu biti na fotografiji koju ste poslali.

Napravio sam tri datoteke sa specifičnom funkcionalnošću koja omogućava rad s grupama, samim osobama i pojedinačnim fotografijama:

  • PersonGroup.py - sadrži funkcije koje omogućuju: kreiranje grupe, dobijanje informacija o grupi, dobijanje liste svih vaših grupa, obučavanje grupe i dobijanje statusa obuke
  • Person.py - sadrži funkcije koje omogućuju: kreiranje osobe, dobijanje podataka o osobi, popis svih osoba u navedenoj grupi, dodavanje lica navedenoj osobi
  • Face.py - sadrži funkcije koje omogućavaju: otkrivanje lica na slici, identifikaciju osobe, dobijanje imena identifikovane osobe

U datoteci pod nazivom "Recognition.py" nudim funkcije koje vam omogućavaju da provjerite sadrži li slika lice i dodate lica određenoj osobi (automatski dodaje lice sa mnogih slika iz navedene mape).

Preuzmite datoteku priloženu ovom koraku, raspakirajte je, promijenite globalnu varijablu 'KEY' u ove tri datoteke: PersonGroup.py, Person.py i Face.py na svoj ključ koji možete pronaći: portal.azure.com> svi resursi > face api usluga (ili kako ste je nazvali)> kartica tipki. Možete koristiti bilo koji od dva ključa.

Napomena: ovdje ćemo obučiti Face API uslugu da prepoznaje ljude, pa se sljedeće radnje mogu učiniti s bilo kojeg računala (Raspberry Pi za to nije potreban) - promjene se spremaju na Microsoftov poslužitelj.

Nakon promjene KEY -a, pokrenite Recovery.py i unesite sljedeću naredbu u ljusku pythona:

PersonGroup.create ("family", 'fff-fff')) // možete koristiti svoje ime i id za

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

Morate vidjeti podatke o grupi koju ste upravo stvorili. Sada unesite:

printResJson (Person.createPerson ('fff-fff', 'ime osobe'))

Sada dobijate ID osobe. Napravite folder sa slikama ove osobe tako da sve slike sadrže lice te osobe. U prepoznavanju.py možete koristiti funkciju detectionFaceOnImages koja vam pokazuje na kojim je fotografijama lice otkriveno. Sada pokrenite naredbu:

addFacesToPerson ('folder sa slikama', 'ID osobe koji ste dobili nakon prethodne naredbe', 'fff-fff')

Zatim moramo obučiti našu uslugu unosom sljedećeg:

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

Sada je naša grupa obučena i spremna je identificirati osobu.

Da biste provjerili osobu na slici, možete:

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

Kao odgovor ćete dobiti listu kandidata i vjerovatnoću ko se nalazi na fotografiji.

Napomena: svaki put kad dodate lice nekoj osobi ili osobi u grupu morate je obučiti!

Korak 5: Node-Red konfiguracija

Node-Red konfiguracija
Node-Red konfiguracija

Korak Opis: U ovom koraku stvorit ćemo Node-Red tok koji će vas obavijestiti o kršenju pristupa vašem hladnjaku =)

Ako vaš Raspberry Pi radi na Raspbian Jessie u novembru 2015. ili novijoj verziji, ne morate instalirati Node-Red jer je već unaprijed instaliran. Samo ga trebate ažurirati. Molimo koristite priručnik ovdje.

Sada moramo instalirati Twilio čvor na Node-Red, kako bismo mogli pokrenuti tekstualnu poruku. Otvorite terminal i upišite:

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

Više o čvoru Twilio ovdje. Nakon toga pokrenite Node-Red upisivanjem u terminal:

node-red

Zatim idite na: https://127.0.0.1:1880/ - ako otvorite preglednik na svom Raspberry Pihttps:// {raspberry_pi_ip}: 1880/ - ako želite otvoriti uređivač Node -Red s drugog računara

Da biste saznali IP adresu malina pi, koristite ovo uputstvo.

Sada morate pronaći čvor Twilio na popisu čvorova u vašem uređivaču Node-Red (obično se pojavljuje nakon 'društvene' grupe).

Vrijeme je za stvaranje protoka!

Napomena: možete koristiti moj tok priložen ovom koraku, ali ne zaboravite konfigurirati čvorove: e -poštu, twitter i twilio. Pročitajte o tome kasnije.

Naš tok počinje čvorom "notify" koji prihvaća POST zahtjev iz našeg glavnog programa s nekim podacima o kršenju pristupa (primjer podataka možete pronaći u čvoru komentara "o primanju objekata"). Ovaj čvor odmah reagira porukom "Ok", tako da glavni program zna da su podaci primljeni (Flow: /notify> response with Ok> response). Zeleni čvor na dnu s imenom msg.payload postoji radi otklanjanja grešaka: ako nešto ne radi, možete ga koristiti.

Iz prvog čvora (/notify) podaci se propagiraju u "Podatkovnu temu" i "Temu slike" gdje su dodane teme "podaci" i "slika".

U čvoru "kompajliraj" primamo podatke (koje dobijamo tokom prvog koraka) sa temom "podaci" i sliku sa temom "slika" (slika je preuzeta sa /home/pi/image.jpg). Ove dvije poruke treba sastaviti u jedan objekt, ali dva objekta se primaju u različito vrijeme! Da bismo to riješili, upotrijebit ćemo funkciju "kontekst" koja nam omogućuje pohranu podataka između poziva funkcija.

Sljedeći korak je provjeriti je li osoba sa naše pristupne liste ili je nepoznata osoba (čvor checkConditions). U podacima koje primamo postoji polje "trustedPerson": "true" znači da poznajemo tu osobu, ali je prekršila dozvolu pristupa, "false" znači da je ta osoba stranac.

Kada je rezultat "istinit", šaljemo obavijest na twitter, twilio i e -poštu; ako je rezultat "lažan" - samo e -pošta i twilio. Izrađujemo objekt za e -poštu s porukom, priloženu sliku i temu e -pošte, objekt za twilio s porukom. Za twitter dodajemo podatke objektu ako je "trustedPerson" tačno. Zatim pošaljite ova tri objekta na tri različita čvora.

Napomena: Ako sljedeći čvor ne bi trebao primiti poruku, samo mu šaljemo "null".

Vrijeme je za konfiguriranje čvorova za obavijesti!

Twitter Dodajte "twitter" čvor toku. Otvorite ga dvostrukim klikom. Kliknite na olovku pored "Twitter ID". Zatim kliknite na "Kliknite ovdje za provjeru autentičnosti putem Twittera". Uđite na svoj twitter račun i dajte Node-Red-u potrebne dozvole.

E -poštaDodajte čvor "e -pošte" toku. Ako ne koristite Gmail, morat ćete promijeniti podatke u sljedećim poljima - "Server" i "Port" (možete pronaći koji server i port trebate koristiti na stranicama za pomoć vašeg agenta e -pošte), u suprotnom nemojte mijenjati ove podatke polja.

  • Na> adresu e -pošte na koju će se poruke slati
  • Userid> prijava sa vaše e -pošte (možda isto kao polje "Prima")
  • Lozinka> lozinka sa vašeg naloga e -pošte
  • Ime> ime za ovaj čvor

Twilio Idite na https://www.twilio.com/try-twilio i registrirajte račun. Potvrdi. Idite na https://www.twilio.com/console. Kliknite na "Telefonski brojevi" (velika ikona #) i kreirajte besplatni broj. Ako ste izvan SAD-a, morate dodati GEO dozvole, idite na https://www.twilio.com/console/sms/settings/geo-pe… i dodajte svoju zemlju.

Sada idite na uređivač Node-Red, dodajte čvor Twilio, dvaput kliknite na njega da biste konfigurirali i ispunili sva polja:

  • Vjerodajnice> Koristite lokalne vjerodajnice
  • Twilio> uredi

    • SID računa> preuzmite odavde
    • Od> upišite virtualni broj koji ste kreirali
    • Token> preuzmite odavde
    • Naziv> Twilio
  • Izlaz> SMS
  • Za> vaš telefonski broj
  • Ime> ime za ovaj čvor.

Kliknite na Implementiraj

Sada je vaš tok spreman! Možete ga testirati slanjem POST zahtjeva sa navedenim objektom!

Korak 6: Sastavljanje cijelog projekta

Sastavljanje cijelog projekta
Sastavljanje cijelog projekta
Sastavljanje cijelog projekta
Sastavljanje cijelog projekta

Korak Opis: U ovom koraku ćemo spojiti sve dijelove i učiniti da rade kao zaseban sistem.

Ovim korakom morate:

  1. Konfigurirajte stari pametni telefon kao ip kameru
  2. Imati radne senzore
  3. Obučeni Microsoftov Face API
  4. Konfiguriran Node-Red tok

Sada moramo poboljšati kod koji smo napisali u koraku 2. Tačnije funkcija process () koja se poziva kada osoba otvori vrata. U ovoj funkciji ćemo učiniti sljedeće:

  1. Nabavite sliku sa ip kamere i sačuvajte je u “/home/pi/” sa imenom “image.jpg” (funkcija “fromIpCam” u datoteci “getImage”)
  2. Dobijte ime osobe na toj slici (funkcija "checkPerson" u datoteci "prepoznavanje")
  3. Provjerite dozvolu pristupa za tu osobu (funkcija „provjeri“u datoteci „pristup“)
  4. Na osnovu rezultata funkcije "check" sastavi poruku
  5. Pošaljite sastavljenu poruku na Node-Red (funkcija “toNodeRed” u datoteci “sendData”)

Napomena: da biste vidjeli cijeli kod navedenih funkcija, preuzmite zip datoteku priloženu ovom koraku.

O funkciji “fromIpCam”. Ova funkcija šalje GET zahtjev vašoj ip kameri, dobiva fokusiranu sliku kao odgovor i sprema je na putanju koju ste odredili. Za ovu funkciju morate navesti IP adresu kamere.

O funkciji “checkPerson”. Funkcija dobiva put do slike i grupe u kojoj želite tražiti osobu sa fotografije kao parametre. Prvo, detektira lice na datoj slici (datoteka Face.py, funkcija „otkrivanje“). Kao odgovor dobiva id ako je lice otkriveno. Zatim poziva funkciju „identifikuj“(datoteka Face.py) koja pronalazi slične osobe u navedenoj grupi. Kao odgovor, on dobija identifikaciju osobe ako se osoba pronađe. Zatim pozovite funkciju “person” (datoteka Person.py) s ID -om osobe kao parametrom, “person” funkcija vraća osobu s navedenim ID -om, dobivamo ime osobe i vraćamo je.

O funkciji „provjeri“. Ova funkcija je smještena u datoteku „access“gdje se također nalazi „access list“kao globalna varijabla (možete je izmijeniti kako želite). Dobivanjem imena osobe iz prethodne funkcije, funkcija „provjeri“usporedite ovu osobu s popisom pristupa i vratite rezultat.

Napomena: cijeli projekt je priložen sljedećem koraku.

Korak 7: Zaključak

U ovom koraku sam priložio cijeli projekt koji biste trebali raspakirati i postaviti na svoj Raspberry Pi.

Da bi ovaj projekt funkcionirao, pokrenite datoteku „main.py“.

Ako kontrolirate Raspberry Pi putem SSH-a, morate pokrenuti dva programa iz jedne ljuske: program python i Node-Red. U terminal unesite sljedeće:

node-red

Pritisnite “Ctrl + Z” i upišite:

poslovi

Vidjeli ste proces Node-Red. Pogledajte ID procesa i upišite:

bg

Sada Node-Red mora početi raditi u pozadini. Zatim idite u direktorij sa svojim projektom i pokrenite glavni program:

python3 main.py

Napomena: ne zaboravite promijeniti KEY u python datotekama (korak 4) i vjerodajnice u protoku Node-Red (korak 5)

Gotovo! Vaš frižider je siguran!

Nadam se da ste uživali u ovom nerješivom! Ostavite svoje misli u komentarima.

Bio bih zahvalan ako glasate za moj projekat =)

Hvala ti!

Preporučuje se: