Indholdsfortegnelse:

Dørklokke med ansigtsgenkendelse: 7 trin (med billeder)
Dørklokke med ansigtsgenkendelse: 7 trin (med billeder)

Video: Dørklokke med ansigtsgenkendelse: 7 trin (med billeder)

Video: Dørklokke med ansigtsgenkendelse: 7 trin (med billeder)
Video: AQARA Dørlås EVE Bevægelsessensor Forbedrer dit Smart Home-sikkerhedssystem ved hjælp af IoT... 2024, November
Anonim
Dørklokke med ansigtsgenkendelse
Dørklokke med ansigtsgenkendelse

Motivering

For nylig har der været en bølge af røverier i mit land, som er målrettet ældre i deres eget hjem. Normalt gives adgang fra beboerne selv, da de besøgende overbeviser dem om, at de er omsorgspersoner/sygeplejersker. Det er bare uden for ord, hvor vrede og triste disse historier får mig til at føle. Hjem bør være din første sikre havn og endnu mere, hvis du allerede er i en sårbar position, når du er udenfor. Med dette i tankerne startede jeg dette projekt.

Generelle oplysninger

Dørklokkesystemet er hovedsageligt designet til ældre eller synshæmmede og er ret ligetil i sit virke. Kort sagt, dørklokkekontakten udløser kameraet for at få optagelser. Dernæst registreres ansigter i optagelserne og matches med en hvidliste og sortliste. Beboeren får klar visuel feedback ved et klart lyskryds. Herved angiver det grønne, gule eller røde lys, at personen (e) er på hvidlisten, ukendt for henholdsvis systemet eller på sortlisten. Hvis det gule eller røde lys udløses, sendes fotoet af en Telegram -bot for at informere/advare en slægtning eller vicevært.

Ekspertniveau

Projektet blev oprettet for entusiaster, der er særligt nysgerrige efter at bruge computersyn og kunstig intelligens. Denne instruerbare er skrevet til et publikum af begyndere, så bare rolig, hvis du ikke har nogen erfaring! Desuden kan projektet også være interessant for mere erfarne producenter, da pipeline er organiseret på en måde, så du kan udvide det med din egen computervision og ansigtsgenkendelsesideer uden meget besvær.

Trin 1: Materialer

Materialer
Materialer

Produktliste med minimumskrav:

Produkt Link Kommentar
Raspberry Pi 3b RPi Link viser RPi 4, da det har langt bedre ydeevne og næsten samme pris som RPi 3b.
Micro SD Amazon Et micro SD -kort på 16 GB eller større vil gøre jobbet. Men de 16 GB kort på Amazon er nu stort set den samme pris som de 32 GB kort.
Hindbær Pi kamera Amazon Kamera v1 er billigere, men v2 er bedre og understøttes længere.
15 pin FPC flex kabel Amazon Længden afhænger faktisk af omstændighederne ved udførelsen af dette projekt. Hvis du bare vil bygge en prototype, gør det originale flexkabel jobbet.
Strømforsyning 5v micro usb Adafruit Denne svigtede aldrig! Fantastisk kvalitet. (Ikke på billedet)
Arcade knapper med indbygget LED Amazon Vælg den størrelse, du ønsker, men CAD -designet er baseret på 60 mm knapper
Modstande Amazon Du skal bare bruge et par 1k og 100 ohm modstande. Almindelige 1/4W er fine.
Kondensatorer 0,1 uF Amazon Tre kondensatorer er nødvendige. (Ikke på billedet)
Jumper Wires / Båndkabel AmazonAmazon Hvis du vil spare dig nogle penge, kan du også bruge et gammelt diskettedrevbåndkabel (se foto).
Krympeslange / elektrisk tape AmazonAmazon

Nødvendige værktøjer:

Værktøj Vigtig? Kommentar
Loddekolbe Ja
Multimeter Ja
Wire stripper Ja Eller du kan bruge en kniv/saks.
Laserskærer Ingen
3D printer Ingen
Klemmer Ingen Nyttig til at holde æsken samlet i testfasen.

Bemærkninger:

For at øge tilgængeligheden af projektet besluttede jeg at udvikle det ved hjælp af en Raspberry Pi 3b. Selvom det øger tilgængeligheden, reducerer det applikationens muligheder, da RPi'er ikke er så hurtige. Hvis du leder efter en enkelt bordcomputer, der er hurtigere, kan du tage et kig på NVIDIA Jetson Nano

Trin 2: Ledningsføring

Ledninger
Ledninger
Ledninger
Ledninger
Ledninger
Ledninger

Det skematiske diagram er mest informativt for dette trin og er ganske selvforklarende. Hvis du er ny inden for elektronik, kan du bruge forklaringsbilledet. Værdien af komponenten (hvis den er gældende) er angivet i det skematiske diagram. Billederne kan hjælpe med at se, hvordan jeg opbygger kredsløbet. Grundlæggende tilsluttede jeg alle komponenter så tæt på arkadeknappen som muligt, hvilket resulterer i et klart overblik over, hvad der foregår.

Bemærkninger:

  • Jeg kan virkelig godt lide at bruge båndkabelstik, da de er langt mere robuste end at bruge enkelt jumper -ledninger.
  • Som foreslået har jeg brugt et fjernet båndkabel fra en gammel computer. Dette er dog lidt vanskeligt, da du manuelt skal hævde konfigurationen af kablet. I dette projekt fandt jeg f.eks. Ud af, at nogle huller var forbundet med hinanden (sandsynligvis brugt som jord til den originale applikation). Derfor måtte jeg få et andet kabel senere, som du kan se på billederne.

Trin 3: Opbygning af kabinettet

Bygger kabinettet
Bygger kabinettet
Bygger kabinettet
Bygger kabinettet
Bygger kabinettet
Bygger kabinettet
Bygger kabinettet
Bygger kabinettet

Kamerahus

Mange kabinetter til picamera kan frit downloades fra internettet. Så jeg vælger ikke at genopfinde hjulet og vælge et grundlæggende, men pænt kabinet fra internettet: thingiverse.com - Raspberry pi kamerahus/kabinet. (Råb til designeren VGer.)

Trafiklyshus

Til trafiklyshuset har jeg designet en lille kasse i Autodesk Fusion 360 (som kan downloades frit, se Bemærkninger), der passer til al hardware. I vedhæftede filer kan du finde den fil, jeg har sendt til mit lokale laserskæringsfirma. Herved er designet baseret på en 6 mm pladetykkelse. Men hvis du vil justere tingene, kan du få adgang til alle slags filformater ved hjælp af dette link. Som vist på billederne kan du også bruge en papkasse, hvis du ikke har adgang til en laserskærer. Jeg brugte papkassen på billedet til prototyper, og det virker som en charme.

Samlingen er ret ligetil:

  1. Monter Arcade -kontakterne.
  2. Sørg for at holde ledningerne til dørklokken fri.
  3. Tilslut båndkablet til RPi.
  4. Skru RPi'en på bundpanelet.
  5. Tilslut dørklokkens ledninger til et ledningsstik, og monter det også på bundpanelet.
  6. Tilslut Picamera til RPi.
  7. Bor et hul i et af sidepanelerne til dørklokkeomskiftningskablet og RPi -strømledningen.

Ledningsstikket bruges som et monteringspunkt for dørklokkekontakttrådene, så det senere kan fastgøres til en eksisterende dørklokke. Alt er nu på plads og kan limes sammen. Imidlertid vil du måske først afslutte de næste trin for at sikre, at alt fungerer, som det skal være.

Bemærkninger:

Autodesk Fusion 360 er frit tilgængelig for hobbyfolk! Hvis du vil have dit eksemplar, kan du besøge dette link: autodesk.com - Fusion 360 For Hobbyister. Der er nogle vilkår, så sørg for at læse dem og anvende dem. Det var mit første projekt med Fusion 360, og jeg har ikke meget erfaring med at bruge CAD -software, men jeg må sige, at jeg virkelig kan lide softwaren og alle de ekstra værktøjer, der følger med Fusion 360

Trin 4: Konfiguration af kameraet

Konfiguration af kameraet
Konfiguration af kameraet
Konfiguration af kameraet
Konfiguration af kameraet
Konfiguration af kameraet
Konfiguration af kameraet

Det antages, at du har Raspbian installeret, og at det kører i GUI -tilstand. Hvis du ikke har Raspbian installeret endnu, kan du følge denne artikel: raspberrypi.org - Installation af operativsystembilleder. Hvis du starter Raspbian, skal du se et skrivebord som vist på billederne.

Lad os konfigurere kameraet på RPi og se om det virker! Metoden beskrevet her er direkte fra raspberrypi.org - Dokumentation. Lad os først opdatere til de nyeste pakker (inklusive kamerafirmware) ved at udføre følgende kommandoer i et terminalvindue (se billeder):

sudo apt opdatering

sudo apt fuld opgradering

Derefter skal kameraet aktiveres ved hjælp af følgende kommando:

sudo raspi-config

I menuen skal du gå til 5. Grænsefladeindstillinger -> P1 -kamera. Vælg at aktivere kameraet og genstart RPi'en ved at udføre:

genstarte

Kameraet skal nu konfigureres korrekt. Det kan testes ved at åbne et terminalvindue og udføre:

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

Billedet gemmes på: /home /pi.

Trin 5: Opsætning af Docker

Opsætning af Docker
Opsætning af Docker
Opsætning af Docker
Opsætning af Docker
Opsætning af Docker
Opsætning af Docker
Opsætning af Docker
Opsætning af Docker

For at undgå afhængighed og installationsfejl besluttede jeg at bygge et brugerdefineret Docker -billede til dette projekt (se wikipedia.org - Docker). Hvis du aldrig har brugt eller hørt om Docker, er der ingen bekymringer, jeg vil forklare trin for trin, hvordan du bruger det i dette projekt. Faktisk er det super let! Hvis du vil køre dette projekt på en lokal installation (i stedet for i en Docker -container), giver jeg dig nogle tips. Men det anbefales stærkt at bruge Docker -billedet. Jeg bygger jo det for at gøre det let for dig at køre dette projekt!

Hvad er Docker?

Bemærk: denne del giver nogle baggrundsoplysninger om Docker, som kan springes over, hvis du bare vil køre koden.

Dette projekt er første gang, jeg brugte Docker, og det er simpelthen fantastisk! Måske har du hørt om virtualenv eller Anaconda til Python? Tja, Docker er temmelig ens i den forstand, at du nemt kan administrere pakkeversioner og køre forskellige Python -versioner på et værtssystem ved at bruge et andet miljø (eller en beholder, som det kaldes i Docker). Men sammenlignet med virtualenv og Anaconda er Docker langt mere kraftfuld, da det ikke er begrænset til kun at indeholde Python -pakker. I en Docker -container kan du faktisk også installere og administrere pakkerne til et ønsket operativsystem. Overvej f.eks. Et websted, du vil migrere, der kører en Python -webramme (f.eks. Django) med en database (f.eks. MySQL). Uden en Docker -container skulle du installere alle pakker på den nye server, en proces, der er meget tilbøjelig til fejl og fejl. På den anden side, når dit websted er blevet bygget i Docker, er migrering dybest set lige så let som at flytte billedfilen/filerne til den nye server og køre den/dem. Som du kan forestille dig, er Docker også meget nyttig til projekter på Instructables;)! Hvis du vil vide mere om Docker, skal du tjekke deres websted: docker.org - Docker: Enterprise Container Platform. Lad os nu komme i gang med Docker!

Installation af Docker

Installer Docker ved at udføre:

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

Dernæst tilføjes brugeren til brugergruppen 'docker', som giver rettighederne til at køre Docker. Dette gøres ved:

sudo usermod -aG docker $ USER

Nu skulle du være i stand til at køre Docker. Dette kan valideres ved at køre hello-world-billedet:

docker run hallo-verden

Lad os endelig trække Docker -billedet, der indeholder alle afhængigheder, der er nødvendige for at køre dørklokke -Python -scripts. Denne proces kan tage et stykke tid, da billedet er ret stort (~ 1,5 GB). Udfør:

docker pull erientes/dørklokke

Bemærk: Dockerfilen kan findes på dørklokkeopbevaringen på Github. Nu er alt klar til at køre dørklokke -scripts, som vil blive diskuteret i det næste trin.

Lokal installation

Igen vil jeg stærkt anbefale at bruge Docker -billedet i stedet for en lokal installation. Men for at gøre denne tutorial komplet, vil jeg nu beskrive nogle af de trin, jeg tog for den lokale installation.

For at kunne køre koden skal python -versionen være> = 3.5 (jeg brugte python 3.5.3), og følgende pakker skal installeres:

  • ansigtsgenkendelse
  • picamera
  • numpy
  • Pude
  • python-telegram-bot
  • RPi. GPIO

Dette link er ganske nyttigt: Github - Installer dlib og face_recognition på en Raspberry Pi. Der er dog nogle forbehold her: 1) Pude har brug for mindst Python 3.5, som ikke installeres efter denne metode. 2) Det er heller ikke alle pakker, der er nødvendige i dørklokke -projektet, der installeres ved at følge denne metode. Du bør dog være i stand til at installere det ved blot at bruge pip3.

Trin 6: Kørsel af dørklokke -scripts

Kører dørklokke -scripts
Kører dørklokke -scripts
Kører dørklokke -scripts
Kører dørklokke -scripts
Kører dørklokke -scripts
Kører dørklokke -scripts

Få scripts

Scripts kan downloades manuelt fra: github.com - Erientes/doorbell. Eller hvis du har installeret Git, skal du udføre:

git -klon

Opret aliasser

Nu, for at gøre vores liv lidt lettere, lad os oprette nogle aliasser til at køre scripts. Udfør:

leafpad ~/.bashrc

Tilføj følgende linjer, og gem 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 scripts

For at teste, om alt er installeret rigtigt, skal du åbne en ny terminal og udføre:

doorbell_run eksempler/0_test_installation.py

Resultatet skulle simpelthen være en besked i terminalvinduet, der siger 'Installering af dørklokke sluttede med succes!'. For at teste, om kameraet kan tilgås af Docker -containeren, skal du køre:

doorbell_run eksempler/1_test_camera.py

Ved at køre 1_test_camera.py vil der blive taget et foto og gemt som 'test.jpg', som kan findes i/home/pi/doorbell. Endelig kan LED -driverne testes ved at udføre:

doorbell_run eksempler/2_test_voicehat_drivers.py

Når dette script kører, skal lysdioden i arkadekontakten svare, når der trykkes på knappen.

Kører dørklokke scripts

For at køre Doorbell -scripts skal Telegram -bot -legitimationsoplysningerne først indhentes. Installer Telegram på din telefon, og gå til telegram.me - Botfather. Start en samtale, og indtast:

/newbot

Udfyld et navn og et brugernavn til bot. Herefter får du adgangstokenet. Kopier værdien til filen 'credentials_telegram_template.py' i/home/pi/doorbell og gem den i en ny fil med navnet 'credentials_telegram.py'. Start endelig en samtale med den bot, du lige har oprettet, ved at klikke på det link, som Botfather giver dig.

Lad os endelig køre dørklokken med ansigtsgenkendelse:

doorbell_run main.py

Bemærkninger:

Hvis du vil vide mere om, hvordan koden fungerer, kan du tjekke kommentarerne i selve scriptene. Hvis du har et spørgsmål om koden, bedes du kontakte mig via Github

Trin 7: Brug af dørklokken

Image
Image
Brug af dørklokken
Brug af dørklokken
Brug af dørklokken
Brug af dørklokken

Lad os køre dørklokke -scriptet ved at udføre:

doorbell_run main.py Efter indlæsning af pakkerne går scripts inaktiv. Der er dybest set 2 ting, der kan ske:

  1. Nogen ringer på døren.
  2. Nogen tilføjes til hvidlisten.

Nogen ringer på døren

I dette tilfælde begynder scriptet at tage fotos, indtil det skyder et foto, hvor et ansigt registreres. Efter påvisning kaldes nogle metoder fra python -pakken 'face_recognition' til at beregne en 128 -kodning af ansigtet. Dernæst sammenlignes den opnåede kodning med kodningerne i whitelist.csv og blacklist.csv. De mulige resultater resulterer i følgende svar:

På hvidlisten? På sortlisten? Respons
Ja Ingen Grønt lys tændes.
Ja Ja Gult lys tændes. Dørklokke kameraet sender fotos til Telegram bot med orange ikon. Denne tilstand kan ske, hvis nogen blev føjet til begge lister. For eksempel når nogen først var velkommen, men senere blev sortlistet.
Ingen Ingen Gult lys tændes. Dørklokke kameraet sender fotos til Telegram bot med orange ikon.
Ingen Ja Rødt lys tænder. Dørklokke kameraet sender fotos til Telegram bot med rødt ikon.

Nogen tilføjes til hvidlisten

Hvis du vil tilføje nogen til hvidlisten, skal du trykke på den gule knap i trafiklyset, når dørklokken er i inaktiv tilstand. Først tændes det gule lys. Hvis det grønne lys blinker 3 gange, tilføjes personens ansigt til hvidlisten. Hvis det grønne lys ikke blinker 3 gange, lykkedes forsøget ikke. I så fald skal du trykke på den gule knap igen. Du kan nemt kontrollere, om det lykkedes, ved at ringe på døren og kontrollere, om det grønne lys passerer.

Hvordan føjer man nogen til sortlisten?

Det er klart, at mennesker med dårlige hensigter ikke kommer forbi for at give os et foto af deres ansigt. Så i stedet kan du tilføje billeder af berygtede mennesker, som (for eksempel) politiet har offentliggjort til mappen img/blacklist. Hver time kontrolleres denne mappe for nye billeder. Hvis der er et nyt billede, beregnes ansigtskodningen og tilføjes til blacklist.csv. Billedet omdøbes derefter og flyttes til mappen/img/blacklist/encoded.

Bemærkninger:

  • Betjening af scripts ved at logge ind på RPi giver langt mere kontrol og information, men den grundlæggende kontrol og information kan opnås ved udelukkende at bruge trafiklysdisplayet.
  • Ansigtsgenkendelse implementeres ved hjælp af python -pakken 'face_recognition'. Denne pakke er baseret på Dlib, der indeholder en state-of-the-art ansigtsgenkendelsesalgoritme, der udfører en nøjagtighed på 99,38% på benchmarket med mærkede ansigter i naturen (kilde: dlib.net-Ansigtsgenkendelse i høj kvalitet med dyb metrisk læring).
Hjælpemiddel Tech Contest
Hjælpemiddel Tech Contest
Hjælpemiddel Tech Contest
Hjælpemiddel Tech Contest

Første præmie i Assistive Tech Contest

Anbefalede: