Innholdsfortegnelse:

Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi: 7 trinn (med bilder)
Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi: 7 trinn (med bilder)

Video: Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi: 7 trinn (med bilder)

Video: Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi: 7 trinn (med bilder)
Video: Orden i kjøleskapet - Alt i orden | Synnøve Skarbø 2024, Juli
Anonim
Image
Image
Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi
Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi
Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi
Ansiktsgjenkjenningssystem for kjøleskap med bringebær Pi

Ved å surfe på internett har jeg oppdaget at prisene på sikkerhetssystemer varierer fra 150 $ til 600 $ og over, men ikke alle løsningene (selv de veldig dyre) kan integreres med andre smarte verktøy hjemme hos deg! For eksempel kan du ikke sette opp et sikkerhetskamera ved inngangsdøren din, slik at det automatisk åpner døren for deg eller dine venner!

Jeg har bestemt meg for å lage en enkel, billig og kraftig løsning, som du kan bruke hvor som helst! Det er mange håndbøker om hvordan du lager billige og hjemmelagde sikkerhetssystemer, men jeg vil demonstrere virkelig ikke -privat bruk av disse - sikkerhetssystem for et kjøleskap med ansiktsgjenkjenning!

Hvordan virker det? IP -kameraet plassert på toppen av et kjøleskap, sensorer (to knapper) oppdager når en person åpner døren til kjøleskapet, etter at Raspberry Pi tar et bilde av den personen (med IP -kamera), sender det deretter til Microsoft Face API å analysere bildet og motta navnet på personen. Med denne informasjonen skanner Raspberry Pi "tilgangslisten": hvis personen ikke har tillatelse til å få tilgang til kjøleskapet, varsler Raspberry eieren via e -post, tekstmelding og twitter! (Se bildene ovenfor)

Hvorfor? Systemet lar deg kontrollere familiemedlemmene dine, spesielt når de er på diett, eller sliter med å ikke spise etter midnatt! Eller bruk den bare for moro skyld!

Videre kan du faktisk sette opp kameraet ved inngangsdøren din og konfigurere systemet til å åpne døren når du, dine familiemedlemmer eller venner nærmer deg. Og dette er ikke slutten! Mulighetene for applikasjonen er uendelige!

La oss begynne!

Trinn 1: Forberedelse

Forberedelse
Forberedelse

Du vil trenge:

  • Raspberry Pi 3 (du kan bruke eldre versjoner, men tredje generasjon har Wi-Fi, så det er veldig praktisk)
  • Knapper
  • Ledninger
  • Gammelt smarttelefon- eller Raspberry Pi -kamera

Det første du må gjøre er å konfigurere Raspberry Pi. Detaljerte instruksjoner om hvordan du gjør det finner du her og her, men vi vil dekke de viktigste trinnene i denne håndboken.

  1. Last ned Win32 DiskImager herfra (hvis du bruker Windows)
  2. Last ned SD -formater herfra
  3. Sett inn SD -kortet i datamaskinen og formater det med SD -formatering
  4. Last ned Raspbian -bilde herfra (Velg "Raspbian Jessie med piksel")
  5. Kjør Win32 DiskImager, velg SD -kortet ditt, angi banen til Raspbian -bildet, klikk "Skriv"
  6. Sett inn SD -kortet i Raspberry Pi og slå på strømmen!

I tillegg må du konfigurere Raspberry Pi for å ha tilgang til systemet via SSH. Det er mange instruksjoner på internett, du kan for eksempel bruke dette, eller du kan koble til skjerm og tastatur.

Nå er Pi konfigurert og du er klar til å fortsette!

Trinn 2: Lag en sensor

Å lage en sensor
Å lage en sensor
Å lage en sensor
Å lage en sensor
Å lage en sensor
Å lage en sensor

Trinn Beskrivelse: I dette trinnet vil vi lage en sensor som oppdager når personen åpner døren til et kjøleskap og aktiverer Raspberry Pi.

For å konfigurere det trenger du de 2 knappene du opprinnelig hadde forberedt. Den første knappen vil oppdage når døren åpnes, den andre knappen vil oppdage når døren åpnes til det punktet når vi tar et bilde av en person.

  1. Loddetråder til knapper.
  2. Fest den første knappen til døren til kjøleskapet slik at den skyves når døren er lukket (se bildet ovenfor)
  3. Fest den andre knappen til døren til kjøleskapet som vist på bildet ovenfor. Denne knappen må alltid slippes, bortsett fra når døren når det punktet når systemet tar et bilde. For å sette det opp må du feste noe til kjøleskapet slik at du trykker på denne knappen når døren åpnes i ønsket grad (se bildene ovenfor).
  4. Fest ledninger fra knappene til Raspberry Pi: den første knappen til GPIO 23 og bakken, den andre knappen til GPIO 24 og bakken (se fritzediagram).

Merk: Jeg bruker BCM pinout (ikke Board), mer om forskjellen les her.

Når du er koblet til Raspberry Pi via SSH, skriver du inn terminalen for å kjøre python -skallet:

python3

Hvis du kobler skjerm og tastatur til Raspberry Pi, bare kjør "Python 3 IDLE" fra menyen.

Neste trinn er å få Raspberry Pi til å fungere med knappene. Vi vil feste spesielle lyttere til GPIO 23 og 24 pins, som vil lytte etter "stigende kant" -hendelse og "fallende kant" -hendelse på disse pinnene. I tilfelle ringer lytterne til funksjonene vi har definert. “Stigende kant” betyr at knappen ble trykket og nå sluppet (første knapp - dør åpnes), “fallende kant” betyr at knappen ble sluppet og nå trykket (den andre knappen - døren har nådd et bestemt punkt). Mer om knappefunksjonaliteten - her.

Importer først biblioteket som gir oss tilgang til pinnene:

importer RPi. GPIO som GPIO

Definer nå spesialfunksjoner som vil bli kalt når hendelsen utløses:

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

Angi pinout -type:

GPIO.setmode (GPIO. BCM)

Konfigurer pins:

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

Legg til lyttere:

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

Nå kan du teste det! Hvis du trykker på knappen 1, vil du se en melding i terminalen "sensor 1 utløst", knappen 2 gir deg en melding "sensor 2 utløst".

Merk: Når du er ferdig med å eksperimentere, ikke glem å ringe følgende funksjon: GPIO.cleanup ().

La oss sette opp en annen funksjon som kalles når døren når det punktet hvor vi tar et bilde! Du kan gjøre det selv eller bruke implementeringen min som jeg har vedlagt her (sensor.py)

Merk: sensor.py brukes bare til testformål, filene med full funksjonalitet har jeg lagt ved det siste trinnet.

Trinn 3: Konfigurer IP -kamera

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

Trinnbeskrivelse: Nå skal vi konfigurere den gamle smarttelefonen som et IP -kamera.

Bruk av smarttelefon som IP -kamera gjøres via app. Det er forskjellige apper for Android, iOS, Windows Phone som du kan bruke. Jeg valgte det som heter "IP -webkamera" for Android. Dette er en gratis app, og den er enkel å konfigurere.

Kjør appen, gå til "Videoinnstillinger" for å sette opp oppløsningen til bilder som appen vil gi. Trykk deretter på "Start server" (første bilde ovenfor). På bunnen av skjermen må du se ip -adressen til kameraet (se det andre bildet ovenfor). I nettleseren kan du skrive https://cam_ip_address/photo.jpg, så får du bildet fra ip -kamera! Skriv inn https://cam_ip_address/photoaf-j.webp

Fest til slutt kameraet i kjøleskapet (siste bilde ovenfor).

Trinn 4: Face API

Face API
Face API

Trinn Beskrivelse: I dette trinnet vil vi snakke om Microsofts Face API som gjør ansiktsgjenkjenning og identifiserer mennesker.

Microsofts Face API er en ansiktsgjenkjenningstjeneste, der vi kan analysere bilder og identifisere mennesker på dem.

Først trenger du Microsoft Azure -konto. Hvis du ikke har en kan du lage den gratis her.

For det andre, gå til https://portal.azure.com, klikk "Ny" på venstre side, skriv inn skjemaet "Cognitive Services APIs", velg det og klikk "Opprett". Eller du kan åpne denne lenken. Nå må du angi Navn på tjenesten din, velge abonnementstype, type API du trenger (i vårt tilfelle er det Face API), plassering, prisnivå, ressursgruppe og godta juridiske vilkår (se skjermbilde lagt til dette trinnet).

For det tredje klikker du på "Alle ressurser", velger deg Face API -tjenesten og ser bruksstatistikk, legitimasjon osv.

Face API -detaljer finner du her, eksempler på forskjellige programmeringsspråk er gitt. For dette prosjektet bruker vi python. Du kan lese dokumentasjon og lage ditt eget sett med funksjonalitet, eller du kan bruke den som er gitt her (dette er ikke det komplette settet med funksjonalitet levert av Microsoft, bare punktene som er nødvendige for dette prosjektet). Mine python -filer er vedlagt dette trinnet.

La oss gå til strukturen i arbeidet med Face API. For å bruke "Identifikasjon" -funksjonaliteten må vi lage et bibliotek med mennesker som bruker Face API -tjenesten til å gjenkjenne bildene som blir tatt av appen. Følg trinnene for å konfigurere det:

  1. Opprett en gruppe
  2. Legg til personer i denne gruppen
  3. Legg til ansikter til disse personene
  4. Toggruppe
  5. Send inn bilde med personen du vil identifisere (du må oppgi bilde og gruppe -ID der tjenesten vil lete etter kandidater)
  6. Resultat: Som svar får du en liste over kandidater som kan være på bildet du sendte inn.

Jeg har laget tre filer med spesifikk funksjonalitet som gjør det mulig å jobbe med grupper, enkeltpersoner og enkeltbilder:

  • PersonGroup.py - inneholder funksjoner som tillater: opprett gruppe, få informasjon om gruppe, få liste over alle gruppene dine, tren gruppe og få status for trening
  • Person.py - inneholder funksjoner som tillater: opprette person, få personinformasjon, liste alle personer i spesifisert gruppe, legge til ansikter til spesifisert person
  • Face.py - inneholder funksjoner som tillater: oppdage ansikt på bilde, identifisere person, få navn på identifisert person

I filen som heter "anerkjennelse.py" tilbyr jeg funksjoner som lar deg sjekke om bildet inneholder et ansikt og legge til ansikter på en spesifisert person (legger automatisk til ansikt fra mange bilder fra den angitte mappen).

Last ned filen som er vedlagt dette trinnet, pakk den ut, endre 'KEY' global variabel i disse tre filene: PersonGroup.py, Person.py og Face.py til din egen nøkkel som du finner: portal.azure.com> alle ressurser > ansikt -api -tjeneste (eller hvordan du kalte det)> kategorien nøkler. Du kan bruke hvilken som helst av de to tastene.

Merk: her skal vi trene Face API -tjenesten til å gjenkjenne mennesker, så følgende handlinger kan utføres fra hvilken som helst datamaskin (Raspberry Pi er ikke nødvendig for det) - endringer lagres på Microsofts server.

Etter å ha endret KEY, kjør anerkjennelse.py og skriv inn følgende kommando i python shell:

PersonGroup.create ("familie", 'fff-fff')) // du kan bruke ditt eget navn og ID for

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

Du må se data om gruppen du nettopp har opprettet. Skriv nå inn:

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

Nå får du person -ID. Lag en mappe med bilder av denne personen slik at alle bildene inneholder ansiktet til denne personen. Du kan bruke function detectFaceOnImages i anerkjennelse.py som viser deg på hvilke fotografier ansiktet er oppdaget. Kjør kommando nå:

addFacesToPerson ('mappe med bilder', 'person-ID som du fikk etter forrige kommando', 'fff-fff')

Deretter må vi trene tjenesten vår ved å angi følgende:

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

Nå er gruppen vår opplært og er klar til å identifisere en person.

For å sjekke person på bildet kan du:

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

Som svar får du en liste over kandidater og sannsynlighet som er på bildet.

Merk: hver gang du legger ansikter til en person eller person i en gruppe, må du trene gruppen!

Trinn 5: Node-rød konfigurasjon

Node-rød konfigurasjon
Node-rød konfigurasjon

Trinn Beskrivelse: I dette trinnet vil vi opprette Node-Red flyt som vil varsle deg om brudd på tilgangen til kjøleskapet ditt =)

Hvis Raspberry Pi kjører på Raspbian Jessie november 2015 eller nyere versjon, trenger du ikke å installere Node-Red, fordi den allerede er forhåndsinstallert. Du trenger bare å oppdatere den. Vennligst bruk manualen her.

Nå må vi installere Twilio-noden til Node-Red, slik at vi kan utløse en tekstmelding. Åpne terminalen og skriv inn:

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

Mer om Twilio -noden her. Etter det, kjør Node-Red ved å skrive inn i terminalen:

node-rød

Gå deretter til: https://127.0.0.1:1880/ - hvis du åpner nettleseren på Raspberry Pihttps:// {raspberry_pi_ip}: 1880/ - hvis du vil åpne Node -Red editor fra en annen datamaskin

For å vite ip -adressen til bringebær pi, bruk denne instruksjonen.

Nå må du finne Twilio-noden i listen over noder i Node-Red-editoren (vanligvis vises den etter 'sosial' gruppe).

Det er på tide å skape flyten!

Merk: du kan bruke flyt som er knyttet til dette trinnet, men ikke glem å konfigurere nodene: e -post, twitter og twilio. Les om det senere.

Vår flyt starter med "varsl" -node som godtar POST -forespørsel fra hovedprogrammet vårt med noen data om brudd på tilgang (eksempel på dataene finnes i kommentarenoden "om mottak av objekter"). Denne noden svarer umiddelbart med "Ok" -melding, så hovedprogrammet vet at dataene ble mottatt (Flow: /notify> response with Ok> response). Grønn node nederst med navn msg.payload er der for feilsøkingsformål: hvis noe ikke fungerer kan du bruke det.

Fra fistnode (/varsling) data spredt til "Data Topic" og "Image Topic" der emnene "data" og "image" ble lagt til henholdsvis.

I "kompiler" -noden mottar vi data (som vi får i løpet av det første trinnet) med "data" -emnet og et bilde med "image" -emnet (bildet er hentet fra /home/pi/image.jpg). Disse to meldingene skal samles til ett objekt, men de to objektene mottas på forskjellige tidspunkter! For å håndtere dette vil vi bruke "kontekst" -funksjonen som lar oss lagre data mellom funksjonskall.

Neste trinn er å sjekke om personen fra tilgangslisten vår er en fremmed (checkConditions -node). Det er et "TrustedPerson" -felt i dataene vi mottar: "true" betyr at vi kjenner denne personen, men han/hun krenket tilgangstillatelsen, "false" betyr at personen er en fremmed.

Når resultatet er “sant” sender vi varsel til twitter, twilio og e -post; når resultatet er "usant" - bare e -post og twilio. Vi lager et objekt for e -post med en melding, vedlagt bilde og e -postemne, et objekt for twilio med en melding. For twitter legger vi til data i et objekt hvis "TrustedPerson" er sant. Send deretter disse tre objektene til tre forskjellige noder.

Merk: Hvis den følgende noden ikke skulle motta en melding, sender vi bare "null" til den.

Det er på tide å konfigurere noder for varsling!

Twitter Legg til "twitter" -node i flyten. Åpne den ved å dobbeltklikke. Klikk på blyanten ved siden av "Twitter ID". Klikk deretter på "Klikk her for å autentisere med Twitter". Skriv inn Twitter-kontoen din og gi Node-Red nødvendige tillatelser.

Legg til e -postnode i flyten. Hvis du ikke bruker Gmail, må du endre data i følgende felt - "Server" og "Port" (du kan finne hvilken server og port du bør bruke på hjelpesidene til e -postagenten din). Ellers må du ikke endre disse Enger.

  • Til> e -postadresse som meldingene skal sendes til
  • Userid> pålogging fra e -posten din (kanskje det samme som "Til" -feltet)
  • Passord> passord fra e -postkontoen din
  • Navn> navn på denne noden

Twilio Gå til https://www.twilio.com/try-twilio og registrer en konto. Bekreft det. Gå til https://www.twilio.com/console. Klikk på "Telefonnumre" (stort # -ikon) og opprett et gratisnummer. Hvis du er utenfor USA, må du legge til GEO-tillatelser, gå til https://www.twilio.com/console/sms/settings/geo-pe… og legg til landet ditt.

Gå nå til Node-Red editor, legg til Twilio-noden, dobbeltklikk på den for å konfigurere og fylle ut alle feltene:

  • Legitimasjon> Bruk lokal legitimasjon
  • Twilio> rediger

    • Kontosid> ta herfra
    • Fra> skriv inn det virtuelle nummeret du opprettet
    • Token> ta herfra
    • Navn> Twilio
  • Utgang> SMS
  • Til> telefonnummeret ditt
  • Navn> navn på denne noden.

Klikk på Distribuer

Nå er strømmen din klar! Du kan teste den ved å sende POST -forespørsel med spesifisert objekt!

Trinn 6: Kompilering av hele prosjektet

Samler hele prosjektet
Samler hele prosjektet
Samler hele prosjektet
Samler hele prosjektet

Trinn Beskrivelse: I dette trinnet vil vi sette sammen alle delene og få dem til å fungere som et eget system.

Ved dette trinnet må du:

  1. Konfigurer den gamle smarttelefonen som ip -kamera
  2. Ha fungerende sensorer
  3. Utdannet Microsofts Face API
  4. Konfigurert node-rød flyt

Nå må vi forbedre koden som vi skrev i trinn 2. Nærmere bestemt funksjonsprosess () som kalles når personen åpner døren. I denne funksjonen vil vi gjøre følgende:

  1. Få bilde fra ip kamera og lagre det i "/home/pi/" med navnet "image.jpg" (funksjon "fromIpCam" i filen "getImage")
  2. Få navnet på personen på bildet (funksjon "checkPerson" i filen "gjenkjenning")
  3. Kontroller tilgangstillatelsen for den personen (funksjon "sjekk" i filen "tilgang")
  4. Basert på resultatet av “sjekk” -funksjonen komponere melding
  5. Send sammensatt melding til Node-Red (funksjon “toNodeRed” i filen “sendData”)

Merk: For å se hele koden til nevnte funksjoner, vennligst last ned zip -fil vedlagt dette trinnet.

Om funksjon “fromIpCam”. Denne funksjonen gjør GET -forespørselen til ip -kameraet ditt, får fokusert bilde som svar og lagrer det på banen spesifisert av deg. Du må oppgi kamera -ip -adresse til denne funksjonen.

Om funksjon “checkPerson”. Funksjonen får banen til bildet og gruppen der du vil søke person fra bildet som parametere. For det første oppdager det et ansikt på det medfølgende bildet (fil Face.py, funksjon "detekter"). Som svar får den ID hvis ansiktet som ble oppdaget. Deretter kaller den “identifiser” -funksjonen (Face.py -filen) som finner lignende personer i en spesifisert gruppe. Som svar får den en person -ID hvis personen blir funnet. Deretter kaller du funksjonen "person" (fil Person.py) med person -ID som parameter, "person" -funksjonen returnerer person med spesifisert ID, vi får navn på person og returnerer den.

Om funksjonen "sjekk". Denne funksjonen er plassert i filen "tilgang" der også "tilgangslisten" plasseres som en global variabel (du kan endre den som du vil). Få navnet på personen fra forrige funksjon, funksjon "sjekk", sammenlign denne personen med tilgangslisten og returner resultatet.

Merk: hele prosjektet er vedlagt neste trinn.

Trinn 7: Konklusjon

I dette trinnet festet jeg hele prosjektet som du skulle pakke ut og plassere til din Raspberry Pi.

For å få dette prosjektet til å fungere, kjør filen "main.py".

Hvis du styrer Raspberry Pi via SSH må du kjøre to programmer fra ett skall: python-program og Node-Red. Skriv inn terminalen følgende:

node-rød

Trykk "Ctrl + Z" og skriv:

arbeidsplasser

Du har sett Node-Red-prosessen. Se på ID for prosessen og skriv:

bg

Nå må Node-Red begynne å jobbe i bakgrunnen. Gå deretter til katalogen med prosjektet ditt og kjør hovedprogrammet:

python3 main.py

Merk: ikke glem å endre KEY i python-filer (trinn 4) og legitimasjon i Node-Red flow (trinn 5)

Ferdig! Kjøleskapet ditt er trygt!

Jeg håper du likte denne uoverkommelige! Legg gjerne igjen tankene dine i kommentarene.

Jeg setter pris på om du stemmer på prosjektet mitt =)

Takk skal du ha!

Anbefalt: