Kazalo:

Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi: 7 korakov (s slikami)
Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi: 7 korakov (s slikami)

Video: Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi: 7 korakov (s slikami)

Video: Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi: 7 korakov (s slikami)
Video: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, Julij
Anonim
Image
Image
Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi
Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi
Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi
Varnostni sistem za prepoznavanje obraza za hladilnik z Raspberry Pi

Med brskanjem po internetu sem odkril, da se cene za varnostne sisteme gibljejo od 150 do 600 USD in več, vendar pa vseh rešitev (tudi tistih zelo dragih) ni mogoče integrirati z drugimi pametnimi orodji doma! Na primer, na vhodnih vratih ne morete nastaviti varnostne kamere, da samodejno odpre vrata za vas ali vaše prijatelje!

Odločil sem se za preprosto, poceni in zmogljivo rešitev, ki jo lahko uporabite kjer koli! Obstaja veliko priročnikov o tem, kako ustvariti poceni in domače varnostne sisteme, vendar želim pokazati resnično netrivialno uporabo teh - varnostni sistem za hladilnik s prepoznavanjem obraza!

Kako deluje? IP kamera, nameščena na vrhu hladilnika, senzorji (dva gumba) zaznajo, ko oseba odpre vrata hladilnika, nato pa Raspberry Pi fotografira to osebo (z IP kamero) in jo pošlje v Microsoft Face API analizirati sliko in prejeti ime osebe. S temi informacijami Raspberry Pi pregleda "seznam dostopa": če oseba nima dovoljenja za dostop do hladilnika, Raspberry obvesti lastnika po e -pošti, besedilnem sporočilu in twitterju! (Glej slike zgoraj)

Zakaj? Sistem vam omogoča nadzor nad družinskimi člani, še posebej, ko so na dieti ali se borijo, da ne bi jedli po polnoči! Ali pa ga uporabite samo za zabavo!

Poleg tega lahko dejansko nastavite kamero pri vhodnih vratih in konfigurirate sistem, da odpre vrata, ko se približujete vi, vaši družinski člani ali prijatelji. In to še ni konec! Možnosti prijave so neskončne!

Začnimo!

1. korak: Priprava

Priprava
Priprava

Boste potrebovali:

  • Raspberry Pi 3 (lahko uporabite starejše različice, vendar ima tretja generacija Wi-Fi, zato je zelo priročno)
  • Gumbi
  • Žice
  • Stari pametni telefon ali kamera Raspberry Pi

Najprej morate konfigurirati svoj Raspberry Pi. Podrobna navodila o tem, kako to storiti, najdete tukaj in tukaj, vendar bomo obravnavali najpomembnejše korake v tem priročniku.

  1. Prenesite Win32 DiskImager od tukaj (če uporabljate Windows)
  2. Prenesite SD Formatter od tukaj
  3. Kartico SD vstavite v računalnik in jo formatirajte s SD Formatterjem
  4. Prenesite sliko Raspbian od tukaj (izberite "Raspbian Jessie s slikovno piko")
  5. Zaženite Win32 DiskImager, izberite kartico SD, določite pot do slike Raspbian, kliknite »Napiši«
  6. Vstavite kartico SD v svoj Raspberry Pi in vklopite napajanje!

Poleg tega bi morali svoj Raspberry Pi konfigurirati tako, da ima dostop do sistema prek SSH. Na internetu je veliko navodil, lahko uporabite na primer to ali pa priključite monitor in tipkovnico.

Zdaj je vaš Pi konfiguriran in pripravljeni ste nadaljevati!

2. korak: Izdelava senzorja

Izdelava senzorja
Izdelava senzorja
Izdelava senzorja
Izdelava senzorja
Izdelava senzorja
Izdelava senzorja

Korak Opis: V tem koraku bomo naredili senzor, ki zazna, kdaj oseba odpre vrata hladilnika in aktivira Raspberry Pi.

Za nastavitev potrebujete 2 gumba, ki ste jih prvotno pripravili. Prvi gumb bo zaznal, ko se vrata odprejo, drugi gumb bo zaznal, ko se vrata odprejo do točke, ko fotografiramo osebo.

  1. Spajkanje žic na gumbe.
  2. Prvi gumb pritrdite na vrata hladilnika, tako da ga pritisnete, ko so vrata zaprta (glejte zgornjo sliko)
  3. Drugi gumb pritrdite na vrata hladilnika, kot je prikazano na zgornji fotografiji. Ta gumb je treba sprostiti ves čas, razen ko vrata dosežejo točko, ko sistem posname sliko. Če ga želite nastaviti, morate v hladilnik pritrditi nekaj, tako da pritisnete ta gumb, ko se vrata odprejo v želeni meri (glejte fotografije zgoraj).
  4. Pritrdite žice od gumbov na Raspberry Pi: prvi gumb na GPIO 23 in ozemljitev, drugi gumb na GPIO 24 in ozemljitev (glejte shemo frcanja).

Opomba: Uporabljam BCM pinout (ne Board), več o razlikah preberite tukaj.

Ko ste povezani z Raspberry Pi prek SSH, za zagon lupine python vnesite terminal:

python3

Če monitor in tipkovnico priključujete na Raspberry Pi, v meniju zaženite »Python 3 IDLE«.

Naslednji korak je, da Raspberry Pi deluje z gumbi. Na zatiče GPIO 23 in 24 bomo priložili posebne poslušalce, ki bodo na teh nožicah poslušali dogodek »vzpona« in »padca«. V primeru dogodka bodo poslušalci poklicali funkcije, ki smo jih določili. "Naraščajoči rob" pomeni, da je bil gumb pritisnjen in zdaj sproščen (prvi gumb - vrata se odprejo), "padajoči rob" pomeni, da je bil gumb sproščen in zdaj pritisnjen (drugi gumb - vrata so dosegla določeno točko). Več o funkcionalnosti gumbov - tukaj.

Najprej uvozimo knjižnico, ki nam omogoča dostop do zatičev:

uvozite RPi. GPIO kot GPIO

Zdaj določite posebne funkcije, ki bodo poklicane ob sprožitvi dogodka:

def senzor1 (kanal): tiskanje ("sprožen senzor 1") senzor def2 (kanal): tisk ("sprožen senzor 2)

Nastavite vrsto odklopa:

Način GPIO.set (GPIO. BCM)

Konfigurirajte zatiče:

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

Priloži poslušalce:

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

Zdaj ga lahko preizkusite! Če pritisnete gumb 1, se v sponko "senzor 1 sproži" prikaže sporočilo, gumb 2 pa sporočilo "senzor 2 sprožen".

Opomba: Ko končate z eksperimentiranjem, ne pozabite poklicati naslednje funkcije: GPIO.cleanup ().

Nastavimo še eno funkcijo, ki se pokliče, ko vrata dosežejo točko, kjer fotografiramo! To lahko storite sami ali uporabite mojo izvedbo, ki sem jo priložil tukaj (sensor.py)

Opomba: sensor.py se uporablja samo za namene testiranja, datoteke s polno funkcionalnostjo sem priložil zadnjemu koraku.

Korak: Konfigurirajte IP kamero

Konfigurirajte IP kamero
Konfigurirajte IP kamero
Konfigurirajte IP kamero
Konfigurirajte IP kamero
Konfigurirajte IP kamero
Konfigurirajte IP kamero

Opis koraka: Zdaj bomo stari pametni telefon konfigurirali kot IP kamero.

Uporaba pametnega telefona kot IP kamere poteka prek aplikacije. Obstajajo različne aplikacije za Android, iOS, Windows Phone, ki jih lahko uporabljate. Izbral sem tisto, ki se imenuje "IP spletna kamera" za Android. To je brezplačna aplikacija in jo je enostavno konfigurirati.

Zaženite aplikacijo, pojdite na "Nastavitve videoposnetkov", da nastavite ločljivost fotografij, ki jih bo aplikacija ponudila. Nato se dotaknite »Začni strežnik« (prva slika zgoraj). Na dnu zaslona morate videti IP naslov kamere (glejte drugo sliko zgoraj). V brskalnik lahko vnesete https://cam_ip_address/photo-j.webp

Na koncu fotoaparat pritrdite na hladilnik (zadnja slika zgoraj).

4. korak: Face API

Face API
Face API

Opis koraka: V tem koraku se bomo pogovarjali o Microsoftovem API -ju za obraz, ki prepozna obraza in identificira ljudi.

Microsoftov Face API je storitev za prepoznavanje obrazov, s pomočjo katere lahko analiziramo fotografije in prepoznamo ljudi na njih.

Najprej potrebujete račun Microsoft Azure. Če ga nimate, ga lahko brezplačno ustvarite tukaj.

Drugič, pojdite na https://portal.azure.com, kliknite »Novo« na levi strani, vnesite v obrazec »API -ji kognitivnih storitev«, ga izberite in kliknite »Ustvari«. Lahko pa odprete to povezavo. Zdaj morate vnesti ime svoje storitve, izbrati vrsto naročnine, vrsto API -ja, ki ga potrebujete (v našem primeru je to Face API), lokacijo, cenovno raven, skupino virov in se strinjati s pravnimi pogoji (glejte posnetek zaslona, ki je dodan temu koraku).

Tretjič, kliknite »Vsi viri«, izberite storitev Face API in si oglejte statistiko uporabe, poverilnice itd.

Podrobnosti o API -ju za obraz najdete tukaj, na voljo so primeri v različnih programskih jezikih. Za ta projekt uporabljamo python. Lahko preberete dokumentacijo in ustvarite svoj nabor funkcionalnosti ali pa uporabite tistega, ki je naveden tukaj (to ni celoten nabor funkcionalnosti, ki jih ponuja Microsoft, samo točke, ki so potrebne za ta projekt). Moje datoteke python so priložene temu koraku.

Preidimo na strukturo dela z Face API. Za uporabo funkcije »Identifikacija« moramo ustvariti knjižnico ljudi, ki bo uporabljala storitev Face API, ki bo prepoznala fotografije, ki jih posname aplikacija. Če ga želite nastaviti, sledite tem korakom:

  1. Ustvarite skupino
  2. V to skupino dodajte osebe
  3. Tem osebam dodajte obraze
  4. Vlakovna skupina
  5. Predložite fotografijo z osebo, ki jo želite identificirati (predložiti morate fotografijo in ID skupine, v kateri bo storitev iskala kandidate)
  6. Rezultat: V odgovor boste prejeli seznam kandidatov, ki so lahko na fotografiji, ki ste jo poslali.

Ustvaril sem tri datoteke s posebno funkcionalnostjo, ki omogoča delo s skupinami, samskimi osebami in posameznimi fotografijami:

  • PersonGroup.py - vsebuje funkcije, ki omogočajo: ustvarjanje skupine, pridobivanje informacij o skupini, pridobivanje seznama vseh vaših skupin, usposabljanje skupine in pridobivanje statusa usposabljanja
  • Person.py - vsebuje funkcije, ki omogočajo: ustvarjanje osebe, pridobivanje podatkov o osebi, navedbo vseh oseb v določeni skupini, dodajanje obrazov določeni osebi
  • Face.py - vsebuje funkcije, ki omogočajo: zaznavanje obraza na sliki, identifikacijo osebe, pridobivanje imena identificirane osebe

V datoteki, imenovani "confirmation.py", vam nudim funkcije, ki vam omogočajo, da preverite, ali slika vsebuje obraz, in dodate obraze določeni osebi (samodejno doda obraz iz številnih slik iz določene mape).

Prenesite datoteko, priloženo temu koraku, jo razpakirajte, spremenite globalno spremenljivko 'KEY' v teh treh datotekah: PersonGroup.py, Person.py in Face.py na svoj ključ, ki ga najdete: portal.azure.com> vsi viri > storitev api za obraz (ali kako ste ji rekli)> zavihek tipk. Uporabite lahko katero koli od dveh tipk.

Opomba: tukaj bomo usposobili storitev Face API za prepoznavanje ljudi, zato so naslednja dejanja lahko izvedena iz katerega koli računalnika (Raspberry Pi za to ni potreben) - spremembe se shranijo na Microsoftovem strežniku.

Ko spremenite KEY, zaženite Recovery.py in vnesite naslednji ukaz v lupino python:

PersonGroup.create ("family", 'fff-fff')) // lahko uporabite svoje ime in ID za

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

Videti morate podatke o skupini, ki ste jo pravkar ustvarili. Zdaj vnesite:

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

Zdaj dobite ID osebe. Ustvarite mapo s slikami te osebe, tako da vse slike vsebujejo obraz te osebe. Uporabite lahko funkcijo detectionFaceOnImages v Recognition.py, ki prikazuje, na katerih fotografijah je zaznan obraz. Zdaj zaženite ukaz:

addFacesToPerson ('mapa s slikami', 'ID osebe, ki ste jo dobili po prejšnjem ukazu', 'fff-fff')

Nato moramo storitev usposobiti tako, da vnesemo naslednje:

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

Zdaj je naša skupina usposobljena in je pripravljena identificirati osebo.

Osebo na sliki lahko preverite tako:

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

V odgovor boste dobili seznam kandidatov in verjetnost, kdo je na fotografiji.

Opomba: vsakič, ko osebi ali osebi v skupino dodate obraze, jo morate usposobiti!

5. korak: Node-Red konfiguracija

Node-Red konfiguracija
Node-Red konfiguracija

Korak Opis: V tem koraku bomo ustvarili Node-Red tok, ki vas bo obvestil o kršitvi dostopa do vašega hladilnika =)

Če vaš Raspberry Pi deluje na Raspbian Jessie novembra 2015 ali novejši različici, vam ni treba namestiti Node-Red, ker je že vnaprej nameščen. Samo posodobiti ga morate. Tukaj uporabite priročnik.

Zdaj moramo na Node-Red namestiti vozlišče Twilio, da lahko sprožimo besedilno sporočilo. Odprite terminal in vnesite:

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

Več o vozlišču Twilio tukaj. Po tem zaženite Node-Red tako, da vtipkate v terminal:

vozlišče-rdeče

Nato pojdite na: https://127.0.0.1:1880/ - če odprete brskalnik na svojem Raspberry Pihttps:// {raspberry_pi_ip}: 1880/ - če želite odpreti urejevalnik Node -Red iz drugega računalnika

Če želite vedeti IP naslov maline pi, uporabite to navodilo.

Zdaj morate na seznamu vozlišč v urejevalniku Node-Red poiskati vozlišče Twilio (običajno se pojavi za skupino »družabna«).

Čas je, da ustvarite tok!

Opomba: lahko uporabite moj tok, priložen temu koraku, vendar ne pozabite konfigurirati vozlišč: e -pošte, twitterja in twilio. O tem preberite kasneje.

Naš tok se začne z vozliščem "notify", ki sprejme zahtevo POST iz našega glavnega programa z nekaterimi podatki o kršitvi dostopa (primer podatkov najdete v vozlišču za komentarje "o prejemanju predmetov"). To vozlišče se takoj odzove s sporočilom "V redu", zato glavni program ve, da so bili podatki prejeti (Flow: /notify> response with Ok> response). Zeleno vozlišče na dnu z imenom msg.payload je namenjeno odpravljanju napak: če nekaj ne deluje, ga lahko uporabite.

Iz prvega vozlišča (/notify) se podatki razširijo na "Podatkovno temo" in "Slikovno temo", kjer sta tema "podatki" in "slika" dodani.

V vozlišču "compile" prejemamo podatke (ki jih dobimo v prvem koraku) s temo "data" in sliko s temo "image" (slika je vzeta iz /home/pi/image.jpg). Ta dva sporočila bi morala biti združena v en predmet, vendar sta oba predmeta prejeta ob različnih urah! Za obravnavo tega bomo uporabili funkcijo "kontekst", ki nam omogoča shranjevanje podatkov med priklici funkcij.

Naslednji korak je preveriti, ali je oseba z našega seznama dostopov ali je tujec (vozlišče checkConditions). V prejetih podatkih je polje "trustedPerson": "true" pomeni, da poznamo to osebo, vendar je kršila dovoljenje za dostop, "false" pomeni, da je oseba tujec.

Ko je rezultat »resničen«, pošljemo obvestilo na twitter, twilio in e -pošto; če je rezultat "napačen" - samo e -pošta in twilio. Ustvarjamo predmet za e -pošto s sporočilom, priloženo sliko in zadevo e -pošte, predmet za twilio s sporočilom. Za twitter dodamo podatke predmetu, če je "trustedPerson" res. Nato pošljite te tri predmete na tri različna vozlišča.

Opomba: Če naslednje vozlišče ne bi smelo prejeti sporočila, mu pošljemo samo "null".

Čas je, da konfigurirate vozlišča za obvestila!

Twitter Dodajte toku "twitter". Odprite ga z dvojnim klikom. Kliknite na svinčnik poleg »Twitter ID«. Nato kliknite »Kliknite tukaj za preverjanje pristnosti s Twitterjem«. Vnesite svoj račun na Twitterju in dajte dovoljenjima Node-Red potrebna dovoljenja.

E -pošta V tok dodajte vozlišče »e -pošta«. Če ne uporabljate Gmaila, bi morali spremeniti podatke v naslednjih poljih - "Strežnik" in "Vrata" (na straneh za pomoč svojega e -poštnega agenta lahko poiščete, kateri strežnik in vrata uporabite), sicer teh ne spreminjajte. polja.

  • Na> e -poštni naslov, na katerega bodo poslana sporočila
  • Userid> prijava iz vašega e -poštnega naslova (morda enako kot polje »Za«)
  • Geslo> geslo iz vašega e -poštnega računa
  • Ime> ime za to vozlišče

Twilio Pojdite na https://www.twilio.com/try-twilio in registrirajte račun. Preverite. Pojdite na https://www.twilio.com/console. Kliknite "Telefonske številke" (velika ikona #) in ustvarite brezplačno številko. Če ste zunaj ZDA, morate dodati dovoljenja GEO, pojdite na https://www.twilio.com/console/sms/settings/geo-pe… in dodajte svojo državo.

Zdaj pojdite v urejevalnik Node-Red, dodajte vozlišče Twilio, dvokliknite nanj, da konfigurirate in izpolnite vsa polja:

  • Poverilnice> Uporabite lokalne poverilnice
  • Twilio> uredi

    • SID računa> vzemite tukaj
    • Od> vnesite virtualno številko, ki ste jo ustvarili
    • Žeton> vzemite od tukaj
    • Ime> Twilio
  • Izhod> SMS
  • Za> svojo telefonsko številko
  • Ime> ime za to vozlišče.

Kliknite Uveljavi

Zdaj je vaš tok pripravljen! Lahko ga preizkusite tako, da pošljete zahtevo POST z navedenim predmetom!

6. korak: sestavljanje celotnega projekta

Sestavljanje celotnega projekta
Sestavljanje celotnega projekta
Sestavljanje celotnega projekta
Sestavljanje celotnega projekta

Opis koraka: V tem koraku bomo vse dele sestavili in delovali kot ločen sistem.

S tem korakom morate:

  1. Konfigurirajte stari pametni telefon kot kamero IP
  2. Imeti delujoče senzorje
  3. Usposobljen Microsoftov API za obraz
  4. Konfiguriran tok vozlišča-rdeč

Zdaj moramo izboljšati kodo, ki smo jo napisali v koraku 2. Natančneje funkcija process (), ki se pokliče, ko oseba odpre vrata. V tej funkciji bomo naredili naslednje:

  1. Pridobite sliko iz kamere ip in jo shranite v “/home/pi/” z imenom “image.jpg” (funkcija “fromIpCam” v datoteki “getImage”)
  2. Pridobite ime osebe na tej sliki (funkcija »checkPerson« v datoteki »prepoznavanje«)
  3. Preverite dovoljenje za dostop za to osebo (funkcija »preveri« v datoteki »dostop«)
  4. Na podlagi rezultatov funkcije "check" sestavi sporočilo
  5. Pošlji sestavljeno sporočilo Node-Red (funkcija »toNodeRed« v datoteki »sendData«)

Opomba: če si želite ogledati celotno kodo omenjenih funkcij, prenesite datoteko zip, priloženo temu koraku.

O funkciji "fromIpCam". Ta funkcija poda zahtevo GET na vašo kamero ip, v odgovor dobi osredotočeno sliko in jo shrani na pot, ki ste jo določili vi. Za to funkcijo morate navesti IP naslov kamere.

O funkciji »checkPerson«. Funkcija dobi pot do slike in skupine, v kateri želite poiskati osebo s fotografije kot parametre. Najprej zazna obraz na podani sliki (datoteka Face.py, funkcija »zaznavanje«). V odgovor dobi ID, če je bil zaznan obraz. Nato pokliče funkcijo »identificiraj« (datoteka Face.py), ki poišče podobne osebe v določeni skupini. V odgovor dobi ID osebe, če je oseba najdena. Nato pokličite funkcijo “person” (datoteka Person.py) z ID -jem osebe kot parametrom, funkcija “person” vrne osebo z določenim ID -jem, dobimo ime osebe in jo vrnemo.

O funkciji "preveri". Ta funkcija je v datoteki "access", kjer je tudi "access access" kot globalna spremenljivka (lahko jo spremenite, kot želite). Ko dobite ime osebe iz prejšnje funkcije, funkcija »preveri« primerjajte to osebo s seznamom dostopa in vrnite rezultat.

Opomba: celotnemu projektu je priložen naslednji korak.

7. korak: Zaključek

V tem koraku sem priložil celoten projekt, ki ga morate razpakirati in postaviti v svoj Raspberry Pi.

Če želite, da ta projekt deluje, zaženite datoteko »main.py«.

Če upravljate Raspberry Pi prek SSH, morate iz ene lupine zagnati dva programa: program python in Node-Red. V terminal vnesite naslednje:

vozlišče-rdeče

Pritisnite "Ctrl + Z" in vnesite:

službe

Videli ste postopek Node-Red. Oglejte si ID procesa in vnesite:

bg

Zdaj mora Node-Red začeti delovati v ozadju. Nato pojdite v imenik s svojim projektom in zaženite glavni program:

python3 main.py

Opomba: ne pozabite spremeniti KEY v datotekah python (korak 4) in poverilnic v toku Node-Red (korak 5)

Končano! Vaš hladilnik je varen!

Upam, da ste uživali v tem nepremagljivem! Svobodno pustite svoje misli v komentarjih.

Vesela bom, če boste glasovali za moj projekt =)

Hvala vam!

Priporočena: