Sadržaj:

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

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

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

Pretražujući internet otkrio sam da cijene sigurnosnih sustava variraju od 150 USD do 600 USD i viš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 sustave, međutim želim pokazati zaista netrivijalnu primjenu onih - sigurnosni sustav za hladnjak s prepoznavanjem lica!

Kako radi? IP kamera postavljena na vrhu hladnjaka, senzori (dva gumba) detektiraju kada osoba otvori vrata hladnjaka, nakon toga Raspberry Pi fotografira tu osobu (s IP kamerom), a zatim je šalje Microsoft Face API -u analizirati sliku i dobiti ime osobe. S tim podacima Raspberry Pi skenira "pristupni popis": ako osoba nema dopuštenje za pristup hladnjaku, Raspberry obavještava vlasnika putem e -pošte, tekstualne poruke i twittera! (Pogledajte slike iznad)

Zašto? Sustav vam omogućuje da kontrolirate članove svoje obitelji, osobito kada su na dijeti, ili se borite s time da ne jedete nakon ponoći! Ili ga koristite samo za zabavu!

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

Započ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 prikladno)
  • Gumbi
  • Žice
  • Stari pametni telefon ili kamera Raspberry Pi

Prvo što morate učiniti je konfigurirati svoj Raspberry Pi. Detaljne upute 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. Ovdje preuzmite Win32 DiskImager (ako koristite Windows)
  2. Preuzmite SD Formatter odavde
  3. Umetnite SD karticu u računalo 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 put do Raspbian slike, kliknite "Napiši"
  6. Umetnite SD karticu u svoj Raspberry Pi i uključite napajanje!

Osim toga, trebali biste konfigurirati svoj Raspberry Pi tako da ima pristup sustavu putem SSH -a. Na internetu postoji mnogo uputa, možete ih koristiti, na primjer, ili možete priključiti monitor i tipkovnicu.

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.

Za postavljanje su vam potrebna dva gumba koja ste izvorno pripremili. Prvi gumb će otkriti kada se vrata otvore, drugi gumb će otkriti kada se vrata otvore do točke kada fotografiramo osobu.

  1. Lemljenje žica na gumbe.
  2. Pričvrstite prvi gumb na vrata hladnjaka tako da se pritisne kad su vrata zatvorena (pogledajte gornju sliku)
  3. Drugi gumb pričvrstite na vrata hladnjaka kao što je prikazano na gornjoj fotografiji. Ovaj gumb morate otpustiti u svakom trenutku, osim kad vrata dođu do točke kada sustav snima sliku. Da biste ga postavili, morate pričvrstiti nešto na hladnjak tako da se ovaj gumb pritisne kada se vrata otvore u željenoj mjeri (pogledajte fotografije iznad).
  4. Priključite žice s gumba na Raspberry Pi: prvi gumb na GPIO 23 i masu, drugi gumb na GPIO 24 i uzemljenje (vidi dijagram frcanja).

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

Nakon što se povežete s Raspberry Pi putem SSH -a, za pokretanje python ljuske upišite terminal:

python3

Ako priključujete monitor i tipkovnicu na Raspberry Pi, samo pokrenite "Python 3 IDLE" iz izbornika.

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 slušati te događaje "rastuće ivice" i "padajući rub" na tim pinovima. U slučaju događaja slušatelji će pozvati funkcije koje smo definirali. “Rising edge” znači da je gumb pritisnut i sada otpušten (prvo dugme - vrata su otvorena), “padajući rub” znači da je gumb otpušten i sada pritisnut (drugo dugme - vrata su dosegla određenu točku). Više o funkciji gumba - ovdje.

Prvo, uvezite knjižnicu 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)

Postavi 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žite 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 gumb 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 za potrebe 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 biste postavili razlučivost fotografija koje će aplikacija pružiti. Zatim dodirnite "Pokreni poslužitelj" (Prva slika gore). Na dnu zaslona morate vidjeti ip adresu kamere (pogledajte drugu gornju sliku). U preglednik možete upisati https://cam_ip_address/photo-j.webp

Na kraju, pričvrstite kameru na hladnjak (zadnja slika gore).

Korak 4: Face API

API za lice
API za lice

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 u obrazac "API -ji kognitivnih usluga", odaberite ga i kliknite "Izradi". 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, razinu cijena, grupu resursa i složiti se s pravnim uvjetima (pogledajte snimku zaslona dodanu ovom koraku).

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

Pojedinosti 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 cijeli skup funkcionalnosti 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. Stvorite grupu
  2. Dodajte osobe u ovu grupu
  3. Dodajte lica ovim osobama
  4. Grupa vlakova
  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 popis kandidata koji mogu biti na fotografiji koju ste poslali.

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

  • PersonGroup.py - sadrži značajke koje omogućuju: stvaranje grupe, dobivanje informacija o grupi, dobivanje popisa svih vaših grupa, treniranje grupe i dobivanje statusa obuke
  • Person.py - sadrži značajke koje omogućuju: stvaranje osobe, dobivanje podataka o osobi, popis svih osoba u navedenoj grupi, dodavanje lica navedenoj osobi
  • Face.py - sadrži značajke koje omogućuju: otkrivanje lica na slici, identifikaciju osobe, dobivanje imena identificirane osobe

U datoteci pod nazivom "Recovery.py" nudim značajke koje vam omogućuju da provjerite sadrži li slika lice i dodate lica određenoj osobi (automatski dodaje lice iz 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 za prepoznavanje ljudi, 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

grupni ispisResJson (PersonGroup.getPersonGroup ('fff-fff'))

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

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

Sada dobivate ID osobe. Napravite mapu sa slikama ove osobe tako da sve slike sadrže lice te osobe. Možete koristiti funkciju detectionFaceOnImages u Recognition.py koja vam pokazuje na kojim je fotografijama lice otkriveno. Sada pokrenite naredbu:

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

Zatim moramo obučiti našu uslugu unošenjem 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 dobit ćete popis kandidata i vjerojatnost tko se nalazi na fotografiji.

Napomena: svaki put kad osobi dodate osobu u grupu morate je obučiti!

Korak 5: Node-Red konfiguracija

Node-Red konfiguracija
Node-Red konfiguracija

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

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

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:

čvor-crven

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čunala

Da biste saznali IP adresu malina pi, upotrijebite ove upute.

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

Vrijeme je za stvaranje protoka!

Napomena: možete koristiti moj tok povezan s ovim korakom, ali ne zaboravite konfigurirati čvorove: e -poštu, twitter i twilio. O tome pročitajte 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 pogrešaka: ako nešto ne radi, možete ga koristiti.

Podaci iz prvog čvora (/notify) propagiraju se u "Data Topic" i "Image Topic" gdje su teme dodane "podaci" i "slika".

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

Sljedeći korak je provjeriti je li osoba s našeg popisa pristupa ili je stranac (č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 osoba stranac.

Kad je rezultat "istinit", šaljemo obavijest na twitter, twilio i e -poštu; ako je rezultat "netoč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" istina. 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 u tok. Otvorite ga dvostrukim klikom. Kliknite na olovku pored "Twitter ID". Zatim kliknite na "Kliknite ovdje za autentifikaciju putem Twittera". Uđite na svoj twitter račun i dajte Node-Redu potrebna dopuštenja.

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

  • Na> adresu e -pošte na koju će se slati poruke
  • Userid> prijava iz vaše e -pošte (možda isto kao polje "Prima")
  • Lozinka> lozinka s vašeg računa e -pošte
  • Naziv> naziv za ovaj čvor

Twilio Idite na https://www.twilio.com/try-twilio i registrirajte račun. Provjerite. Idite na https://www.twilio.com/console. Kliknite na "Telefonski brojevi" (velika ikona #) i stvorite besplatni broj. Ako ste izvan SAD-a, morate dodati GEO dopuštenja, 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 stvorili
    • Token> preuzmite odavde
    • Ime> Twilio
  • Izlaz> SMS
  • Za> svoj telefonski broj
  • Naziv> naziv za ovaj čvor.

Pritisnite Uvedi

Sada je vaš tok spreman! Možete ga testirati slanjem POST zahtjeva s 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 sustav.

Ovim korakom morate:

  1. Konfigurirajte stari pametni telefon kao ip kameru
  2. Imati radne senzore
  3. Obučeno Microsoftovo API za lice
  4. Konfiguriran Node-Red tok

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

  1. Nabavite sliku s ip kamere i spremite je u “/home/pi/” s 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 temelju 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 ponuđenoj slici (datoteka Face.py, funkcija "otkrivanje"). Kao odgovor dobiva id ako je lice otkriveno. Zatim poziva funkciju "identificiraj" (datoteka Face.py) koja pronalazi slične osobe u navedenoj skupini. Kao odgovor dobiva ID 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 se funkcija nalazi u datoteci "access" gdje se također nalazi "access list" kao globalna varijabla (možete je izmijeniti kako želite). Dobivanjem imena osobe iz prethodne funkcije, funkcija "check" 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 priložio sam 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:

čvor-crven

Pritisnite "Ctrl + Z" i upišite:

poslovi

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

bg

Sada Node-Red moraju 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š hladnjak je siguran!

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

Bio bih zahvalan ako glasate za moj projekt =)

Hvala vam!

Preporučeni: