INHOUDSOPGAWE:

Gesigsherkenningstelsel vir 'n yskas met Framboos Pi: 7 stappe (met foto's)
Gesigsherkenningstelsel vir 'n yskas met Framboos Pi: 7 stappe (met foto's)

Video: Gesigsherkenningstelsel vir 'n yskas met Framboos Pi: 7 stappe (met foto's)

Video: Gesigsherkenningstelsel vir 'n yskas met Framboos Pi: 7 stappe (met foto's)
Video: Прохождение The Last of Us part 2 (Одни из нас 2)#5 Куда же без флэшбэков и жесть в офисе 2024, Julie
Anonim
Image
Image
Gesigsherkenningstelsel vir 'n yskas met Framboos Pi
Gesigsherkenningstelsel vir 'n yskas met Framboos Pi
Gesigsherkenningstelsel vir 'n yskas met Framboos Pi
Gesigsherkenningstelsel vir 'n yskas met Framboos Pi

Deur die internet te blaai, het ek ontdek dat die pryse vir sekuriteitstelsels wissel van $ 150 tot $ 600, maar nie al die oplossings (selfs die duurste) kan met ander slim gereedskap by u huis geïntegreer word nie! U kan byvoorbeeld nie 'n veiligheidskamera by u voordeur instel nie, sodat dit die deur outomaties vir u of u vriende oopmaak!

Ek het besluit om 'n eenvoudige, goedkoop en kragtige oplossing te maak wat u oral kan gebruik! Daar is baie handleidings oor hoe om goedkoop en tuisgemaakte sekuriteitstelsels te skep, maar ek wil demonstreer dat dit nie 'n privaat toepassing is nie - sekuriteitstelsel vir 'n yskas met gesigsherkenning!

Hoe werk dit? Die IP -kamera bo -op 'n yskas, sensors (twee knoppies) bespeur wanneer 'n persoon die deur van die yskas oopmaak, daarna neem Raspberry Pi 'n foto van die persoon (met IP -kamera) en stuur dit dan na Microsoft Face API om die beeld te ontleed en die naam van die persoon te ontvang. Met hierdie inligting skandeer Raspberry Pi die 'toegangslys': as die persoon geen toestemming het om toegang tot die yskas te kry nie, stel Raspberry die eienaar daarvan in kennis via e -pos, sms en twitter! (Sien foto's hierbo)

Hoekom? Met die stelsel kan u u gesinslede beheer, veral as hulle 'n dieet volg of sukkel om nie na middernag te eet nie! Of gebruik dit net vir die pret!

Boonop kan u die kamera by u voordeur instel en die stelsel instel om die deur oop te maak wanneer u, u familielede of vriende nader. En dit is nie die einde nie! Die moontlikhede van die toepassing is eindeloos!

Laat ons begin!

Stap 1: Voorbereiding

Voorbereiding
Voorbereiding

Jy sal nodig hê:

  • Raspberry Pi 3 (jy kan ouer weergawes gebruik, maar die derde generasie het Wi-Fi, so dit is baie gerieflik)
  • Knoppies
  • Drade
  • Ou smartphone of Raspberry Pi kamera

Die eerste ding wat u moet doen, is om u Raspberry Pi op te stel. Gedetailleerde instruksies oor hoe u dit kan doen, kan u hier en hier vind, maar ons behandel die belangrikste stappe in hierdie handleiding.

  1. Laai Win32 DiskImager hier af (as u Windows gebruik)
  2. Laai SD Formatter hier af
  3. Plaas 'n SD -kaart in u rekenaar en formateer dit met SD Formatter
  4. Laai Raspbian -prent hier af (kies 'Raspbian Jessie met pixel')
  5. Begin Win32 DiskImager, kies u SD -kaart, spesifiseer die pad na die Raspbian -prent, klik op 'Skryf'
  6. Plaas die SD -kaart in u Raspberry Pi en skakel die krag aan!

Boonop moet u u Raspberry Pi instel om toegang tot die stelsel te hê via SSH. Daar is baie instruksies op die internet; u kan dit byvoorbeeld gebruik, of u kan 'n monitor en 'n sleutelbord aanheg.

Nou is u Pi gekonfigureer en is u gereed om verder te gaan!

Stap 2: Maak 'n sensor

Maak 'n sensor
Maak 'n sensor
Maak 'n sensor
Maak 'n sensor
Maak 'n sensor
Maak 'n sensor

Stapbeskrywing: In hierdie stap maak ons 'n sensor wat opspoor wanneer 'n persoon die deur van 'n yskas oopmaak en Raspberry Pi aktiveer.

Om dit op te stel, benodig u die 2 knoppies wat u oorspronklik voorberei het. Die eerste knoppie sal opspoor wanneer die deur oopgemaak word, die tweede knoppie sal opspoor wanneer die deur oopgemaak word tot wanneer ons 'n foto van 'n persoon neem.

  1. Soldeerdrade aan knoppies.
  2. Bevestig die eerste knoppie aan die deur van die yskas sodat dit gedruk word wanneer die deur toegemaak word (sien foto hierbo)
  3. Bevestig die tweede knoppie aan die deur van die yskas, soos op die foto hierbo getoon. Hierdie knoppie moet te alle tye losgemaak word, behalwe wanneer die deur die punt bereik wanneer die stelsel 'n foto neem. Om dit op te stel, moet u iets aan u yskas heg, sodat hierdie knoppie ingedruk word wanneer die deur in die gewenste mate oopgemaak word (sien foto's hierbo).
  4. Koppel drade van die knoppies aan die Raspberry Pi: eerste knoppie na GPIO 23 en grond, tweede knoppie aan GPIO 24 en grond (sien fritzdiagram).

Nota: ek gebruik BCM pinout (nie Board) nie; lees meer oor die verskil hier.

As u eenmaal via SSH aan u Raspberry Pi gekoppel is, tik u die terminaal in om die python -dop te laat loop:

luislang 3

As u die monitor en die sleutelbord aan die Raspberry Pi koppel, moet u 'Python 3 IDLE' in die spyskaart gebruik.

Die volgende stap is om Raspberry Pi met die knoppies te laat werk. Ons sal spesiale luisteraars heg aan GPIO 23 en 24 penne, wat sal luister na 'opkomende rand' en 'val' op die penne. In die geval, bel die luisteraars die funksies wat ons gedefinieer het. "Rising edge" beteken dat die knoppie ingedruk is en nou losgemaak is (eerste knoppie - deur word oopgemaak), "val rand" beteken dat die knoppie losgemaak is en nou ingedruk is (tweede knoppie - deur het spesifieke punt bereik). Meer oor die funksies van die knoppies - hier.

Voer eers die biblioteek in wat ons toegang tot die penne gee:

voer RPi. GPIO in as GPIO

Definieer nou spesiale funksies wat genoem sal word wanneer gebeurtenis geaktiveer word:

def sensor1 (kanaal): druk ("sensor 1 geaktiveer") def sensor2 (kanaal): druk ("sensor 2 geaktiveer)

Stel pinout -tipe in:

GPIO.setmode (GPIO. BCM)

Stel penne op:

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

Heg luisteraars aan:

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

Nou kan u dit toets! As u op die knoppie 1 druk, sien u 'n boodskap in die terminaal "sensor 1 geaktiveer", en die knoppie 2 gee u 'n boodskap "sensor 2 geaktiveer".

Let wel: vergeet nie om die volgende funksie te skakel as u klaar is met eksperimenteer nie: GPIO.cleanup ().

Laat ons nog 'n funksie instel wat genoem word wanneer die deur die punt bereik waar ons 'n foto neem! U kan dit self doen of my implementering wat ek hier aangeheg het, gebruik (sensor.py)

Let wel: sensor.py word slegs gebruik vir die toetsdoeleindes, die lêers met volledige funksionaliteit wat ek by die laaste stap aangeheg het.

Stap 3: Stel die IP -kamera op

Stel die IP -kamera op
Stel die IP -kamera op
Stel die IP -kamera op
Stel die IP -kamera op
Stel die IP -kamera op
Stel die IP -kamera op

Stapbeskrywing: Nou gaan ons die ou slimfoon as 'n IP -kamera opstel.

Die gebruik van slimfone as 'n IP -kamera word via die app gedoen. Daar is verskillende programme vir Android, iOS, Windows Phone wat u kan gebruik. Ek het die een genaamd "IP Webcam" vir Android gekies. Dit is 'n gratis app en dit is maklik om op te stel.

Begin die program, gaan na "Video -voorkeure" om die resolusie van die foto's wat die program verskaf, op te stel. Tik dan op "Begin bediener" (eerste prent hierbo). Onderaan die skerm moet u die ip -adres van die kamera sien (sien die tweede prent hierbo). In die blaaier kan u https://cam_ip_address/photo-j.webp

Heg laastens die kamera aan die yskas (laaste prent hierbo).

Stap 4: Face API

Gesig -API
Gesig -API

Stapbeskrywing: In hierdie stap sal ons praat oor Microsoft se Face API wat gesigsherkenning doen en mense identifiseer.

Microsoft se Face API is 'n gesigherkenningsdiens waardeur ons foto's kan ontleed en mense daarop kan identifiseer.

Eerstens het u 'n Microsoft Azure -rekening nodig. As u nie een het nie, kan u dit gratis hier skep.

Gaan tweedens na https://portal.azure.com, klik op "Nuwe" aan die linkerkant, tik die vorm "Cognitive Services API's" in, kies dit en klik op "Create". Of u kan hierdie skakel oopmaak. U moet nou die naam van u diens invoer, die tipe inskrywing kies, die tipe API wat u benodig (in ons geval is dit Face API), ligging, prysklas, hulpbrongroep en ooreenkom met die wettige bepalings (sien skermkiekie wat by hierdie stap gevoeg is).

Klik derdens op 'Alle hulpbronne', kies u Face API -diens en sien die gebruiksstatistieke, geloofsbriewe, ens.

Face API -besonderhede kan hier gevind word, voorbeelde in verskillende programmeertale word verskaf. Vir hierdie projek gebruik ons python. U kan dokumentasie lees en u eie stel funksies opstel, of u kan die een hier gebruik (dit is nie die volledige funksionaliteit wat deur Microsoft verskaf word nie, slegs die punte wat vir hierdie projek benodig word). My python -lêers is by hierdie stap aangeheg.

Kom ons gaan na die werkstruktuur met Face API. Om die funksie "Identifikasie" te gebruik, moet ons 'n biblioteek skep van mense waarmee die Face API -diens die foto's wat deur die app geneem word, sal herken. Volg die stappe om dit op te stel:

  1. Skep 'n groep
  2. Voeg persone by hierdie groep
  3. Voeg gesigte by hierdie persone
  4. Trein groep
  5. Dien 'n foto in met die persoon wat u wil identifiseer (u moet 'n foto en 'n groep -ID verskaf waarin die diens na kandidate sal soek)
  6. Resultaat: In reaksie hierop kry u 'n lys kandidate wat op die foto wat u ingedien het, kan verskyn.

Ek het drie lêers met spesifieke funksies geskep waarmee ek met groepe, enkelpersone en enkele foto's kan werk:

  • PersonGroup.py - bevat funksies wat toelaat: skep groep, kry inligting oor groep, kry lys van al u groepe, oefen groep en kry status van opleiding
  • Person.py - bevat funksies wat dit moontlik maak: skep 'n persoon, kry persoonsinligting, lys alle persone in die gespesifiseerde groep, voeg gesigte by die gespesifiseerde persoon
  • Face.py - bevat funksies wat dit moontlik maak: gesig op beeld op te spoor, persoon te identifiseer, naam van geïdentifiseerde persoon te kry

In die lêer genaamd 'erkenning.py' bied ek funksies waarmee u kan kyk of die beeld 'n gesig bevat en gesigte by 'n gespesifiseerde persoon kan voeg (outomaties word gesig van baie beelde uit die gespesifiseerde vouer bygevoeg).

Laai die lêer wat by hierdie stap aangeheg is, pak dit uit, verander die globale veranderlike van 'KEY' in die drie lêers: PersonGroup.py, Person.py en Face.py vir u eie sleutel wat u kan vind: portal.azure.com> alle hulpbronne > gesig -api -diens (of hoe jy dit genoem het)> oortjies sleutels. U kan enige van die twee sleutels gebruik.

Let wel: hier gaan ons Face API -diens oplei om mense te herken, sodat die volgende aksies vanaf enige rekenaar uitgevoer kan word (Raspberry Pi is nie nodig nie) - veranderinge word op Microsoft se bediener gestoor.

Nadat u KEY verander het, voer erkenning.py uit en voer die volgende opdrag in die python -dop in:

PersonGroup.create ("familie", 'fff-fff')) // u kan u eie naam en ID gebruik vir

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

U moet data sien oor die groep wat u pas geskep het. Tik nou in:

printResJson (Person.createPerson ('fff-fff', 'naam van persoon'))

Nou kry u 'n persoon -ID. Skep 'n gids met beelde van hierdie persoon sodat alle beelde die gesig van hierdie persoon bevat. U kan funksie detectFaceOnImages gebruik in erkenning.py wat u wys op watter foto's die gesig opgespoor word. Voer nou die opdrag uit:

addFacesToPerson ('map met beelde', 'persoon-ID wat u na vorige opdrag', 'fff-fff' gekry het)

Dan moet ons ons diens oplei deur die volgende in te voer:

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

Ons groep is opgelei en is gereed om 'n persoon te identifiseer.

Om die persoon op die beeld te kontroleer, kan u:

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

In reaksie hierop kry u 'n lys kandidate en waarskynlikhede op die foto.

Let wel: elke keer as u gesigte by 'n persoon of persoon by 'n groep voeg, moet u die groep oplei!

Stap 5: Node-Red Configuration

Node-rooi konfigurasie
Node-rooi konfigurasie

Stapbeskrywing: In hierdie stap sal ons 'n Node-Red-vloei skep wat u in kennis stel van die toegangsskending van u yskas =)

As u Raspberry Pi op Raspbian Jessie November 2015 of later weergawe werk, hoef u nie die Node-Red te installeer nie, want dit is reeds vooraf geïnstalleer. U hoef dit net op te dateer. Gebruik asseblief die handleiding hier.

Ons moet nou die Twilio-node in die Node-Red installeer, sodat ons 'n sms-boodskap kan aktiveer. Maak terminale oop en tik in:

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

Meer oor Twilio -knoop hier. Begin daarna die Node-Red deur in die terminaal te tik:

knoop-rooi

Gaan dan na: https://127.0.0.1:1880/ - as u die blaaier op u Raspberry Pihp oopmaak: // {raspberry_pi_ip}: 1880/ - as u Node -Red -redakteur vanaf 'n ander rekenaar wil oopmaak

Gebruik hierdie instruksie om die IP -adres van framboos pi te ken.

Nou moet u die Twilio-knoop vind in die lys van nodusse in u Node-Red-redakteur (dit verskyn gewoonlik na 'sosiale' groep).

Dit is tyd om die vloei te skep!

Let wel: u kan my stroom gebruik wat aan hierdie stap gekoppel is, maar moenie vergeet om die nodusse op te stel nie: e -pos, twitter en twilio. Lees later daaroor.

Ons vloei begin met 'kennisgewing' -knoop wat POST -versoek van ons hoofprogram aanvaar met 'n paar data oor toegangsskending (voorbeeld van die data kan gevind word in die kommentaarknoop 'oor die ontvangs van voorwerpe'). Hierdie knoop reageer onmiddellik met 'n 'Ok' -boodskap, sodat die hoofprogram weet dat die data ontvang is (Flow: /notify> response with Ok> response). Groen knoop onderaan met die naam msg.payload is daar vir ontfoutingsdoeleindes: as iets nie werk nie, kan u dit gebruik.

Van die vuisknoop (/stel kennis) data na "Data Topic" en "Image Topic" toe waar onderwerpe "data" en "image" onderskeidelik bygevoeg is.

In die "saamstel" -knoop ontvang ons data (wat ons tydens die eerste stap kry) met die "data" -onderwerp en 'n beeld met die "beeld" -onderwerp (die beeld is geneem uit /home/pi/image.jpg). Hierdie twee boodskappe moet in een voorwerp saamgestel word, maar die twee voorwerpe word op verskillende tye ontvang! Om dit te hanteer, gebruik ons die 'konteks' -funksie waarmee ons data tussen funksie -aanroepe kan stoor.

Die volgende stap is om te kyk of 'n persoon uit ons toegangslys of 'n vreemdeling is (checkConditions -knoop). Daar is 'n 'vertroudePersoon' -veld in die gegewens wat ons ontvang:' waar 'beteken dat ons hierdie persoon ken, maar hy/sy het toegangstoestemming geskend,' vals 'beteken dat die persoon 'n vreemdeling is.

As die resultaat “waar” is, stuur ons kennisgewing aan twitter, twilio en e -pos; as die resultaat “vals” is - slegs e -pos en twilio. Ons skep 'n voorwerp vir e -pos met 'n boodskap, aangehegte prentjie en e -posonderwerp, 'n voorwerp vir twilio met 'n boodskap. Vir Twitter voeg ons data by 'n voorwerp as 'trustPerson' waar is. Stuur dan hierdie drie voorwerpe na drie verskillende nodusse.

Let wel: as die volgende knoop nie 'n boodskap sou ontvang nie, stuur ons dit net "nul".

Dit is tyd om nodusse vir kennisgewing op te stel!

Twitter Voeg 'twitter' -node by die stroom. Maak dit oop deur te dubbelklik. Klik op die potlood langs "Twitter ID". Klik dan op "Klik hier om met Twitter te verifieer". Voer u Twitter-rekening in en gee die nodige toestemmings nodig.

E -pos Voeg 'e -pos' -node by die stroom. As u nie Gmail gebruik nie, moet u die data in die volgende velde verander - "bediener" en "poort" (u kan op die hulpbladsye van u e -posagent vind watter bediener en poort u moet gebruik), anders moet u dit nie verander nie velde.

  • Na> e -posadres waarheen boodskappe gestuur sal word
  • Userid> aanmelding vanaf u e -posadres (miskien dieselfde as die veld 'Aan')
  • Wagwoord> wagwoord van u e -posrekening
  • Naam> naam vir hierdie knoop

Twilio Gaan na https://www.twilio.com/try-twilio en registreer 'n rekening. Verifieer dit. Gaan na https://www.twilio.com/console. Klik op "Telefoonnommers" (groot # -ikoon) en skep 'n gratis nommer. As u buite die VSA is, moet u GEO-toestemmings byvoeg, gaan na https://www.twilio.com/console/sms/settings/geo-pe… en voeg u land by.

Gaan nou na die Node-Red-redakteur, voeg die Twilio-node by, dubbelklik daarop om al die velde te konfigureer en in te vul:

  • Bewyse> Gebruik plaaslike geloofsbriewe
  • Twilio> wysig

    • Rekening SID> neem van hier
    • Tik> van die virtuele nommer wat u geskep het
    • Teken> neem hiervandaan
    • Naam> Twilio
  • Uitset> SMS
  • Na> jou telefoonnommer
  • Naam> naam vir hierdie knoop.

Klik op Ontplooi

Nou is u vloei gereed! U kan dit toets deur 'n POST -versoek met 'n gespesifiseerde voorwerp te stuur!

Stap 6: Die opstel van die hele projek

Die opstel van die hele projek
Die opstel van die hele projek
Die opstel van die hele projek
Die opstel van die hele projek

Stapbeskrywing: In hierdie stap sal ons alle dele saamvoeg en laat werk as 'n aparte stelsel.

Deur hierdie stap moet u:

  1. Stel die ou slimfoon op as 'n ip -kamera
  2. Het werkende sensors
  3. Opgeleide Microsoft se Face API
  4. Gekonfigureerde knoop-rooi vloei

Nou moet ons die kode wat ons in stap 2. geskryf het, verbeter, meer spesifiek die funksieproses () wat genoem word wanneer 'n persoon die deur oopmaak. In hierdie funksie sal ons die volgende doen:

  1. Kry die beeld van die ip -kamera en stoor dit in "/home/pi/" met die naam "image.jpg" (funksie "fromIpCam" in die lêer "getImage")
  2. Kry die naam van die persoon op die prent (funksie "checkPerson" in lêer "erkenning")
  3. Kontroleer toegangstoestemming vir daardie persoon (funksie "kyk" in lêer "toegang")
  4. Op grond van die resultaat van die 'tjek' -funksie, stel die boodskap saam
  5. Stuur saamgestelde boodskap na Node-Red (funksie "toNodeRed" in lêer "sendData")

Nota: om die volledige kode van genoemde funksies te sien, laai die zip -lêer wat by hierdie stap aangeheg is, af.

Oor funksie "fromIpCam". Hierdie funksie maak die GET -versoek aan u ip -kamera, kry 'n gefokusde beeld in reaksie en stoor dit op die pad wat u spesifiseer. U moet die kamera se IP -adres aan hierdie funksie verskaf.

Oor die funksie “checkPerson”. Die funksie kry 'n pad na die beeld en die groep waarin u 'n persoon op die foto wil soek as parameters. Eerstens bespeur dit 'n gesig op die gegewe prentjie (lêer Face.py, funksie "detect"). In reaksie hierop kry dit 'n ID as die gesig wat opgespoor is. Dan noem dit die 'identifiseer' -funksie (Face.py -lêer) wat soortgelyke persone in die gespesifiseerde groep vind. As antwoord kry dit 'n persoon se ID as iemand gevind word. Noem dan funksie "persoon" (lêer Person.py) met persoon -ID as 'n parameter, "persoon" -funksie gee persoon met gespesifiseerde ID terug, ons kry die naam van die persoon en gee dit terug.

Oor funksie “tjek”. Hierdie funksie word in lêer "toegang" geplaas, waar ook "toegangslys" as 'n globale veranderlike geplaas word (u kan dit verander soos u wil). As u die naam van die persoon van die vorige funksie kry, funksioneer 'check', vergelyk hierdie persoon met die toegangslys en gee die resultaat terug.

Let wel: die volledige projek is aangeheg by die volgende stap.

Stap 7: Gevolgtrekking

In hierdie stap het ek die volledige projek aangeheg wat u moet uitpak en op u Raspberry Pi plaas.

Om hierdie projek te laat werk, voer 'n "main.py" -lêer uit.

As u Raspberry Pi via SSH beheer, moet u twee programme uit een dop uitvoer: python-program en Node-Red. Tik die volgende in die terminaal:

knoop-rooi

Druk "Ctrl + Z" en tik:

werksgeleenthede

U het Node-Red-proses gesien. Kyk na die ID van die proses en tik:

bg

Nou moet Node-Red in die agtergrond begin werk. Gaan dan na die gids met u projek en voer die hoofprogram uit:

python3 main.py

Let wel: moenie vergeet om KEY in python-lêers (stap 4) en geloofsbriewe in Node-Red-vloei (stap 5) te verander nie

Klaar! Jou yskas is veilig!

Ek hoop jy het hierdie onaangename geniet! Laat u gedagtes gerus in die kommentaar.

Ek sal dit waardeer as u vir my projek stem =)

Dankie!

Aanbeveel: