Indholdsfortegnelse:
- Trin 1: Materialer
- Trin 2: Ledningsføring
- Trin 3: Opbygning af kabinettet
- Trin 4: Konfiguration af kameraet
- Trin 5: Opsætning af Docker
- Trin 6: Kørsel af dørklokke -scripts
- Trin 7: Brug af dørklokken
Video: Dørklokke med ansigtsgenkendelse: 7 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
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
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
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
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:
- Monter Arcade -kontakterne.
- Sørg for at holde ledningerne til dørklokken fri.
- Tilslut båndkablet til RPi.
- Skru RPi'en på bundpanelet.
- Tilslut dørklokkens ledninger til et ledningsstik, og monter det også på bundpanelet.
- Tilslut Picamera til RPi.
- 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
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
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
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
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:
- Nogen ringer på døren.
- 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).
Første præmie i Assistive Tech Contest
Anbefalede:
Ansigtsgenkendelse Smart Lock Med LTE Pi HAT: 4 trin
Ansigtsgenkendelse Smart Lock Med LTE Pi HAT: Ansigtsgenkendelse bliver mere og mere udbredt, vi kan bruge den til at lave en smart lås
ESP32 CAM ansigtsgenkendelse med MQTT -understøttelse - AI-tænker: 4 trin
ESP32 CAM ansigtsgenkendelse med MQTT -understøttelse | AI-tænker: Hej! Jeg ville dele min kode til et projekt, hvis jeg skulle have et ESP CAM med ansigtsgenkendelse, der kunne sende data til MQTT. Så godt .. efter måske 7 timers kig igennem flere kodeeksempler og ledt efter hvad der er hvad, har jeg fini
Gør din kablede dørklokke til en smart dørklokke med IFTTT: 8 trin
Gør din kablede dørklokke til en smart dørklokke med IFTTT: WiFi -dørklokken forvandler din eksisterende kablede dørklokke til en smart dørklokke. https://www.fireflyelectronix.com/product/wifidoor
Gør din kablede dørklokke til en smart dørklokke med hjemmeassistent: 6 trin
Gør din kablede dørklokke til en smart dørklokke med hjemmeassistent: Gør din eksisterende kablede dørklokke til en smart dørklokke. Modtag en meddelelse til din telefon, eller par med dit eksisterende hoveddørkamera for at modtage et foto eller en videoadvarsel, når som helst nogen ringer på din dørklokke. Lær mere på: fireflyelectronix.com/pro
Ansigtsgenkendelse i realtid: et ende-til-ende-projekt: 8 trin (med billeder)
Ansigtsgenkendelse i realtid: et ende-til-ende-projekt: På min sidste tutorial, der udforskede OpenCV, lærte vi AUTOMATIC VISION OBJECT TRACKING. Nu vil vi bruge vores PiCam til at genkende ansigter i realtid, som du kan se nedenfor: Dette projekt blev udført med dette fantastiske " Open Source Computer Vision Library & qu