Indholdsfortegnelse:

Ansigtsgenkendelsessystem til et køleskab med hindbær Pi: 7 trin (med billeder)
Ansigtsgenkendelsessystem til et køleskab med hindbær Pi: 7 trin (med billeder)

Video: Ansigtsgenkendelsessystem til et køleskab med hindbær Pi: 7 trin (med billeder)

Video: Ansigtsgenkendelsessystem til et køleskab med hindbær Pi: 7 trin (med billeder)
Video: Double cabinet integration sales machines that support facial recognition payment 2024, Juli
Anonim
Image
Image
Ansigtsgenkendelsessystem til et køleskab med hindbær Pi
Ansigtsgenkendelsessystem til et køleskab med hindbær Pi
Ansigtsgenkendelsessystem til et køleskab med hindbær Pi
Ansigtsgenkendelsessystem til et køleskab med hindbær Pi

Ved at surfe på internettet har jeg opdaget, at priserne på sikkerhedssystemer varierer fra 150 $ til 600 $ og derover, men ikke alle løsningerne (selv de meget dyre) kan integreres med andre smarte værktøjer i dit hjem! For eksempel kan du ikke oprette et sikkerhedskamera ved din hoveddør, så det automatisk åbner døren for dig eller dine venner!

Jeg har besluttet at lave en enkel, billig og kraftfuld løsning, som du kan bruge hvor som helst! Der er mange manualer til, hvordan man opretter billige og hjemmelavede sikkerhedssystemer, men jeg vil demonstrere virkelig utrivelig anvendelse af dem - sikkerhedssystem til et køleskab med ansigtsgenkendelse!

Hvordan virker det? IP -kameraet placeret på toppen af et køleskab, sensorer (to knapper) registrerer, når en person åbner døren til køleskabet, efter at Raspberry Pi tager et billede af den pågældende person (med IP -kamera), sender det derefter til Microsoft Face API at analysere billedet og modtage personens navn. Med disse oplysninger scanner Raspberry Pi "adgangslisten": hvis personen ikke har tilladelse til at få adgang til køleskabet, underretter Raspberry ejeren via e -mail, sms og twitter! (Se billederne ovenfor)

Hvorfor? Systemet giver dig mulighed for at kontrollere dine familiemedlemmer, især når de er på diæt, eller kæmper med ikke at spise efter midnat! Eller brug det bare for sjov!

Desuden kan du faktisk opsætte kameraet ved din hoveddør og konfigurere systemet til at åbne døren, når du, dine familiemedlemmer eller venner nærmer dig. Og dette er ikke slutningen! Mulighederne for ansøgningen er uendelige!

Lad os begynde!

Trin 1: Forberedelse

Forberedelse
Forberedelse

Du får brug for:

  • Raspberry Pi 3 (du kan bruge ældre versioner, men tredje generation har Wi-Fi, så det er meget praktisk)
  • Knapper
  • Ledninger
  • Gammel smartphone eller Raspberry Pi kamera

Det første du skal gøre er at konfigurere din Raspberry Pi. Detaljerede instruktioner om, hvordan du gør, kan du finde her og her, men vi vil dække de vigtigste trin i denne vejledning.

  1. Download Win32 DiskImager herfra (hvis du bruger Windows)
  2. Download SD -formatter herfra
  3. Indsæt SD -kort i din computer, og formater det med SD -formatter
  4. Download Raspbian -billede herfra (Vælg "Raspbian Jessie med pixel")
  5. Kør Win32 DiskImager, vælg dit SD -kort, angiv stien til Raspbian -billede, klik på "Skriv"
  6. Indsæt SD -kort i din Raspberry Pi og tænd for strømmen!

Derudover skulle du konfigurere din Raspberry Pi for at have adgang til systemet via SSH. Der er masser af instruktioner på internettet, du kan f.eks. Bruge dette, eller du kan vedhæfte skærm og tastatur.

Nu er din Pi konfigureret, og du er klar til at fortsætte!

Trin 2: Lav en sensor

Lav en sensor
Lav en sensor
Lav en sensor
Lav en sensor
Lav en sensor
Lav en sensor

Trin Beskrivelse: I dette trin vil vi lave en sensor, der registrerer, når personen åbner døren til et køleskab og aktiverer Raspberry Pi.

For at konfigurere det skal du bruge de 2 knapper, du oprindeligt havde forberedt. Den første knap registrerer, når døren åbnes, den anden knap registrerer, når døren åbnes til det punkt, hvor vi tager et foto af en person.

  1. Loddekabler til knapper.
  2. Sæt den første knap på døren til køleskabet, så der trykkes på den, når døren er lukket (se billedet ovenfor)
  3. Sæt den anden knap på døren til køleskabet som vist på billedet ovenfor. Denne knap skal altid slippes, undtagen når døren når det punkt, hvor systemet tager et billede. For at konfigurere det skal du vedhæfte noget til dit køleskab, så der trykkes på denne knap, når døren åbnes i det ønskede omfang (se fotos ovenfor).
  4. Fastgør ledninger fra knapperne til Raspberry Pi: første knap til GPIO 23 og jord, anden knap til GPIO 24 og jord (Se fritzing diagram).

Bemærk: Jeg bruger BCM pinout (ikke Board), mere om forskellen læses her.

Når du er forbundet til din Raspberry Pi via SSH, skal du indtaste terminalen for at køre python -shell:

python3

Hvis du tilslutter skærm og tastatur til Raspberry Pi, skal du bare køre "Python 3 IDLE" fra menuen.

Næste trin er at få Raspberry Pi til at fungere med knapperne. Vi vil vedhæfte særlige lyttere til GPIO 23 og 24 ben, der lytter efter "stigende kant" -begivenhed og "faldende kant" -begivenhed på disse ben. I tilfælde af begivenheden vil lytterne kalde de funktioner, vi har defineret. "Stigende kant" betyder, at der blev trykket på knappen og nu blev sluppet (første knap - dør åbnes), "faldende kant" betyder, at knappen blev frigivet og nu trykket (anden knap - dør har nået et bestemt punkt). Mere om knappernes funktionalitet - her.

Først skal du importere bibliotek, der giver os adgang til stifterne:

importer RPi. GPIO som GPIO

Definer nu særlige funktioner, der vil blive kaldt, når hændelse udløses:

def sensor1 (kanal): print ("sensor 1 udløst") def sensor2 (kanal): print ("sensor 2 udløst)

Indstil pinout -type:

GPIO.setmode (GPIO. BCM)

Konfigurer stifter:

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

Vedhæft lyttere:

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

Nu kan du teste det! Hvis du trykker på knappen 1, vil du se en meddelelse i terminal "sensor 1 udløst", knappen 2 giver dig en meddelelse "sensor 2 udløst".

Bemærk: Når du er færdig med at eksperimentere, skal du ikke glemme at kalde følgende funktion: GPIO.cleanup ().

Lad os oprette endnu en funktion, der kaldes, når døren når det punkt, hvor vi tager et foto! Du kan gøre det selv eller bruge min implementering, som jeg har vedhæftet her (sensor.py)

Bemærk: sensor.py bruges kun til testformål, de filer med fuld funktionalitet, jeg har vedhæftet til det sidste trin.

Trin 3: Konfigurer IP -kamera

Konfigurer IP -kamera
Konfigurer IP -kamera
Konfigurer IP -kamera
Konfigurer IP -kamera
Konfigurer IP -kamera
Konfigurer IP -kamera

Trinbeskrivelse: Nu skal vi konfigurere den gamle smartphone som et IP -kamera.

Brug af smartphone som et IP -kamera sker via app. Der er forskellige apps til Android, iOS, Windows Phone, som du kan bruge. Jeg valgte det, der hedder "IP Webcam" til Android. Dette er en gratis app, og den er let at konfigurere.

Kør appen, gå til "Videopræferencer" for at konfigurere opløsning af fotos, som appen vil levere. Tryk derefter på "Start server" (første billede ovenfor). I bunden af skærmen skal du se kameraets ip -adresse (Se andet billede ovenfor). I browser kan du skrive https://cam_ip_address/photo.jpg, og du får billedet fra ip kamera! Skriv https://cam_ip_address/photoaf-j.webp

Tilslut slut kameraet til køleskabet (sidste billede ovenfor).

Trin 4: Face API

Face API
Face API

Trin Beskrivelse: I dette trin vil vi tale om Microsofts Face API, der gør ansigtsgenkendelse og identificerer mennesker.

Microsofts Face API er en ansigtsgenkendelsestjeneste, hvorigennem vi kan analysere fotos og identificere mennesker på dem.

Først skal du bruge Microsoft Azure -konto. Hvis du ikke har en, kan du oprette den gratis her.

Gå derefter til https://portal.azure.com, klik på "Ny" i venstre side, indtast formularen "Cognitive Services APIs", vælg det og klik på "Opret". Eller du kan åbne dette link. Nu skal du indtaste Navn på din service, vælge abonnementstype, type API, du har brug for (i vores tilfælde er det Face API), placering, prissætning, ressourcegruppe og godkende juridiske vilkår (se skærmbillede tilføjet til dette trin).

For det tredje skal du klikke på "Alle ressourcer", vælge din Face API -service og se brugsstatistikker, legitimationsoplysninger osv.

Face API -detaljer findes her, eksempler på forskellige programmeringssprog findes. Til dette projekt bruger vi python. Du kan læse dokumentation og lave dit eget sæt funktionalitet, eller du kan bruge den, der findes her (dette er ikke det fulde sæt funktionalitet, der leveres af Microsoft, kun de punkter, der er nødvendige for dette projekt). Mine python -filer er knyttet til dette trin.

Lad os gå til strukturen i arbejdet med Face API. For at bruge "Identifikation" -funktionaliteten skal vi oprette et bibliotek af mennesker, der bruger, hvilken Face API -service vil genkende de fotos, der er taget af appen. Følg trinene for at konfigurere det:

  1. Opret en gruppe
  2. Føj personer til denne gruppe
  3. Tilføj ansigter til disse personer
  4. Toggruppe
  5. Send foto med en person, som du vil identificere (du skal angive foto- og gruppe -id, hvor tjenesten leder efter kandidater)
  6. Resultat: Som svar får du en liste over kandidater, der kan være på det foto, du har indsendt.

Jeg har oprettet tre filer med specifik funktionalitet, der gør det muligt at arbejde med grupper, enkeltpersoner og enkeltfotos:

  • PersonGroup.py - indeholder funktioner, der tillader: oprette gruppe, få oplysninger om gruppe, få liste over alle dine grupper, træne gruppe og få status for træning
  • Person.py - indeholder funktioner, der tillader: oprette person, få personoplysninger, liste alle personer i den angivne gruppe, tilføje ansigter til en bestemt person
  • Face.py - indeholder funktioner, der tillader: at registrere ansigt på billede, identificere person, få navn på identificeret person

I filen kaldet "anerkendelse.py" har jeg funktioner, der giver dig mulighed for at kontrollere, om billedet indeholder et ansigt og tilføje ansigter til en bestemt person (tilføjer automatisk ansigt fra mange billeder fra den angivne mappe).

Download filen vedhæftet dette trin, pakk den ud, skift 'KEY' global variabel i disse tre filer: PersonGroup.py, Person.py og Face.py til din egen nøgle, som du kan finde: portal.azure.com> alle ressourcer > face api service (eller hvordan du kaldte det)> fanen nøgler. Du kan bruge en af de to taster.

Bemærk: her skal vi træne Face API -service til at genkende mennesker, så følgende handlinger kan udføres fra enhver computer (Raspberry Pi er ikke nødvendig til det) - ændringer gemmes på Microsofts server.

Efter ændring af KEY, kør anerkendelse.py og indtast følgende kommando i python shell:

PersonGroup.create ("familie", 'fff-fff')) // du kan bruge dit eget navn og id til

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

Du skal se data om gruppe, du lige har oprettet. Indtast nu:

printResJson (Person.createPerson ('fff-fff', 'personens navn'))

Nu får du person -id. Opret mappe med billeder af denne person, så alle billeder indeholder ansigtet på denne person. Du kan bruge function detectFaceOnImages i anerkendelse.py, som viser dig, på hvilket fotos ansigt detekteres. Kør nu kommandoen:

addFacesToPerson ('mappe med billeder', 'person-id, som du fik efter forrige kommando', 'fff-fff')

Derefter skal vi træne vores service ved at indtaste følgende:

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

Nu er vores gruppe uddannet og er klar til at identificere en person.

For at kontrollere person på billedet kan du:

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

Som svar får du en liste over kandidater og sandsynlighed, der er på billedet.

Bemærk: hver gang du tilføjer ansigter til en person eller person til en gruppe, skal du træne gruppen!

Trin 5: Node-rød konfiguration

Node-rød konfiguration
Node-rød konfiguration

Trin Beskrivelse: I dette trin opretter vi Node-Red-flow, der giver dig besked om adgangsovertrædelsen til dit køleskab =)

Hvis din Raspberry Pi kører på Raspbian Jessie november 2015 eller en nyere version, behøver du ikke at installere Node-Red, fordi den allerede er forudinstalleret. Du skal bare opdatere det. Brug venligst manualen her.

Nu skal vi installere Twilio-node til Node-Red, så vi kunne udløse en tekstbesked. Åbn terminal og indtast:

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

Mere om Twilio -knude her. Efter det skal du køre Node-Red ved at skrive ind i terminalen:

knude-rød

Gå derefter til: https://127.0.0.1:1880/ - hvis du åbner browser på din Raspberry Pihttps:// {raspberry_pi_ip}: 1880/ - hvis du vil åbne Node -Red editor fra en anden computer

For at kende ip -adressen til hindbær pi brug denne vejledning.

Nu skal du finde Twilio-noden på listen over noder i din Node-Red-editor (normalt vises den efter 'social' gruppe).

Det er tid til at skabe strømmen!

Bemærk: du kan bruge mit flow knyttet til dette trin, men glem ikke at konfigurere noder: e -mail, twitter og twilio. Læs om det senere.

Vores flow starter med "notify" -knude, der accepterer POST -anmodning fra vores hovedprogram med nogle data om adgangsovertrædelse (eksempel på data kan findes i kommentarknudepunktet "om modtagelse af objekter"). Denne node reagerer straks med "Ok" -meddelelse, så hovedprogrammet ved, at dataene blev modtaget (Flow: /notify> response with Ok> response). Grøn knude i bunden med navn msg.payload er der til fejlfinding: Hvis noget ikke virker, kan du bruge det.

Fra knytnædeknude (/underret) data, der spredes til "Data Topic" og "Image Topic", hvor emnerne "data" og "image" tilføjes henholdsvis.

I "kompiler" -noden modtager vi data (som vi får i løbet af det første trin) med emnet "data" og et billede med emnet "billede" (billedet er hentet fra /home/pi/image.jpg). Disse to meddelelser skal samles til ét objekt, men de to objekter modtages på forskellige tidspunkter! For at håndtere dette vil vi bruge funktionen "kontekst", der giver os mulighed for at gemme data mellem funktionstilkaldelser.

Næste trin er at kontrollere, om personen fra vores adgangsliste er en fremmed (checkConditions -knudepunkt). Der er et "trustPerson" -felt i de data, vi modtager: "sandt" betyder, at vi kender denne person, men han/hun overtrådte adgangstilladelsen, "falsk" betyder, at personen er en fremmed.

Når resultatet er "sandt", sender vi besked til twitter, twilio og e -mail; når resultatet er "falsk" - kun e -mail og twilio. Vi opretter et objekt til e -mail med en besked, vedhæftet billede og e -mail -emne, et objekt til twilio med en besked. For twitter tilføjer vi data til et objekt, hvis "TrustedPerson" er sandt. Send derefter disse tre objekter til tre forskellige noder.

Bemærk: Hvis følgende node ikke skulle modtage en besked, sender vi bare "null" til den.

Det er tid til at konfigurere noder til underretning!

Twitter Tilføj "twitter" -knude til flowet. Åbn den ved at dobbeltklikke. Klik på blyanten ud for "Twitter ID". Klik derefter på "Klik her for at godkende med Twitter". Indtast din twitter-konto, og giv Node-Red nødvendige tilladelser.

Email Tilføj "email" -knude til flowet. Hvis du ikke bruger Gmail, skal du ændre data i følgende felter - "Server" og "Port" (du kan finde hvilken server og port du skal bruge på Hjælpssiderne i din e -mail -agent) ellers må du ikke ændre disse felter.

  • Til> e -mail -adresse, hvortil meddelelser vil blive sendt
  • Userid> login fra din e -mail (måske det samme som "Til" -felt)
  • Adgangskode> adgangskode fra din e -mail -konto
  • Navn> navn på denne knude

Twilio Gå til https://www.twilio.com/try-twilio og registrer en konto. Kontroller det. Gå til https://www.twilio.com/console. Klik på "Telefonnumre" (stort # -ikon) og opret et gratis nummer. Hvis du er uden for USA, skal du tilføje GEO-tilladelser, gå til https://www.twilio.com/console/sms/settings/geo-pe… og tilføj dit land.

Gå nu til Node-Red-editoren, tilføj Twilio-noden, dobbeltklik på den for at konfigurere og udfylde alle felterne:

  • Legitimationsoplysninger> Brug lokale legitimationsoplysninger
  • Twilio> rediger

    • Kontosid> hent herfra
    • Fra> indtast det virtuelle nummer, du har oprettet
    • Token> hent herfra
    • Navn> Twilio
  • Output> SMS
  • Til> dit telefonnummer
  • Navn> navn på denne knude.

Klik på Deploy

Nu er dit flow klar! Du kan teste det ved at sende POST -anmodning med angivet objekt!

Trin 6: Kompilering af hele projektet

Udarbejdelse af hele projektet
Udarbejdelse af hele projektet
Udarbejdelse af hele projektet
Udarbejdelse af hele projektet

Trin Beskrivelse: I dette trin sætter vi alle dele sammen og får dem til at fungere som et separat system.

Ved dette trin skal du:

  1. Konfigurer den gamle smartphone som ip -kamera
  2. Har arbejdssensorer
  3. Uddannet Microsofts Face API
  4. Konfigureret Node-Red flow

Nu skal vi forbedre koden, som vi skrev i trin 2. Mere specifikt funktionsproces (), der kaldes, når personen åbner døren. I denne funktion gør vi følgende:

  1. Hent billede fra ip kamera og gem det i "/home/pi/" med navnet "image.jpg" (funktion "fromIpCam" i filen "getImage")
  2. Få navnet på personen på det billede (funktion "checkPerson" i fil "genkendelse")
  3. Kontroller adgangstilladelse for den pågældende person (funktion "tjek" i filen "adgang")
  4. Baseret på resultatet af “tjek” -funktionen komponere besked
  5. Send sammensat meddelelse til Node-Red (funktion "toNodeRed" i filen "sendData")

Bemærk: For at se den fulde kode for de nævnte funktioner, skal du downloade zip -fil vedhæftet dette trin.

Om funktion “fromIpCam”. Denne funktion gør GET -anmodningen til dit ip -kamera, får fokuseret billede som svar og gemmer det på den sti, du har angivet. Du skal angive kameraets ip -adresse til denne funktion.

Om funktion “checkPerson”. Funktionen får sti til billede og gruppe, hvor du vil søge person fra fotoet som parametre. For det første registrerer det et ansigt på det medfølgende billede (fil Face.py, funktion "detekter"). Som svar får det id, hvis ansigt, der blev opdaget. Derefter kalder den "identificer" -funktion (Face.py -fil), der finder lignende personer i en specificeret gruppe. Som svar får det en person -id, hvis personen findes. Så kald funktion "person" (fil Person.py) med person -ID som parameter, "person" -funktion returnerer person med angivet ID, vi får navn på person og returnerer det.

Om funktion “tjek”. Denne funktion placeres i filen "adgang", hvor også "adgangsliste" placeres som en global variabel (du kan ændre den, som du vil). Få navnet på personen fra tidligere funktion, funktion "tjek" sammenlign denne person med adgangsliste og returner resultatet.

Bemærk: hele projektet er knyttet til det næste trin.

Trin 7: Konklusion

I dette trin vedhæftede jeg det fulde projekt, som du skulle pakke ud og placere på din Raspberry Pi.

For at få dette projekt til at fungere skal du køre en "main.py" -fil.

Hvis du styrer Raspberry Pi via SSH, skal du køre to programmer fra en skal: python-program og Node-Red. Indtast terminalen følgende:

knude-rød

Tryk "Ctrl + Z" og skriv:

job

Du har set Node-Red-processen. Se på id'et for processen, og skriv:

bg

Nu skal Node-Red begynde at arbejde i baggrunden. Gå derefter til biblioteket med dit projekt og kør hovedprogrammet:

python3 main.py

Bemærk: glem ikke at ændre KEY i python-filer (trin 4) og legitimationsoplysninger i Node-Red flow (trin 5)

Færdig! Dit køleskab er sikkert!

Jeg håber, at du nød dette uoverskuelige! Efterlad gerne dine sind i kommentarer.

Jeg ville sætte pris på hvis du stemmer på mit projekt =)

Tak skal du have!

Anbefalede: