Innehållsförteckning:

Dörrklocka med ansiktsigenkänning: 7 steg (med bilder)
Dörrklocka med ansiktsigenkänning: 7 steg (med bilder)

Video: Dörrklocka med ansiktsigenkänning: 7 steg (med bilder)

Video: Dörrklocka med ansiktsigenkänning: 7 steg (med bilder)
Video: Smarta Dörrklockor och Dörrlås – Hur Smarta är de? 2024, Juli
Anonim
Dörrklocka med ansiktsigenkänning
Dörrklocka med ansiktsigenkänning

Motivering

Nyligen har det skett en våg av rån i mitt land som riktar sig till äldre i deras egna hem. Vanligtvis beviljas tillträde av de åkande själva eftersom besökarna övertygar dem om att de är vårdgivare/sjuksköterskor. Det är bara bortom ord, hur arg och ledsen dessa berättelser får mig att känna. Hemmet borde vara din första fristad och ännu mer om du redan befinner dig i en sårbar position när du är ute. Med detta i åtanke startade jag detta projekt.

Allmän information

Dörrklocksystemet är främst avsett för äldre eller synskadade och är ganska rakt framåt i sin funktion. Kort sagt, dörrklockans strömbrytare utlöser kameran för att få tag på bilder. Därefter upptäcks ansikten i filmen och matchas med en vitlista och svartlista. Passageraren får tydlig visuell återkoppling genom en tydlig trafikljusvisning. Härmed indikerar det gröna, gula eller röda ljuset att personen (e) finns på vitlistan, okänd för systemet respektive på svartlistan. Om det gula eller röda ljuset utlöses skickas fotot av en Telegram -bot för att informera/varna en släkting eller vaktmästare.

Expertnivå

Projektet inrättades för entusiaster som är särskilt nyfikna på att använda datorsyn och artificiell intelligens. Denna instruerbara är skriven för en publik av nybörjare, så oroa dig inte om du inte har någon erfarenhet! Dessutom kan projektet också vara intressant för mer erfarna tillverkare eftersom pipelinen är organiserad på ett sätt så att du kan utöka det med din egen datorsyn och idéer för ansiktsigenkänning utan mycket krångel.

Steg 1: Material

Material
Material

Produktlista med minimikrav:

Produkt Länk Kommentar
Raspberry Pi 3b RPi Länk visar RPi 4 eftersom den har mycket bättre prestanda och nästan lika pris som RPi 3b.
Micro SD Amazon Ett micro SD -kort på 16 GB eller större gör jobbet. Men 16 GB -korten på Amazon är nu i stort sett samma pris som 32 GB -korten.
Raspberry Pi -kamera Amazon Kamera v1 är billigare, men v2 är bättre och stöds längre.
15 -stifts FPC flexkabel Amazon Längden beror faktiskt på omständigheterna för att göra detta projekt. Om du bara vill bygga en prototyp gör den ursprungliga flexkabeln jobbet.
Strömförsörjning 5v micro usb Adafruit Den här har aldrig svikit! Bra kvalitet. (Inte på bilden)
Arkadknappar med inbyggd LED Amazon Välj den storlek du vill ha, men CAD -designen är baserad på 60 mm knappar
Motstånd Amazon Du behöver bara ett par 1k och 100 ohm motstånd. Vanliga 1/4W är bra.
Kondensatorer 0,1 uF Amazon Tre kondensatorer behövs. (Inte på bilden)
Hopptrådar / bandkabel AmazonAmazon Om du vill spara dig några pengar kan du också använda en gammal diskettkabel (se bild).
Krymprör / Eltejp AmazonAmazon

Verktyg som behövs:

Verktyg Grundläggande? Kommentar
Lödkolv Ja
Multimeter Ja
Wire stripper Ja Eller så kan du använda en kniv/sax.
Laserskärare Nej
3d skrivare Nej
Klämmor Nej Användbart för att hålla lådan ihop i testfasen.

Anmärkningar:

För att öka tillgängligheten till projektet bestämde jag mig för att utveckla det med en Raspberry Pi 3b. Även om det ökar tillgängligheten minskar det applikationens möjligheter eftersom RPi: er inte är så snabba. Om du letar efter en enda kortdator som är snabbare kanske du vill ta en titt på NVIDIA Jetson Nano

Steg 2: Kabeldragning

Kabeldragning
Kabeldragning
Kabeldragning
Kabeldragning
Kabeldragning
Kabeldragning

Det schematiska diagrammet är mest informativt för detta steg och är ganska självförklarande. Om du är ny på elektronik kan du använda legendbilden. Komponentens värde (om tillämpligt) anges i det schematiska diagrammet. Bilderna kan hjälpa till att se hur jag bygger kretsen. I princip kopplade jag alla komponenter så nära arkadknappen som möjligt vilket resulterar i en tydlig översikt över vad som händer.

Anmärkningar:

  • Jag gillar verkligen att använda bandkabelanslutningar, eftersom de är mycket robustare än att använda enkla bygelstrådar.
  • Som föreslagit har jag använt en rensad bandkabel från en gammal dator. Detta är dock lite knepigt eftersom du måste manuellt hävda konfigurationen av kabeln. I detta projekt till exempel fick jag reda på att några hål var anslutna till varandra (antagligen använt som mark för den ursprungliga applikationen). Därför var jag tvungen att skaffa en annan kabel senare som du kan se på bilderna.

Steg 3: Bygg höljet

Bygga höljet
Bygga höljet
Bygga höljet
Bygga höljet
Bygga höljet
Bygga höljet
Bygga höljet
Bygga höljet

Kamerahölje

Många höljen för picamera kan laddas ner fritt från internet. Så jag väljer att inte uppfinna hjulet på nytt och välja ett grundläggande men snyggt hölje från internet: thingiverse.com - Raspberry pi kamerahölje/hölje. (Shout-out till designern VGer.)

Trafikljushölje

För trafikljushöljet har jag designat en liten låda i Autodesk Fusion 360 (som kan laddas ner fritt, se Anmärkningar) som passar all hårdvara. I bilagan kan du hitta filen som jag har skickat till mitt lokala laserskärningsföretag. Härmed är konstruktionen baserad på en 6 mm plåttjocklek. Men om du vill justera saker kan du komma åt alla typer av filformat med denna länk. Som visas på bilderna kan du också använda en kartong om du inte har tillgång till en laserskärare. Jag använde kartongen på bilden för prototyper och det fungerar som en charm.

Monteringen är ganska rak framåt:

  1. Montera Arcade -omkopplarna.
  2. Se till att hålla ledningarna för dörrklockan fria.
  3. Anslut bandkabeln till RPi.
  4. Skruva fast RPi på bottenpanelen.
  5. Anslut dörrklockans trådar till en trådkontakt och montera den även på bottenpanelen.
  6. Anslut Picamera till RPi.
  7. Borra ett hål i en av sidopanelerna för dörrklockans omkopplingstråd och RPi -strömkabeln.

Kabelkontakten används som en monteringspunkt för dörrklockans omkopplare, så att den kan fästas på en befintlig dörrklocka senare. Allt är nu på plats och kan limmas ihop. Men du kanske först vill slutföra nästa steg för att se till att allt fungerar som det ska vara.

Anmärkningar:

Autodesk Fusion 360 är fritt tillgängligt för amatörer! Om du vill få ditt exemplar, besök den här länken: autodesk.com - Fusion 360 For Hobbyists. Det finns vissa termer, så se till att läsa och tillämpa dem. Det var mitt första projekt med Fusion 360 och jag har inte mycket erfarenhet av att använda CAD -programvara, men jag måste säga att jag verkligen gillar programvaran och alla ytterligare verktyg som följer med Fusion 360

Steg 4: Konfigurera kameran

Konfigurera kameran
Konfigurera kameran
Konfigurera kameran
Konfigurera kameran
Konfigurera kameran
Konfigurera kameran

Det antas att du har Raspbian installerat och att det körs i GUI -läge. Om du inte har Raspbian installerat än kan du följa den här artikeln: raspberrypi.org - Installera operativsystemavbildningar. Om du startar Raspbian bör du se ett skrivbord som visas på bilderna.

Låt oss konfigurera kameran på RPi och se om den fungerar! Metoden som beskrivs här är direkt från raspberrypi.org - Documentation. Låt oss först uppdatera till de senaste paketen (inklusive kamerans firmware) genom att utföra följande kommandon i ett terminalfönster (se bilder):

sudo apt uppdatering

sudo apt full-upgrade

Därefter måste kameran aktiveras med följande kommando:

sudo raspi-config

I menyn, gå till 5. Gränssnittsalternativ -> P1 -kamera. Välj att aktivera kameran och starta om RPi genom att köra:

starta om

Kameran ska nu vara korrekt konfigurerad. Det kan testas genom att öppna ett terminalfönster och köra:

raspistill -v -o /home/pi/test.jpg

Bilden sparas på: /home /pi.

Steg 5: Konfigurera Docker

Konfigurera Docker
Konfigurera Docker
Konfigurera Docker
Konfigurera Docker
Konfigurera Docker
Konfigurera Docker
Konfigurera Docker
Konfigurera Docker

För att undvika beroende och installationsfel bestämde jag mig för att bygga en anpassad Docker -bild för detta projekt (se wikipedia.org - Docker). Om du aldrig har använt eller hört talas om Docker, oroa dig inte, jag förklarar steg för steg hur du använder det i det här projektet. Det är faktiskt superenkelt! Om du vill köra det här projektet på en lokal installation (istället för i en Docker -behållare) kommer jag att ge dig några tips. Men det rekommenderas starkt att använda Docker -bilden. När allt kommer omkring bygger jag det för att göra det enkelt för dig att köra detta projekt!

Vad är Docker?

Obs! Den här delen innehåller lite bakgrundsinformation om Docker, som kan hoppas över om du bara vill köra koden.

Detta projekt är första gången jag använde Docker och det är helt enkelt fantastiskt! Kanske har du hört talas om virtualenv eller Anaconda för Python? Tja, Docker är ganska lika i den meningen att du enkelt kan hantera paketversioner och köra olika Python -versioner på ett värdsystem med hjälp av en annan miljö (eller behållare som det kallas i Docker). Men, jämfört med virtualenv och Anaconda, är Docker mycket kraftfullare eftersom det inte är begränsat till att bara innehålla Python -paket. I en Docker -behållare kan du faktiskt också installera och hantera paketen för ett önskat operativsystem. Tänk till exempel på en webbplats du vill migrera som kör ett Python -webbramverk (t.ex. Django) med en databas (t.ex. MySQL). Utan en Docker -behållare måste du installera alla paket på den nya servern, en process som är mycket benägen för fel och buggar. Å andra sidan, när din webbplats har byggts i Docker är migrering i princip lika enkelt som att flytta bildfilen/filerna till den nya servern och köra den/dem. Som du kan föreställa dig är Docker också mycket användbart för projekt på Instructables;)! Om du vill veta mer om Docker, kolla in deras webbplats: docker.org - Docker: Enterprise Container Platform. Låt oss nu komma igång med Docker!

Installera Docker

Installera Docker genom att köra:

curl -sSL https://get.docker.com | sh

Därefter läggs användaren till i användargruppen 'docker', som ger rättigheterna att köra Docker. Detta görs av:

sudo usermod -aG docker $ USER

Nu borde du kunna köra Docker. Detta kan valideras genom att köra världsbilden:

docker run hej-världen

Slutligen, låt oss dra Docker -bilden som innehåller alla beroenden som behövs för att köra dörrklockans Python -skript. Denna process kan ta ett tag eftersom bilden är ganska stor (~ 1,5 GB). Kör:

docker pull erientes/dörrklocka

Obs! Dockerfilen finns på dörrklockans förråd på Github. Nu är allt klart för att köra dörrklockans skript, som kommer att diskuteras i nästa steg.

Lokal installation

Återigen skulle jag starkt rekommendera att använda Docker -bilden istället för en lokal installation. Men för att göra denna handledning komplett kommer jag nu att beskriva några av stegen jag tog för den lokala installationen.

För att kunna köra koden bör pythonversionen vara> = 3.5 (jag använde python 3.5.3) och följande paket måste installeras:

  • ansiktsigenkänning
  • picamera
  • numpy
  • Kudde
  • python-telegram-bot
  • RPi. GPIO

Den här länken är ganska användbar: Github - Installera dlib och face_recognition på en Raspberry Pi. Det finns dock några varningar här: 1) Kudde behöver minst Python 3.5, som inte kommer att installeras enligt denna metod. 2) Inte heller alla paket som behövs i dörrklockprojektet kommer att installeras genom att följa denna metod. Du bör dock kunna installera det genom att helt enkelt använda pip3.

Steg 6: Körning av dörrklockskript

Körning av dörrklockans skript
Körning av dörrklockans skript
Körning av dörrklockans skript
Körning av dörrklockans skript
Körning av dörrklockans skript
Körning av dörrklockans skript

Skaffa skripten

Skripten kan laddas ner manuellt från: github.com - Erientes/doorbell. Eller om du har Git installerat, kör:

git -klon

Skapa alias

För att göra våra liv lite enklare, låt oss skapa några alias för att köra skripten. Kör:

bladplatta ~/.bashrc

Lägg till följande rader och spara filen:

alias doorbell_run = 'docker run --privileged -v/home/pi/doorbell:/doorbell -w/doorbell -it erientes/doorbell python $ 1'

alias doorbell_login = 'docker run --privileged -v/home/pi/doorbell:/doorbell -w/doorbell -it erientes/doorbell bash'

Testa skript

För att testa om allt är rätt installerat, öppna en ny terminal och kör:

doorbell_run exempel/0_test_installation.py

Resultatet ska helt enkelt vara ett meddelande i terminalfönstret som säger "Installation av dörrklockan slutade framgångsrikt!". För att testa om kameran kan nås av Docker -behållaren, kör:

doorbell_run exempel/1_test_camera.py

Genom att köra 1_test_camera.py tas ett foto och sparas som 'test.jpg', som finns i/home/pi/doorbell. Slutligen kan LED -drivrutinerna testas genom att köra:

doorbell_run exempel/2_test_voicehat_drivers.py

När detta skript körs ska lysdioden i arkadströmställaren svara när knappen trycks in.

Running Doorbell scripts

För att köra Doorbell -skripten måste först Telegram -botens referenser erhållas. Installera Telegram på din telefon och gå till telegram.me - Botfather. Starta en konversation och ange:

/newbot

Fyll i ett namn och ett användarnamn för boten. Därefter får du åtkomsttoken. Kopiera det värdet till filen 'credentials_telegram_template.py' i/home/pi/doorbell och spara det till en ny fil med namnet 'credentials_telegram.py'. Slutligen starta en konversation med den bot du just skapade genom att klicka på länken som Botfather tillhandahåller dig.

Slutligen, låt oss köra dörrklockan med ansiktsigenkänning:

doorbell_run main.py

Anmärkningar:

Om du vill veta mer om hur koden fungerar, kolla in kommentarerna i själva skripten. Om du har en fråga om koden, vänligen kontakta mig via Github

Steg 7: Använda dörrklockan

Image
Image
Använda dörrklockan
Använda dörrklockan
Använda dörrklockan
Använda dörrklockan

Låt oss köra dörrklockans manus genom att köra:

doorbell_run main.py Efter att paketen har laddats blir skripten inaktiva. Det finns i princip 2 saker som kan hända:

  1. Någon ringer på dörren.
  2. Någon läggs till i vitlistan.

Någon ringer på dörren

I det här fallet börjar manuset ta foton tills det tar ett foto där ett ansikte upptäcks. Efter detektering kallas några metoder från pythonpaketet 'face_recognition' för att beräkna en 128 -kodning av ansiktet. Därefter jämförs den erhållna kodningen med kodningarna i whitelist.csv och blacklist.csv. De möjliga resultaten resulterar i följande svar:

I vitlistan? På svartlistan? Svar
Ja Nej Grönt ljus tänds.
Ja Ja Gult ljus tänds. Dörrklockan skickar foton till Telegram bot med orange ikon. Detta tillstånd kan hända om någon har lagts till i båda listorna. Till exempel när någon var välkommen till en början, men blev svartlistad senare.
Nej Nej Gult ljus tänds. Dörrklockan skickar foton till Telegram bot med orange ikon.
Nej Ja Rött ljus tänds. Dörrklockan skickar foton till Telegram bot med röd ikon.

Någon läggs till i vitlistan

Om du vill lägga till någon i vitlistan trycker du på den gula knappen i trafikljuset när dörrklockan är i viloläge. Först tänds det gula ljuset. Om den gröna lampan blinkar tre gånger läggs personens ansikte till på vitlistan. Om den gröna lampan inte blinkar 3 gånger lyckades försöket inte. Tryck i så fall på den gula knappen igen. Du kan enkelt verifiera om det lyckades genom att ringa på dörren och kontrollera om det gröna ljuset går igenom.

Hur lägger man till någon på svartlistan?

Uppenbarligen kommer människor med dåliga avsikter inte att gå förbi för att ge oss ett foto av deras ansikte. Så istället kan du lägga till bilder av ökända personer som (till exempel) polisen har publicerat i mappen img/blacklist. Varje timme kontrolleras den här mappen efter nya bilder. Om det finns en ny bild beräknas ansiktekodningen och läggs till i blacklist.csv. Bilden byter sedan namn och flyttas till mappen/img/blacklist/encoded.

Anmärkningar:

  • Att använda skripten genom att logga in på RPi ger mycket mer kontroll och information, men den grundläggande kontrollen och informationen kan erhållas genom att enbart använda trafikljusdisplayen.
  • Ansiktsigenkänning implementeras med hjälp av python -paketet 'face_recognition'. Detta paket är baserat på Dlib som innehåller en toppmodern ansiktsigenkänningsalgoritm som utför en noggrannhet på 99,38% på Benämningen Etiketterade ansikten i det vilda (källa: dlib.net-Ansiktsigenkänning av hög kvalitet med djup metrisk inlärning).
Hjälpmedelstävling
Hjälpmedelstävling
Hjälpmedelstävling
Hjälpmedelstävling

Första pris i Assistive Tech Contest

Rekommenderad: