Innehållsförteckning:

Ansiktsigenkänningssystem för ett kylskåp med hallon Pi: 7 steg (med bilder)
Ansiktsigenkänningssystem för ett kylskåp med hallon Pi: 7 steg (med bilder)

Video: Ansiktsigenkänningssystem för ett kylskåp med hallon Pi: 7 steg (med bilder)

Video: Ansiktsigenkänningssystem för ett kylskåp med hallon Pi: 7 steg (med bilder)
Video: Возведение модульного военно-полевого лагеря армии Китая 2024, Juni
Anonim
Image
Image
Ansiktsigenkänningssystem för ett kylskåp med hallon Pi
Ansiktsigenkänningssystem för ett kylskåp med hallon Pi
Ansiktsigenkänningssystem för ett kylskåp med hallon Pi
Ansiktsigenkänningssystem för ett kylskåp med hallon Pi

När jag surfar på internet har jag upptäckt att priserna för säkerhetssystem varierar från 150 $ till 600 $ och högre, men inte alla lösningar (även de mycket dyra) kan integreras med andra smarta verktyg hemma! Till exempel kan du inte ställa in en säkerhetskamera vid din ytterdörr så att den automatiskt öppnar dörren för dig eller dina vänner!

Jag har bestämt mig för att göra en enkel, billig och kraftfull lösning som du kan använda var som helst! Det finns många manualer om hur man skapar billiga och hemmagjorda säkerhetssystem, men jag vill demonstrera riktigt icke -privat tillämpning av dessa - säkerhetssystem för ett kylskåp med ansiktsigenkänning!

Hur fungerar det? IP -kameran placerad på toppen av ett kylskåp, sensorer (två knappar) upptäcker när en person öppnar dörren till kylskåpet, efter det tar Raspberry Pi en bild av den personen (med IP -kamera) och skickar den sedan till Microsoft Face API att analysera bilden och få namnet på personen. Med denna information skannar Raspberry Pi "åtkomstlistan": om personen inte har tillåtelse att komma åt kylskåpet meddelar Raspberry ägaren via e -post, sms och twitter! (Se bilderna ovan)

Varför? Systemet låter dig styra dina familjemedlemmar, särskilt när de är på en diet eller kämpar med att inte äta efter midnatt! Eller använd det bara för skojs skull!

Dessutom kan du faktiskt ställa in kameran vid din ytterdörr och konfigurera systemet för att öppna dörren när du, dina familjemedlemmar eller vänner närmar dig. Och detta är inte slutet! Möjligheterna för applikationen är oändliga!

Låt oss börja!

Steg 1: Förberedelse

Förberedelse
Förberedelse

Du kommer behöva:

  • Raspberry Pi 3 (du kan använda äldre versioner, men tredje generationen har Wi-Fi, så det är väldigt bekvämt)
  • Knappar
  • Trådar
  • Gammal smartphone eller Raspberry Pi -kamera

Det första du måste göra är att konfigurera din Raspberry Pi. Detaljerade instruktioner om hur du gör kan du hitta här och här, men vi kommer att täcka de viktigaste stegen i denna handbok.

  1. Ladda ner Win32 DiskImager härifrån (om du använder Windows)
  2. Ladda ner SD Formatter härifrån
  3. Sätt i SD -kortet i din dator och formatera det med SD -format
  4. Ladda ner Raspbian -bild härifrån (Välj "Raspbian Jessie med pixel")
  5. Kör Win32 DiskImager, välj ditt SD -kort, ange sökvägen till Raspbian -bilden, klicka på "Skriv"
  6. Sätt i SD -kortet i din Raspberry Pi och slå på strömmen!

Dessutom måste du konfigurera din Raspberry Pi för att få åtkomst till systemet via SSH. Det finns massor av instruktioner på internet, du kan till exempel använda detta, eller så kan du ansluta bildskärm och tangentbord.

Nu är din Pi konfigurerad och du är redo att fortsätta!

Steg 2: Skapa en sensor

Gör en sensor
Gör en sensor
Gör en sensor
Gör en sensor
Gör en sensor
Gör en sensor

Steg Beskrivning: I det här steget kommer vi att göra en sensor som upptäcker när personen öppnar dörren till ett kylskåp och aktiverar Raspberry Pi.

För att konfigurera det behöver du de två knapparna som du ursprungligen förberett. Den första knappen upptäcker när dörren öppnas, den andra knappen upptäcker när dörren öppnas till den punkt när vi tar ett foto av en person.

  1. Lödtrådar till knappar.
  2. Fäst den första knappen på dörren till kylskåpet så att den trycks in när dörren är stängd (se bild ovan)
  3. Fäst den andra knappen på dörren till kylskåpet enligt bilden ovan. Denna knapp måste alltid släppas, förutom när dörren når den punkt då systemet tar en bild. För att ställa in det måste du fästa något i ditt kylskåp så att den här knappen trycks in när luckan öppnas i önskad omfattning (se bilderna ovan).
  4. Fäst ledningar från knapparna till Raspberry Pi: första knappen till GPIO 23 och marken, den andra knappen till GPIO 24 och jord (Se fritz -diagram).

Obs: Jag använder BCM pinout (inte Board), mer om skillnaden läs här.

När du är ansluten till din Raspberry Pi via SSH skriver du terminalen för att köra python -skalet:

python3

Om du ansluter bildskärm och tangentbord till Raspberry Pi är det bara att köra "Python 3 IDLE" från menyn.

Nästa steg är att få Raspberry Pi att fungera med knapparna. Vi kommer att fästa speciella lyssnare till GPIO 23 och 24 stift, som lyssnar efter "stigande kant" -händelse och "fallande kant" -händelse på dessa stift. I händelse av händelsen kommer lyssnarna att ringa till de funktioner som vi har definierat. “Stigande kant” betyder att knappen trycktes ned och nu släpptes (första knappen - dörren öppnas),”fallande kant” betyder att knappen släpptes och nu trycktes (den andra knappen - dörren har nått specifik punkt). Mer om knappfunktionen - här.

Först importera bibliotek som ger oss tillgång till stiften:

importera RPi. GPIO som GPIO

Definiera nu specialfunktioner som kommer att kallas när händelse utlöses:

def sensor1 (kanal): print (“sensor 1 triggered”) def sensor2 (channel): print (“sensor 2 triggered)

Ange pinout -typ:

GPIO.setmode (GPIO. BCM)

Konfigurera stift:

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

Bifoga lyssnare:

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 testa det! Om du trycker på knappen 1 ser du ett meddelande i terminalen “sensor 1 triggered”, knappen 2 ger dig meddelandet “sensor 2 triggered”.

Obs: Glöm inte att ringa följande funktion när du är klar med att experimentera: GPIO.cleanup ().

Låt oss ställa in ytterligare en funktion som kallas när dörren når den punkt där vi tar ett foto! Du kan göra det själv eller använda min implementering som jag har bifogat här (sensor.py)

Obs: sensor.py används endast för teständamål, filerna med full funktionalitet har jag bifogat till det sista steget.

Steg 3: Konfigurera IP -kamera

Konfigurera IP -kamera
Konfigurera IP -kamera
Konfigurera IP -kamera
Konfigurera IP -kamera
Konfigurera IP -kamera
Konfigurera IP -kamera

Stegbeskrivning: Nu ska vi konfigurera den gamla smarttelefonen som en IP -kamera.

Att använda smartphone som en IP -kamera sker via app. Det finns olika appar för Android, iOS, Windows Phone som du kan använda. Jag valde den som heter "IP -webbkamera" för Android. Detta är en gratis app och det är enkelt att konfigurera.

Kör appen, gå till "Videoinställningar" för att ställa in upplösning för foton som appen kommer att ge. Tryck sedan på "Start server" (första bilden ovan). Längst ner på skärmen måste du se kamerans ip -adress (se andra bilden ovan). I webbläsaren kan du skriva https://cam_ip_address/photo-j.webp

Slutligen fäst kameran i kylskåpet (sista bilden ovan).

Steg 4: Face API

Face API
Face API

Stegbeskrivning: I det här steget kommer vi att prata om Microsofts Face API som gör ansiktsigenkänning och identifierar människor.

Microsofts Face API är en tjänst för ansiktsigenkänning, genom vilken vi kan analysera foton och identifiera personer på dem.

Först behöver du Microsoft Azure -konto. Om du inte har en kan du skapa den gratis här.

För det andra, gå till https://portal.azure.com, klicka på "Ny" till vänster, skriv in formuläret "Cognitive Services APIs", välj det och klicka på "Skapa". Eller så kan du öppna den här länken. Nu måste du ange namnet på din tjänst, välja typ av prenumeration, typ av API som du behöver (i vårt fall är det Face API), plats, prisnivå, resursgrupp och godkänna juridiska villkor (se skärmdump som läggs till i detta steg).

För det tredje, klicka på "Alla resurser", välj din Face API -tjänst och se användningsstatistik, referenser etc.

Face API -detaljer hittar du här, exempel på olika programmeringsspråk finns. För detta projekt använder vi python. Du kan läsa dokumentation och skapa din egen uppsättning funktioner eller så kan du använda den som tillhandahålls här (detta är inte den fullständiga uppsättningen funktionalitet som tillhandahålls av Microsoft, bara de punkter som behövs för detta projekt). Mina pythonfiler är kopplade till detta steg.

Låt oss gå vidare till strukturen för arbetet med Face API. För att kunna använda "Identifiering" -funktionen måste vi skapa ett bibliotek med människor som använder Face API -tjänsten som känner igen de foton som tas av appen. Följ stegen för att konfigurera den:

  1. Skapa en grupp
  2. Lägg till personer i den här gruppen
  3. Lägg till ansikten till dessa personer
  4. Tåggrupp
  5. Skicka foto med en person som du vill identifiera (du måste ange foto- och grupp -id där tjänsten letar efter kandidater)
  6. Resultat: Som svar får du en lista över kandidater som kan vara med på det foto du skickade in.

Jag har skapat tre filer med specifik funktionalitet som gör det möjligt att arbeta med grupper, ensamstående personer och enstaka foton:

  • PersonGroup.py - innehåller funktioner som tillåter: skapa grupp, få information om grupp, få lista över alla dina grupper, träna grupp och få status för utbildning
  • Person.py - innehåller funktioner som tillåter: skapa person, få personinformation, lista alla personer i angiven grupp, lägga till ansikten till angiven person
  • Face.py - innehåller funktioner som tillåter: identifiera ansikte på bild, identifiera person, få namn på identifierad person

I filen "igenkänning.py" tillhandahåller jag funktioner som gör att du kan kontrollera om bilden innehåller ett ansikte och lägga till ansikten till angiven person (lägger automatiskt till ansikte från många bilder från angiven mapp).

Ladda ner filen bifogad detta steg, packa upp den, ändra 'KEY' global variabel i dessa tre filer: PersonGroup.py, Person.py och Face.py till din egen nyckel som du kan hitta: portal.azure.com> alla resurser > face api -tjänst (eller hur du kallade det)> tangenter -fliken. Du kan använda vilken som helst av de två tangenterna.

Obs: här ska vi träna Face API -tjänsten för att känna igen människor, så följande åtgärder kan göras från vilken dator som helst (Raspberry Pi behövs inte för det) - ändringar sparas på Microsofts server.

Efter att ha ändrat KEY, kör igenkänning.py och ange följande kommando i python -skalet:

PersonGroup.create ("familj", 'fff-fff')) // du kan använda ditt eget namn och id för

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

Du måste se data om gruppen du just skapat. Ange nu:

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

Nu får du person -ID. Skapa mapp med bilder på den här personen så att alla bilder innehåller ansiktet på den här personen. Du kan använda function detectFaceOnImages i igenkänning.py som visar dig på vilket foton ansikte detekteras. Kör nu kommandot:

addFacesToPerson ('mapp med bilder', 'person-ID som du fick efter föregående kommando', 'fff-fff')

Sedan måste vi träna vår service genom att ange följande:

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

Nu är vår grupp utbildad och är redo att identifiera en person.

För att kontrollera person på bilden kan du:

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

Som svar får du en lista över kandidater och sannolikhet som finns på fotot.

Obs! Varje gång du lägger till ansikten till en person eller person i en grupp måste du träna gruppen!

Steg 5: Nod-röd konfiguration

Nod-röd konfiguration
Nod-röd konfiguration

Stegbeskrivning: I det här steget skapar vi Node-Red-flöde som meddelar dig om åtkomstöverträdelsen till ditt kylskåp =)

Om din Raspberry Pi körs på Raspbian Jessie november 2015 eller senare version behöver du inte installera Node-Red, eftersom den redan är förinstallerad. Du behöver bara uppdatera den. Använd manualen här.

Nu måste vi installera Twilio-noden till noden-röd, så vi kan utlösa ett textmeddelande. Öppna terminalen och skriv in:

cd ~/.node-rednpm installera nod-röd-nod-twilio

Mer om Twilio -nod här. Kör sedan Node-Red genom att skriva in i terminalen:

nod-röd

Gå sedan till: https://127.0.0.1:1880/ - om du öppnar webbläsaren på din Raspberry Pihttps:// {raspberry_pi_ip}: 1880/ - om du vill öppna Node -Red editor från en annan dator

För att veta ip -adressen till hallon pi, använd denna instruktion.

Nu måste du hitta Twilio-noden i listan över noder i din Node-Red-editor (vanligtvis visas den efter 'social' grupp).

Det är dags att skapa flödet!

Obs: du kan använda mitt flöde som bifogas detta steg, men glöm inte att konfigurera noder: e -post, twitter och twilio. Läs om det senare.

Vårt flöde börjar med "meddela" -nod som accepterar POST -begäran från vårt huvudprogram med vissa uppgifter om åtkomstöverträdelse (exempel på data finns i kommentarnoden "om att ta emot objekt"). Denna nod svarar omedelbart med "Ok" -meddelande, så huvudprogrammet vet att data mottogs (Flöde: /meddela> svar med Ok> svar). Grön nod längst ner med namnet msg.payload finns där för felsökningsändamål: om något inte fungerar kan du använda det.

Från knytnodsnod (/meddela) data som sprids till "Data Topic" och "Image Topic" där ämnen "data" respektive "bild" läggs till respektive.

I noden "kompilera" tar vi emot data (som vi får under det första steget) med ämnet "data" och en bild med "bild" -ämnet (bilden är hämtad från /home/pi/image.jpg). Dessa två meddelanden bör sammanställas till ett objekt, men de två objekten tas emot vid olika tidpunkter! För att hantera detta kommer vi att använda "kontext" -funktionen som gör att vi kan lagra data mellan funktionskallelser.

Nästa steg är att kontrollera om personen från vår åtkomstlista eller om det är en främling (checkConditions -nod). Det finns ett "TrustedPerson" -fält i de data vi mottar: "true" betyder att vi känner den här personen, men han/hon kränkte åtkomsttillståndet, "false" betyder att personen är en främling.

När resultatet är”sant” skickar vi meddelande till twitter, twilio och e -post; när resultatet är "falskt" - bara e -post och twilio. Vi skapar ett objekt för e -post med ett meddelande, bifogad bild och e -postämne, ett objekt för twilio med ett meddelande. För twitter lägger vi till data till ett objekt om "TrustedPerson" är sant. Skicka sedan dessa tre objekt till tre olika noder.

Obs! Om följande nod inte skulle ta emot ett meddelande skickar vi bara "null" till den.

Det är dags att konfigurera noder för avisering!

Twitter Lägg till "twitter" -nod i flödet. Öppna den genom att dubbelklicka. Klicka på pennan bredvid "Twitter ID". Klicka sedan på "Klicka här för att autentisera med Twitter". Ange ditt twitterkonto och ge Node-Red nödvändiga behörigheter.

EmailAdd "email" -nod till flödet. Om du inte använder Gmail måste du ändra data i följande fält - "Server" och "Port" (du kan hitta vilken server och port du ska använda på hjälpsidorna i din e -postagent) annars kan du inte ändra dessa fält.

  • Till> e -postadress till vilken meddelanden kommer att skickas
  • Userid> inloggning från din e -post (kanske samma som fältet "Till")
  • Lösenord> lösenord från ditt e -postkonto
  • Namn> namn för denna nod

Twilio Gå till https://www.twilio.com/try-twilio och registrera ett konto. Verifiera det. Gå till https://www.twilio.com/console. Klicka på "Telefonnummer" (stor # -ikon) och skapa ett gratisnummer. Om du befinner dig utanför USA måste du lägga till GEO-behörigheter, gå till https://www.twilio.com/console/sms/settings/geo-pe… och lägg till ditt land.

Gå nu till Node-Red-redigeraren, lägg till Twilio-noden, dubbelklicka på den för att konfigurera och fylla i alla fält:

  • Uppgifter> Använd lokala referenser
  • Twilio> redigera
    • KontosID> ta härifrån
    • Från> skriv in virtuellt nummer som du skapade
    • Token> ta härifrån
    • Namn> Twilio
  • Utmatning> SMS
  • Till> ditt telefonnummer
  • Namn> namn för denna nod.

Klicka på Distribuera

Nu är ditt flöde klart! Du kan testa det genom att skicka POST -begäran med angivet objekt!

Steg 6: Sammanställning av hela projektet

Sammanställer hela projektet
Sammanställer hela projektet
Sammanställer hela projektet
Sammanställer hela projektet

Stegbeskrivning: I detta steg kommer vi att sätta ihop alla delar och få dem att fungera som ett separat system.

I detta steg måste du:

  1. Konfigurera gammal smartphone som ip -kamera
  2. Ha fungerande sensorer
  3. Utbildad Microsofts Face API
  4. Konfigurerat Node-Red-flöde

Nu måste vi förbättra koden som vi skrev i steg 2. Mer specifikt funktionsprocess () som kallas när personen öppnar dörren. I denna funktion kommer vi att göra följande:

  1. Hämta bilden från ip -kameran och spara den i "/home/pi/" med namnet "image.jpg" (funktion "fromIpCam" i filen "getImage")
  2. Få namnet på personen på den bilden (funktion "checkPerson" i filen "igenkänning")
  3. Kontrollera åtkomstbehörighet för den personen (funktion "kontrollera" i filen "åtkomst")
  4. Baserat på resultatet av”check” -funktionen komponera meddelande
  5. Skicka komponerat meddelande till Node-Red (funktion "toNodeRed" i filen "sendData")

Obs! För att se hela koden för nämnda funktioner, ladda ner zip -filen som bifogas detta steg.

Om funktionen "fromIpCam". Denna funktion gör GET -begäran till din ip -kamera, får fokuserad bild som svar och sparar den på sökväg som du har angett. Du måste ange kamerans ip -adress till den här funktionen.

Om funktionen "checkPerson". Funktionen får sökväg till bild och grupp där du vill söka person från fotot som parametrar. För det första detekterar det ett ansikte på den tillhandahållna bilden (fil Face.py, funktion "detektera"). Som svar får det id om ansikte som detekterades. Sedan kallar den “identifiera” -funktionen (Face.py -fil) som hittar liknande personer i den angivna gruppen. Som svar får det en person -id om personen hittas. Ring sedan funktionen "person" (fil Person.py) med person -ID som parameter, "person" -funktion returnerar person med angivet ID, vi får namn på person och returnerar det.

Om funktion "kontroll". Denna funktion placeras i filen "access" där också "åtkomstlista" placeras som en global variabel (du kan ändra den som du vill). Få namnet på person från föregående funktion, funktion "kontrollera" jämför denna person med åtkomstlista och returnera resultatet.

Obs! Hela projektet bifogas nästa steg.

Steg 7: Slutsats

I det här steget bifogade jag hela projektet som du ska packa upp och placera på din Raspberry Pi.

För att få detta projekt att fungera körs "main.py" -filen.

Om du styr Raspberry Pi via SSH måste du köra två program från ett skal: pythonprogram och Node-Red. Skriv in terminalen följande:

nod-röd

Tryck "Ctrl + Z" och skriv:

jobb

Du har sett Node-Red-processen. Titta på processens ID och typ:

bg

Nu måste Node-Red börja arbeta i bakgrunden. Gå sedan till katalogen med ditt projekt och kör huvudprogrammet:

python3 main.py

Obs: glöm inte att ändra KEY i pythonfiler (steg 4) och referenser i Node-Red-flöde (steg 5)

Gjort! Ditt kylskåp är säkert!

Jag hoppas att du tyckte om detta otrevliga! Lämna gärna dina tankar i kommentarer.

Jag skulle uppskatta om du röstar på mitt projekt =)

Tack!

Rekommenderad: