Innholdsfortegnelse:

Dørklokke med ansiktsgjenkjenning: 7 trinn (med bilder)
Dørklokke med ansiktsgjenkjenning: 7 trinn (med bilder)

Video: Dørklokke med ansiktsgjenkjenning: 7 trinn (med bilder)

Video: Dørklokke med ansiktsgjenkjenning: 7 trinn (med bilder)
Video: 🔒 AQARA Door Lock & Eve Motion Sensor Enhances Smart Home Security 🤝 2024, November
Anonim
Dørklokke med ansiktsgjenkjenning
Dørklokke med ansiktsgjenkjenning

Motivasjon

Nylig har det vært en bølge av ran i landet mitt som er rettet mot eldre mennesker i deres eget hjem. Vanligvis gis tilgang fra beboerne selv siden besøkende overbeviser dem om at de er omsorgspersoner/sykepleiere. Det er bare utenfor ord, hvor sint og trist disse historiene får meg til å føle. Hjemmet bør være din første sikre havn og enda mer hvis du allerede er i en sårbar posisjon når du er ute. Med dette i tankene startet jeg dette prosjektet.

Generell informasjon

Dørklokkesystemet er hovedsakelig designet for eldre eller synshemmede og er ganske rett frem i arbeidet. Kort sagt, dørklokkebryteren utløser kameraet for å få opptak. Deretter blir ansikter i opptakene oppdaget og matchet med en hviteliste og svarteliste. Beboeren får tydelig visuell tilbakemelding fra en tydelig trafikklysvisning. Dermed indikerer det grønne, gule eller røde lyset at personen (e) er på hvitelisten, ukjent for systemet eller på svartelisten. Hvis det gule eller røde lyset utløses, sendes bildet av en Telegram -bot for å informere/advare en slektning eller vaktmester.

Nivå av kompetanse

Prosjektet ble satt opp for entusiaster som er spesielt nysgjerrige på bruk av datasyn og kunstig intelligens. Denne instruksen er skrevet for et publikum av nybegynnere, så ikke bekymre deg hvis du ikke har erfaring! Videre kan prosjektet også være interessant for mer erfarne produsenter siden rørledningen er organisert på en måte som du kan utvide den med din egen datasyn og ideer om ansiktsgjenkjenning uten mye stress.

Trinn 1: Materialer

Materialer
Materialer

Produktliste med minimumskrav:

Produkt Lenke Kommentar
Raspberry Pi 3b RPi Link viser RPi 4 siden den har bedre ytelse og nesten like mye pris som RPi 3b.
Micro SD Amazon Et micro SD -kort på 16 GB eller større vil gjøre jobben. Men 16 GB -kortene på Amazon er nå stort sett samme pris som 32 GB -kortene.
Raspberry Pi kamera Amazon Kamera v1 er billigere, men v2 er bedre og støttes lenger.
15 -pins FPC flexkabel Amazon Lengden avhenger faktisk av omstendighetene rundt dette prosjektet. Hvis du bare vil bygge en prototype, vil den originale flexkabelen gjøre jobben.
Strømforsyning 5v micro usb Adafruit Denne sviktet aldri! God kvalitet. (Ikke på bildet)
Arcade-knapper med innebygd LED Amazon Velg størrelsen du vil ha, men CAD -designet er basert på 60 mm knapper
Motstander Amazon Du trenger bare et par 1k og 100 ohm motstander. Vanlige 1/4W er fine.
Kondensatorer 0,1 uF Amazon Det trengs tre kondensatorer. (Ikke på bildet)
Stikkledere / båndkabel AmazonAmazon Hvis du vil spare deg noen penger, kan du også bruke en gammel diskettbåndkabel (se bildet).
Krympeslange / Elektrisk tape AmazonAmazon

Nødvendige verktøy:

Verktøy Viktig? Kommentar
Loddejern Ja
Multimeter Ja
Wire stripper Ja Eller du kan bruke en kniv/saks.
Laserskærer Nei
3D -skriver Nei
Klemmer Nei Nyttig for å holde esken sammen i testfasen.

Merknader:

For å øke tilgjengeligheten til prosjektet bestemte jeg meg for å utvikle det ved hjelp av en Raspberry Pi 3b. Selv om det øker tilgjengeligheten, reduserer det applikasjonens evner siden RPi -er ikke er så raske. Hvis du leter etter en enkelt brettcomputer som er raskere, kan det være lurt å ta en titt på NVIDIA Jetson Nano

Trinn 2: Kabling

Kabling
Kabling
Kabling
Kabling
Kabling
Kabling

Det skjematiske diagrammet er mest informativt for dette trinnet og er ganske selvforklarende. Hvis du er ny innen elektronikk, kan du bruke forklaringsbildet. Verdien av komponenten (hvis den gjelder) er angitt i det skjematiske diagrammet. Bildene kan hjelpe til å se hvordan jeg bygger kretsen. I utgangspunktet koblet jeg alle komponentene så nær arkadeknappen som mulig, noe som resulterer i en klar oversikt over hva som skjer.

Merknader:

  • Jeg liker veldig godt å bruke båndkabelkontakter, siden de er langt mer robuste enn å bruke enkelt jumper -ledninger.
  • Som foreslått har jeg brukt en fjernet båndkabel fra en gammel datamaskin. Dette er imidlertid litt vanskelig, siden du må hevde konfigurasjonen av kabelen manuelt. I dette prosjektet fant jeg for eksempel ut at noen hull var forbundet med hverandre (sannsynligvis brukt som jord for den opprinnelige applikasjonen). Derfor måtte jeg skaffe meg en annen kabel senere som du kan se på bildene.

Trinn 3: Bygg foringsrøret

Å bygge kabinettet
Å bygge kabinettet
Å bygge kabinettet
Å bygge kabinettet
Å bygge kabinettet
Å bygge kabinettet
Å bygge kabinettet
Å bygge kabinettet

Kamerahus

Mange foringsrør for picamera kan lastes ned fritt fra internett. Så jeg velger å ikke finne opp hjulet på nytt og velge et grunnleggende, men fint deksel fra internett: thingiverse.com - Raspberry pi kamerahus/kabinett. (Rop ut til designeren VGer.)

Trafikklysdeksel

For lyskrysset har jeg designet en liten eske i Autodesk Fusion 360 (som kan lastes ned fritt, se Merknader) som passer til all maskinvare. I vedlegget finner du filen jeg har sendt til mitt lokale laserskjæringsfirma. Herved er designet basert på en 6 mm platetykkelse. Men hvis du vil justere ting, kan du få tilgang til alle slags filformater ved å bruke denne lenken. Som vist på bildene, kan du også bruke en pappeske hvis du ikke har tilgang til en laserskjærer. Jeg brukte pappesken på bildet til prototyping, og det fungerer som en sjarm.

Monteringen er ganske rett frem:

  1. Monter Arcade -bryterne.
  2. Sørg for å holde ledningene til dørklokken fri.
  3. Koble båndkabelen til RPi.
  4. Skru RPi på bunnpanelet.
  5. Koble dørklokkeledningene til en ledningskontakt og monter den også på bunnpanelet.
  6. Koble Picamera til RPi.
  7. Bor et hull i en av sidepanelene for dørklokkekoblingstråden og RPi -strømledningen.

Ledningskontakten brukes som et monteringspunkt for dørklokkens bryterledninger, slik at den kan festes til en eksisterende dørklokke senere. Alt er nå på plass og kan limes sammen. Imidlertid vil du kanskje først fullføre de neste trinnene for å sikre at alt fungerer som det skal være.

Merknader:

Autodesk Fusion 360 er fritt tilgjengelig for hobbyfolk! Hvis du vil få kopien din, kan du gå til denne lenken: autodesk.com - Fusion 360 For Hobbyists. Det er noen vilkår, så sørg for å lese og bruke dem. Det var mitt første prosjekt med Fusion 360, og jeg har ikke mye erfaring med å bruke CAD -programvare, men jeg må si at jeg virkelig liker programvaren og alle tilleggsverktøyene som følger med Fusion 360

Trinn 4: Konfigurere kameraet

Konfigurere kameraet
Konfigurere kameraet
Konfigurere kameraet
Konfigurere kameraet
Konfigurere kameraet
Konfigurere kameraet

Det antas at du har Raspbian installert og at det kjører i GUI -modus. Hvis du ikke har Raspbian installert ennå, kan du følge denne artikkelen: raspberrypi.org - Installere operativsystembilder. Hvis du starter Raspbian, bør du se et skrivebord som vist på bildene.

La oss konfigurere kameraet på RPi og se om det fungerer! Metoden beskrevet her er direkte fra raspberrypi.org - Documentation. La oss først oppdatere til de nyeste pakkene (inkludert kameraets fastvare) ved å utføre følgende kommandoer i et terminalvindu (se bilder):

sudo apt oppdatering

sudo apt full-oppgradering

Deretter må kameraet aktiveres ved å bruke følgende kommando:

sudo raspi-config

I menyen, gå til 5. Grensesnittalternativer -> P1 -kamera. Velg å aktivere kameraet og start RPi på nytt ved å utføre:

starte på nytt

Kameraet skal nå være riktig konfigurert. Det kan testes ved å åpne et terminalvindu og utføre:

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

Bildet lagres på: /home /pi.

Trinn 5: Konfigurere Docker

Setter opp Docker
Setter opp Docker
Setter opp Docker
Setter opp Docker
Setter opp Docker
Setter opp Docker
Setter opp Docker
Setter opp Docker

For å unngå avhengighets- og installasjonsfeil bestemte jeg meg for å bygge et tilpasset Docker -bilde for dette prosjektet (se wikipedia.org - Docker). Hvis du aldri har brukt eller hørt om Docker, ingen bekymringer, jeg vil forklare trinn for trinn hvordan du bruker det i dette prosjektet. Faktisk er det superenkelt! Hvis du vil kjøre dette prosjektet på en lokal installasjon (i stedet for i en Docker -beholder), vil jeg gi deg noen tips. Men det er sterkt anbefalt å bruke Docker -bildet. Tross alt bygger jeg det for å gjøre det enkelt for deg å kjøre dette prosjektet!

Hva er Docker?

Merk: Denne delen gir litt bakgrunnsinformasjon om Docker, som kan hoppes over hvis du bare vil kjøre koden.

Dette prosjektet er første gang jeg brukte Docker, og det er rett og slett fantastisk! Kanskje du har hørt om virtualenv eller Anaconda for Python? Vel, Docker er ganske likt i den forstand at du enkelt kan administrere pakkeversjoner og kjøre forskjellige Python -versjoner på ett vertssystem ved å bruke et annet miljø (eller beholder som det kalles i Docker). Men, sammenlignet med virtualenv og Anaconda, er Docker langt kraftigere siden den ikke er begrenset til å bare inneholde Python -pakker. I en Docker -beholder kan du faktisk også installere og administrere pakkene til et ønsket operativsystem. Vurder for eksempel et nettsted du vil migrere som kjører et Python -webrammeverk (f.eks. Django) med en database (f.eks. MySQL). Uten en Docker -beholder må du installere alle pakker på den nye serveren, en prosess som er svært utsatt for feil og feil. På den annen side, når nettstedet ditt er bygget i Docker, er migrering i utgangspunktet like enkelt som å flytte bildefilen/filene til den nye serveren og kjøre den/dem. Som du kan forestille deg, er Docker også veldig nyttig for prosjekter på Instructables;)! Hvis du vil vite mer om Docker, kan du sjekke ut nettstedet deres: docker.org - Docker: Enterprise Container Platform. La oss komme i gang med Docker!

Installerer Docker

Installer Docker ved å utføre:

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

Deretter legges brukeren til brukergruppen 'docker', som gir rettigheter til å kjøre Docker. Dette gjøres av:

sudo usermod -aG docker $ USER

Nå bør du kunne kjøre Docker. Dette kan valideres ved å kjøre hello-world-bildet:

docker run hallo-verden

Til slutt, la oss trekke Docker -bildet som inneholder alle avhengigheter som trengs for å kjøre dørklokkens Python -skript. Denne prosessen kan ta en stund siden bildet er ganske stort (~ 1,5 GB). Henrette:

docker pull erientes/doorbell

Merk: Dockerfilen finnes på dørklokkelageret på Github. Nå er alt klart for å kjøre dørklokkeskriptene, som vil bli diskutert i neste trinn.

Lokal installasjon

Igjen, jeg vil anbefale å bruke Docker -bildet i stedet for en lokal installasjon. Men for å gjøre denne opplæringen komplett, vil jeg nå beskrive noen av trinnene jeg tok for den lokale installasjonen.

For å kunne kjøre koden, må python -versjonen være> = 3.5 (jeg brukte python 3.5.3) og følgende pakker må installeres:

  • ansiktsgjenkjenning
  • picamera
  • numpy
  • Pute
  • python-telegram-bot
  • RPi. GPIO

Denne lenken er ganske nyttig: Github - Installer dlib og face_recognition på en Raspberry Pi. Det er imidlertid noen forbehold her: 1) Pillow trenger minst Python 3.5, som ikke installeres etter denne metoden. 2) Dessuten vil ikke alle pakker som trengs i dørklokkeprosjektet installeres ved å følge denne metoden. Du bør imidlertid kunne installere den ved å bruke pip3.

Trinn 6: Kjøre dørklokkeskriptene

Kjører dørklokkeskriptene
Kjører dørklokkeskriptene
Kjører dørklokkeskriptene
Kjører dørklokkeskriptene
Kjører dørklokkeskriptene
Kjører dørklokkeskriptene

Få skriptene

Skriptene kan lastes ned manuelt fra: github.com - Erientes/doorbell. Eller hvis du har Git installert, kjør:

git -klon

Lag aliaser

For å gjøre livet litt lettere, la oss lage noen aliaser for å kjøre skriptene. Henrette:

leafpad ~/.bashrc

Legg til følgende linjer og lagre 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'

Test skript

For å teste om alt er riktig installert, åpner du en ny terminal og kjører:

doorbell_run eksempler/0_test_installation.py

Resultatet skal ganske enkelt være en melding i terminalvinduet som sier 'Installasjon av dørklokke var vellykket!'. For å teste om kameraet kan nås av Docker -beholderen, kjør:

doorbell_run eksempler/1_test_camera.py

Ved å kjøre 1_test_camera.py vil et bilde bli tatt og lagret som 'test.jpg', som du finner i/home/pi/doorbell. Til slutt kan LED -driverne testes ved å utføre:

doorbell_run eksempler/2_test_voicehat_drivers.py

Når dette skriptet kjører, bør lysdioden i arkadebryteren svare når knappen trykkes.

Running Doorbell scripts

For å kjøre dørklokkeskriptene må Telegram -bot -legitimasjonene først innhentes. Installer Telegram på telefonen og gå til telegram.me - Botfather. Start en samtale og skriv inn:

/newbot

Fyll inn et navn og et brukernavn for boten. Etter det får du tilgangstokenet. Kopier denne verdien til filen 'credentials_telegram_template.py' i/home/pi/doorbell og lagre den i en ny fil som heter 'credentials_telegram.py'. Til slutt starter du en samtale med boten du nettopp opprettet ved å klikke på lenken som Botfather gir deg.

Til slutt, la oss kjøre dørklokken med ansiktsgjenkjenning:

doorbell_run main.py

Merknader:

Hvis du vil vite mer om hvordan koden fungerer, kan du sjekke kommentarene i skriptene selv. Hvis du har spørsmål om koden, kan du kontakte meg via Github

Trinn 7: Bruke dørklokken

Image
Image
Bruk av dørklokken
Bruk av dørklokken
Bruk av dørklokken
Bruk av dørklokken

La oss kjøre dørklokkeskriptet ved å utføre:

doorbell_run main.py Etter å ha lastet pakkene, går skriptene inaktive. Det er i utgangspunktet 2 ting som kan skje:

  1. Noen ringer på døren.
  2. Noen er lagt til på hvitlisten.

Noen ringer på døren

I dette tilfellet begynner skriptet å ta bilder til det tar et bilde der et ansikt blir oppdaget. Etter deteksjon kalles noen metoder fra python -pakken 'face_recognition' for å beregne en 128 -koding av ansiktet. Deretter sammenlignes den oppnådde kodingen med kodingene i whitelist.csv og blacklist.csv. De mulige resultatene resulterer i følgende svar:

På hvitlisten? På svartelisten? Respons
Ja Nei Grønt lys tennes.
Ja Ja Gult lys tennes. Dørklokkekameraet sender bilder til Telegram -bot med oransje ikon. Denne tilstanden kan skje hvis noen ble lagt til i begge listene. For eksempel når noen var velkommen først, men ble svartelistet senere.
Nei Nei Gult lys tennes. Dørklokkekameraet sender bilder til Telegram -bot med oransje ikon.
Nei Ja Rødt lys tennes. Dørklokkekameraet sender bilder til Telegram -bot med rødt ikon.

Noen er lagt til på hvitlisten

Hvis du vil legge til noen på hvitlisten, trykker du på den gule knappen på trafikklyset når dørklokken er i hvilemodus. Først tennes det gule lyset. Hvis det grønne lyset blinker 3 ganger, blir personens ansikt lagt til på hvitelisten. Hvis det grønne lyset ikke blinker 3 ganger, var forsøket ikke vellykket. Trykk i så fall på den gule knappen igjen. Du kan enkelt kontrollere om det var vellykket ved å ringe på døren og sjekke om det grønne lyset går over.

Hvordan legge til noen på svartelisten?

Det er klart at folk med dårlige intensjoner ikke kommer forbi for å gi oss et bilde av ansiktet sitt. Så i stedet kan du legge til bilder av beryktede mennesker som (for eksempel) politiet har publisert i mappen img/blacklist. Hver time sjekkes denne mappen for nye bilder. Hvis det er et nytt bilde, beregnes ansiktskodingen og legges til blacklist.csv. Bildet blir deretter omdøpt og flyttet til mappen/img/blacklist/encoded.

Merknader:

  • Å bruke skriptene ved å logge inn på RPi gir mye mer kontroll og informasjon, men den grunnleggende kontrollen og informasjonen kan fås ved å bare bruke trafikklysdisplayet.
  • Ansiktsgjenkjenning implementeres ved å bruke python -pakken 'face_recognition'. Denne pakken er basert på Dlib som inneholder en state-of-the-art ansiktsgjenkjenningsalgoritme, som utfører en nøyaktighet på 99,38% på Benevnelsen Labeled Faces in the Wild (kilde: dlib.net-Ansiktsgjenkjenning av høy kvalitet med dyp metrisk læring).
Assistive Tech Contest
Assistive Tech Contest
Assistive Tech Contest
Assistive Tech Contest

Førstepremie i Assistive Tech Contest

Anbefalt: