Inhoudsopgave:

Deurbel met gezichtsherkenning - Ajarnpa
Deurbel met gezichtsherkenning - Ajarnpa

Video: Deurbel met gezichtsherkenning - Ajarnpa

Video: Deurbel met gezichtsherkenning - Ajarnpa
Video: Werkt de video-deurbel van Eufy beter dan Nest Hello? 2024, Juli-
Anonim
Deurbel met gezichtsherkenning
Deurbel met gezichtsherkenning

Motivatie

Onlangs is er in mijn land een golf van overvallen geweest die gericht zijn op ouderen in hun eigen huis. Meestal wordt de toegang verleend door de bewoners zelf, omdat de bezoekers hen ervan overtuigen dat ze verzorgers/verpleegkundigen zijn. Het is gewoon niet te bevatten hoe boos en verdrietig ik me voel bij deze verhalen. Thuis zou je eerste veilige haven moeten zijn en nog meer als je je al in een kwetsbare positie bevindt als je buiten bent. Met dit in mijn achterhoofd ben ik dit project begonnen.

Algemene informatie

Het deurbelsysteem is voornamelijk ontworpen voor ouderen of slechtzienden en is vrij eenvoudig in zijn werking. Kortom, de deurbelschakelaar activeert de camera om beeldmateriaal te verkrijgen. Vervolgens worden gezichten in de beelden gedetecteerd en gekoppeld aan een witte en zwarte lijst. De bewoner krijgt duidelijke visuele feedback door een duidelijk stoplichtdisplay. Hierbij geeft het groene, gele of rode licht aan dat de persoon(en) respectievelijk op de witte lijst, onbekend bij het systeem of op de zwarte lijst staan. Als het gele of rode lampje wordt geactiveerd, wordt de foto door een Telegram-bot verzonden om een familielid of verzorger te informeren/waarschuwingen.

Expertiseniveau

Het project is opgezet voor liefhebbers die vooral nieuwsgierig zijn naar het gebruik van computer vision en kunstmatige intelligentie. Deze instructable is geschreven voor een publiek van beginners, dus maak je geen zorgen als je geen ervaring hebt! Bovendien kan het project ook interessant zijn voor meer ervaren makers, aangezien de pijplijn zo is georganiseerd dat je deze zonder veel gedoe kunt uitbreiden met je eigen computervisie en gezichtsherkenningsideeën.

Stap 1: Materialen

Materialen
Materialen

Productlijst met minimale eisen:

Product Koppeling Opmerking
Raspberry Pi 3b RPi Link toont RPi 4 omdat het veel betere prestaties en bijna dezelfde prijs heeft als de RPi 3b.
Micro-SD Amazone Een micro SD-kaart van 16 GB of groter is voldoende. Maar de 16 GB-kaarten op Amazon zijn nu vrijwel dezelfde prijs als de 32 GB-kaarten.
Raspberry Pi-camera Amazone Camera v1 is goedkoper, maar v2 is beter en wordt langer ondersteund.
15-pins FPC-flexkabel Amazone De lengte hangt eigenlijk af van de omstandigheden van het doen van dit project. Als je gewoon een prototype wilt bouwen, zal de originele flexkabel het werk doen.
Voeding 5v micro-usb Adafruit Deze heeft elkaar nooit in de steek gelaten! Geweldige kwaliteit. (Niet op de foto)
Arcadeknoppen met ingebouwde LED Amazone Kies het gewenste formaat, maar het CAD-ontwerp is gebaseerd op 60 mm-knoppen
Weerstanden Amazone Je hebt maar een paar weerstanden van 1k en 100 ohm nodig. Normale 1/4W's zijn prima.
Condensatoren 0.1 uF Amazone Er zijn drie condensatoren nodig. (Niet op de foto)
Doorverbindingsdraden / lintkabel AmazoneAmazon Als je jezelf wat geld wilt besparen, kun je ook een oude lintkabel voor floppydrives gebruiken (zie foto).
Krimpkous / elektrische tape AmazoneAmazon

Hulpmiddelen die nodig zijn:

Hulpmiddel Essentieel? Opmerking
Soldeerbout Ja
Multimeter Ja
Draadstripper Ja Of je kunt een mes/schaar gebruiken.
Lasersnijder Nee
3D-printer Nee
Klemmen Nee Handig om de doos bij elkaar te houden in de testfase.

Opmerkingen:

Om de toegankelijkheid van het project te vergroten, besloot ik het te ontwikkelen met een Raspberry Pi 3b. Hoewel het de toegankelijkheid vergroot, vermindert het de mogelijkheden van de applicatie omdat RPi's niet zo snel zijn. Als je op zoek bent naar een single board computer die sneller is, kijk dan eens naar de NVIDIA Jetson Nano

Stap 2: Bedrading

Bedrading
Bedrading
Bedrading
Bedrading
Bedrading
Bedrading

Het schematische diagram is het meest informatief voor deze stap en spreekt voor zich. Als elektronica nieuw voor u is, kunt u de legenda gebruiken. De waarde van het onderdeel (indien van toepassing) staat vermeld in het schema. De foto's kunnen helpen om te zien hoe ik het circuit bouw. In principe heb ik alle componenten zo dicht mogelijk bij de arcade-knop aangesloten, wat resulteert in een duidelijk overzicht van wat er aan de hand is.

Opmerkingen:

  • Ik gebruik graag lintkabelconnectoren, omdat ze veel steviger zijn dan het gebruik van enkele jumperdraden.
  • Zoals gesuggereerd, heb ik een weggevangen lintkabel van een oude computer gebruikt. Dit is echter een beetje lastig, omdat je de configuratie van de kabel handmatig moet bevestigen. In dit project kwam ik er bijvoorbeeld achter dat sommige gaten met elkaar verbonden waren (waarschijnlijk gebruikt als grond voor de oorspronkelijke toepassing). Daarom moest ik later een andere kabel halen zoals je op de foto's kunt zien.

Stap 3: De behuizing bouwen

De behuizing bouwen
De behuizing bouwen
De behuizing bouwen
De behuizing bouwen
De behuizing bouwen
De behuizing bouwen
De behuizing bouwen
De behuizing bouwen

Camerabehuizing

Veel behuizingen voor de picamera zijn vrij te downloaden van internet. Dus ik kies ervoor om het wiel niet opnieuw uit te vinden en een eenvoudige maar mooie behuizing van internet te kiezen: thingiverse.com - Raspberry pi camerabehuizing/behuizing. (Shout-out naar de ontwerper VGer.)

Stoplichtbehuizing

Voor de stoplichtbehuizing ontwierp ik een doosje in Autodesk Fusion 360 (dat gratis te downloaden is, zie Opmerkingen) waar alle hardware in past. In de bijlage vindt u het bestand dat ik naar mijn plaatselijke lasersnijbedrijf heb gestuurd. Hierbij is het ontwerp gebaseerd op een plaatdikte van 6 mm. Als je echter dingen wilt aanpassen, kun je via deze link toegang krijgen tot allerlei bestandsformaten. Zoals op de foto's te zien is, kun je ook een kartonnen doos gebruiken als je geen lasersnijder hebt. Ik gebruikte de kartonnen doos op de foto voor prototyping en het werkt als een charme.

De montage is vrij eenvoudig:

  1. Monteer de Arcade-schakelaars.
  2. Zorg ervoor dat u de draden van de deurbel vrijhoudt.
  3. Sluit de lintkabel aan op de RPi.
  4. Schroef de RPi op het onderpaneel.
  5. Sluit de deurbeldraden aan op een draadconnector en monteer deze ook op het onderpaneel.
  6. Sluit de Picamera aan op de RPi.
  7. Boor een gat in een van de zijpanelen voor de deurbelschakeldraad en de RPi-stroomdraad.

De draadconnector wordt gebruikt als bevestigingspunt voor de bedrading van de deurbelschakelaar, zodat deze later op een bestaande deurbel kan worden bevestigd. Alles zit nu op zijn plaats en kan aan elkaar gelijmd worden. Maar misschien wilt u eerst de volgende stappen afronden om er zeker van te zijn dat alles werkt zoals het hoort.

Opmerkingen:

Autodesk Fusion 360 is gratis beschikbaar voor hobbyisten! Als u uw exemplaar wilt ontvangen, gaat u naar deze link: autodesk.com - Fusion 360 For Hobbyists. Er zijn enkele voorwaarden, dus zorg ervoor dat u ze leest en toepast. Het was mijn eerste project met Fusion 360 en ik heb niet veel ervaring met het gebruik van CAD-software, maar ik moet zeggen dat ik de software en alle extra tools die bij Fusion 360 worden geleverd erg leuk vind

Stap 4: De camera configureren

De camera configureren
De camera configureren
De camera configureren
De camera configureren
De camera configureren
De camera configureren

Er wordt aangenomen dat je Raspbian hebt geïnstalleerd en dat het in de GUI-modus draait. Als je Raspbian nog niet hebt geïnstalleerd, kun je dit artikel volgen: raspberrypi.org - Installatiekopieën van besturingssystemen. Als je Raspbian opstart, zou je een bureaublad moeten zien zoals weergegeven in de afbeeldingen.

Laten we de camera op de RPi configureren en kijken of het werkt! De hier beschreven methode is rechtstreeks afkomstig van de raspberrypi.org - Documentation. Laten we eerst updaten naar de nieuwste pakketten (inclusief camerafirmware) door de volgende opdrachten uit te voeren in een terminalvenster (zie afbeeldingen):

sudo apt update

sudo apt volledige upgrade

Vervolgens moet de camera worden ingeschakeld met het volgende commando:

sudo raspi-config

Ga in het menu naar 5. Interface-opties -> P1 Camera. Kies ervoor om de camera in te schakelen en de RPi opnieuw op te starten door het volgende uit te voeren:

opnieuw opstarten

De camera zou nu correct moeten zijn geconfigureerd. Het kan worden getest door een terminalvenster te openen en het volgende uit te voeren:

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

De afbeelding wordt opgeslagen in: /home/pi.

Stap 5: Docker instellen

Docker instellen
Docker instellen
Docker instellen
Docker instellen
Docker instellen
Docker instellen
Docker instellen
Docker instellen

Om de afhankelijkheid en installatiefouten te vermijden, heb ik besloten om een aangepaste Docker-image voor dit project te bouwen (zie wikipedia.org - Docker). Als je Docker nog nooit hebt gebruikt of ervan hebt gehoord, geen zorgen, ik zal stap voor stap uitleggen hoe je het in dit project kunt gebruiken. Sterker nog, het is supergemakkelijk! Als je dit project op een lokale installatie wilt uitvoeren (in plaats van in een Docker-container), zal ik je enkele tips geven. Maar het wordt ten zeerste aanbevolen om de Docker-afbeelding te gebruiken. Ik bouw het tenslotte om het je gemakkelijk te maken om dit project uit te voeren!

Wat is Docker?

Opmerking: dit deel biedt wat achtergrondinformatie over Docker, die u kunt overslaan als u alleen de code wilt uitvoeren.

Dit project is de eerste keer dat ik Docker gebruik en het is gewoon geweldig! Misschien heb je wel eens gehoord van virtualenv of Anaconda voor Python? Welnu, Docker lijkt redelijk op elkaar in die zin dat je eenvoudig pakketversies kunt beheren en verschillende Python-versies op één hostsysteem kunt uitvoeren door een andere omgeving te gebruiken (of container zoals het in Docker wordt genoemd). Maar in vergelijking met virtualenv en Anaconda is Docker veel krachtiger omdat het niet beperkt is tot alleen Python-pakketten. In een Docker-container kunt u inderdaad ook de pakketten van een gewenst besturingssysteem installeren en beheren. Denk bijvoorbeeld aan een website die u wilt migreren die een Python-webframework draait (bijv. Django) met een database (bijv. MySQL). Zonder een Docker-container zou je alle pakketten op de nieuwe server moeten installeren, een proces dat erg gevoelig is voor fouten en bugs. Aan de andere kant, wanneer uw website in Docker is gebouwd, is migreren in feite net zo eenvoudig als het verplaatsen van het afbeeldingsbestand/de bestanden naar de nieuwe server en het uitvoeren ervan. Zoals je je kunt voorstellen, is Docker ook erg handig voor projecten op Instructables;)! Wil je meer weten over Docker, kijk dan op hun website: docker.org - Docker: Enterprise Container Platform. Laten we nu aan de slag gaan met Docker!

Docker installeren

Installeer Docker door het volgende uit te voeren:

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

Vervolgens wordt de gebruiker toegevoegd aan de gebruikersgroep 'docker', die de rechten geeft om Docker uit te voeren. Dit wordt gedaan door:

sudo usermod -aG docker $USER

Nu zou u Docker moeten kunnen uitvoeren. Dit kan worden gevalideerd door de hello-world-afbeelding uit te voeren:

docker run hallo-wereld

Laten we ten slotte de Docker-afbeelding ophalen die alle afhankelijkheden bevat die nodig zijn om de Python-scripts van de deurbel uit te voeren. Dit proces kan enige tijd duren omdat de afbeelding vrij groot is (~1,5 GB). uitvoeren:

docker pull erientes/deurbel

Opmerking: het Docker-bestand is te vinden in de deurbelrepository op Github. Nu is alles klaar om de deurbelscripts uit te voeren, wat in de volgende stap zal worden besproken.

Lokale installatie

Nogmaals, ik zou het ten zeerste aanbevelen om de Docker-image te gebruiken in plaats van een lokale installatie. Maar om deze tutorial compleet te maken, zal ik nu enkele stappen beschrijven die ik heb genomen voor de lokale installatie.

Om de code te kunnen uitvoeren, moet de python-versie >= 3.5 zijn (ik gebruikte python 3.5.3) en moeten de volgende pakketten geïnstalleerd zijn:

  • gezichtsherkenning
  • picamera
  • numpy
  • Kussen
  • python-telegram-bot
  • RPi. GPIO

Deze link is erg handig: Github - Installeer dlib en face_recognition op een Raspberry Pi. Hier zijn echter enkele kanttekeningen bij te plaatsen: 1) Pillow heeft ten minste Python 3.5 nodig, die volgens deze methode niet wordt geïnstalleerd. 2) Ook zullen niet alle pakketten die nodig zijn in het deurbelproject worden geïnstalleerd door deze methode te volgen. Je zou het echter moeten kunnen installeren door simpelweg pip3 te gebruiken.

Stap 6: De deurbelscripts uitvoeren

De deurbelscripts uitvoeren
De deurbelscripts uitvoeren
De deurbelscripts uitvoeren
De deurbelscripts uitvoeren
De deurbelscripts uitvoeren
De deurbelscripts uitvoeren

Download de scripts

De scripts kunnen handmatig worden gedownload van: github.com - Erientes/doorbell. Of als je Git hebt geïnstalleerd, voer je uit:

git clone

Aliassen maken

Laten we nu, om ons leven een beetje gemakkelijker te maken, enkele aliassen maken om de scripts uit te voeren. uitvoeren:

leafpad ~/.bashrc

Voeg de volgende regels toe en sla het bestand op:

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'

Testscripts

Om te testen of alles goed is geïnstalleerd, opent u een nieuwe terminal en voert u het volgende uit:

doorbell_run voorbeelden/0_test_installation.py

Het resultaat zou gewoon een bericht in het terminalvenster moeten zijn met de tekst 'Deurbelinstallatie succesvol beëindigd!'. Om te testen of de camera toegankelijk is voor de Docker-container, voert u het volgende uit:

doorbell_run voorbeelden/1_test_camera.py

Door 1_test_camera.py uit te voeren, wordt een foto gemaakt en opgeslagen als 'test.jpg', te vinden in /home/pi/doorbell. Ten slotte kunnen de LED-stuurprogramma's worden getest door het volgende uit te voeren:

doorbell_run voorbeelden/2_test_voicehat_drivers.py

Wanneer dit script wordt uitgevoerd, moet de LED in de arcade-schakelaar reageren wanneer de knop wordt ingedrukt.

Doorbell-scripts uitvoeren

Om de Doorbell-scripts uit te voeren, moeten eerst de inloggegevens van de Telegram-bot worden verkregen. Installeer Telegram op je telefoon en ga naar telegram.me - Botfather. Begin een gesprek en voer in:

/nieuwebot

Vul een naam en een gebruikersnaam in voor de bot. Daarna krijgt u het toegangstoken. Kopieer die waarde naar het bestand 'credentials_telegram_template.py' in /home/pi/doorbell en sla het op in een nieuw bestand met de naam 'credentials_telegram.py'. Start ten slotte een gesprek met de bot die u zojuist hebt gemaakt door op de link te klikken die Botfather u biedt.

Laten we tot slot de deurbel met gezichtsherkenning gebruiken:

doorbell_run main.py

Opmerkingen:

Als je meer wilt weten over hoe de code werkt, bekijk dan de opmerkingen in de scripts zelf. Als je een vraag hebt over de code, neem dan contact met me op via Github

Stap 7: De deurbel gebruiken

Image
Image
De deurbel gebruiken
De deurbel gebruiken
De deurbel gebruiken
De deurbel gebruiken

Laten we het deurbelscript uitvoeren door het volgende uit te voeren:

doorbell_run main.py Nadat de pakketten zijn geladen, worden de scripts inactief. Er kunnen grofweg 2 dingen gebeuren:

  1. Iemand belt aan.
  2. Iemand is toegevoegd aan de witte lijst.

Iemand belt aan

In dit geval begint het script foto's te maken totdat het een foto maakt waarin een gezicht wordt gedetecteerd. Na detectie worden enkele methoden uit het python-pakket 'face_recognition' aangeroepen om een 128-codering van het gezicht te berekenen. Vervolgens wordt de verkregen codering vergeleken met de codering in whitelist.csv en blacklist.csv. De mogelijke uitkomsten resulteren in het volgende antwoord:

Op witte lijst? Op zwarte lijst? Antwoord
Ja Nee Groen licht gaat aan.
Ja Ja Geel lampje gaat branden. De deurbelcamera stuurt foto's naar Telegram-bot met oranje pictogram. Deze status kan optreden als iemand aan beide lijsten is toegevoegd. Bijvoorbeeld wanneer iemand eerst welkom was, maar later op de zwarte lijst werd gezet.
Nee Nee Geel lampje gaat branden. De deurbelcamera stuurt foto's naar Telegram-bot met oranje pictogram.
Nee Ja Rood licht gaat aan. De deurbelcamera stuurt foto's naar Telegram-bot met rood pictogram.

Iemand is toegevoegd aan de witte lijst

Om iemand aan de witte lijst toe te voegen, drukt u op de gele knop van het verkeerslicht wanneer de deurbel in de ruststand staat. Eerst gaat het gele lampje branden. Als het groene lampje 3 keer knippert, is het gezicht van de persoon succesvol toegevoegd aan de witte lijst. Als het groene lampje niet 3 keer knippert, is de poging mislukt. Druk in dat geval nogmaals op de gele knop. Je kunt eenvoudig controleren of het gelukt is door aan te bellen en te controleren of het groene licht is gepasseerd.

Hoe voeg je iemand toe aan de zwarte lijst?

Uiteraard komen mensen met slechte bedoelingen niet langs om ons een foto van hun gezicht te geven. In plaats daarvan kun je afbeeldingen van beruchte personen die (bijvoorbeeld) door de politie zijn gepubliceerd, toevoegen aan de map img/blacklist. Elk uur wordt deze map gecontroleerd op nieuwe afbeeldingen. Als er een nieuwe afbeelding is, wordt de gezichtscodering berekend en toegevoegd aan blacklist.csv. De afbeelding wordt dan hernoemd en verplaatst naar de map /img/blacklist/encoded.

Opmerkingen:

  • Het bedienen van de scripts door in te loggen op de RPi biedt veel meer controle en informatie, maar de basisbediening en informatie kunnen worden verkregen door uitsluitend het verkeerslichtdisplay te gebruiken.
  • Gezichtsherkenning wordt geïmplementeerd met behulp van het python-pakket 'face_recognition'. Dit pakket is gebaseerd op Dlib dat een geavanceerd gezichtsherkenningsalgoritme bevat, dat een nauwkeurigheid van 99,38% heeft op de Labeled Faces in the Wild-benchmark (bron: dlib.net - High Quality Face Recognition with Deep Metric Learning).
Assistive Tech-wedstrijd
Assistive Tech-wedstrijd
Assistive Tech-wedstrijd
Assistive Tech-wedstrijd

Eerste prijs in de Assistive Tech-wedstrijd

Aanbevolen: