Sadržaj:

Zvono na vratima s prepoznavanjem lica: 7 koraka (sa slikama)
Zvono na vratima s prepoznavanjem lica: 7 koraka (sa slikama)

Video: Zvono na vratima s prepoznavanjem lica: 7 koraka (sa slikama)

Video: Zvono na vratima s prepoznavanjem lica: 7 koraka (sa slikama)
Video: Юлька_Рассказ_Слушать 2024, Srpanj
Anonim
Zvono na vratima s prepoznavanjem lica
Zvono na vratima s prepoznavanjem lica

Motivacija

Nedavno je u mojoj zemlji došlo do vala pljački koje su usmjerene na starije osobe u njihovim domovima. Obično pristup odobravaju sami stanari jer ih posjetitelji uvjeravaju da su oni njegovatelji/medicinske sestre. Nema više riječi, koliko se ljute i tužne osjećaju u meni. Dom bi trebao biti vaše prvo sigurno utočište, a još više ako ste već u ranjivom položaju dok ste vani. S tim na umu, započeo sam ovaj projekt.

Opće informacije

Sustav zvona na vratima uglavnom je namijenjen starijim osobama ili osobama s oštećenjem vida i prilično je jednostavan u svom radu. Ukratko, prekidač za zvono na vratima aktivira kameru za snimanje. Zatim se lica na snimci detektiraju i uspoređuju s bijelom i crnom listom. Putnik dobiva jasne vizualne povratne informacije jasnim prikazom na semaforu. Ovim, zeleno, žuto ili crveno svjetlo označava da su osobe na bijeloj listi, nepoznate sustavu, odnosno na crnoj listi. Ako se upali žuto ili crveno svjetlo, fotografiju šalje bot Telegrama kako bi obavijestio/upozorio rođaka ili skrbnika.

Razina stručnosti

Projekt je postavljen za entuzijaste koji su osobito znatiželjni u korištenju računalnog vida i umjetne inteligencije. Ovo uputstvo je napisano za publiku početnike, stoga ne brinite ako nemate iskustva! Nadalje, projekt može biti zanimljiv i iskusnijim proizvođačima budući da je cjevovod organiziran na način da ga možete proširiti vlastitom računalnom vizijom i idejama za prepoznavanje lica bez mnogo muke.

Korak 1: Materijali

Materijali
Materijali

Popis proizvoda s minimalnim zahtjevima:

Proizvod Veza Komentar
Malina Pi 3b RPi Link prikazuje RPi 4 jer ima bolje performanse i gotovo jednaku cijenu kao RPi 3b.
Mikro SD Amazon Mikro SD kartica od 16 GB ili veća odradit će posao. No, kartice od 16 GB na Amazonu sada su prilično iste cijene kao i kartice od 32 GB.
Fotoaparat Raspberry Pi Amazon Kamera v1 je jeftinija, ali v2 je bolja i bit će dulje podržana.
15 -polni FPC fleksibilni kabel Amazon Duljina zapravo ovisi o okolnostima izvođenja ovog projekta. Ako samo želite izgraditi prototip, originalni fleksibilni kabel će odraditi posao.
Napajanje 5v micro usb Adafruit Ovaj nikad nije iznevjerio! Izvrsna kvaliteta. (Nema na fotografiji)
Arkadni gumbi s ugrađenom LED diodom Amazon Odaberite veličinu koju želite, ali CAD dizajn temelji se na gumbima od 60 mm
Otpornici Amazon Trebate samo par otpornika 1k i 100 ohma. Redoviti 1/4W su u redu.
Kondenzatori 0,1 uF Amazon Potrebna su tri kondenzatora. (Nema na fotografiji)
Kratkospojne žice / vrpčni kabel AmazonAmazon Ako želite uštedjeti nešto novca, možete upotrijebiti i stari vrpčani kabel za disketu (pogledajte fotografiju).
Cijev za skupljanje / električna traka AmazonAmazon

Potrebni alati:

Alat Bitno? Komentar
Lemilica Da
Multimetar Da
Skidač žice Da Ili možete koristiti nož/škare.
Laserski rezač Ne
3D pisač Ne
Stezaljke Ne Korisno za držanje kutije zajedno u fazi testiranja.

Opaske:

Kako bih povećao pristupačnost projekta, odlučio sam ga razviti pomoću Raspberry Pi 3b. Iako povećava pristupačnost, smanjuje mogućnosti aplikacije budući da RPi nisu tako brzi. Ako tražite brže računalo s jednim računalom, možda biste trebali pogledati NVIDIA Jetson Nano

Korak 2: Ožičenje

Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje

Shematski dijagram je najinformativniji za ovaj korak i vrlo je razumljiv. U slučaju da ste tek počeli s elektronikom, možete upotrijebiti sliku legende. Vrijednost komponente (ako postoji) navedena je u shematskom dijagramu. Fotografije mogu pomoći da vidite kako ja gradim krug. U osnovi, spojio sam sve komponente što je moguće bliže arkadnom gumbu što rezultira jasnim pregledom onoga što se događa.

Opaske:

  • Zaista volim koristiti konektore za vrpčane kabele, jer su oni mnogo čvršći od korištenja jednostrukih kratkospojnika.
  • Kao što je predloženo, koristio sam očišćeni vrpčani kabel sa starog računala. Ovo je ipak malo nezgodno jer ćete morati ručno potvrditi konfiguraciju kabela. U ovom sam projektu, na primjer, otkrio da su neke rupe međusobno povezane (vjerojatno korištene kao tlo za izvornu primjenu). Stoga sam kasnije morao nabaviti drugi kabel kao što možete vidjeti na slikama.

Korak 3: Izrada kućišta

Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta

Kućište kamere

Mnoga kućišta za pikameru mogu se slobodno preuzeti s interneta. Stoga odlučujem ne izmišljati kotač i odabirem osnovno, ali lijepo kućište s interneta: thingiverse.com - Raspberry pi kućište/kućište kamere. (Poziv dizajneru VGeru.)

Kućište semafora

Za kućište semafora dizajnirao sam malu kutiju u Autodesku Fusion 360 (koja se može slobodno preuzeti, vidi Napomene) koja odgovara cijelom hardveru. U privitku možete pronaći datoteku koju sam poslao svojoj lokalnoj tvrtki za lasersko rezanje. Ovime se dizajn temelji na debljini ploče od 6 mm. Međutim, ako želite prilagoditi stvari, možete pristupiti svim vrstama formata datoteka pomoću ove veze. Kao što je prikazano na slikama, možete koristiti i kartonsku kutiju ako nemate pristup laserskom rezaču. Koristio sam kartonsku kutiju na slici za izradu prototipa i radi kao šarm.

Sastavljanje je prilično jednostavno:

  1. Montirajte arkadne prekidače.
  2. Pazite da žice za zvono na vratima ne budu slobodne.
  3. Spojite vrpčani kabel na RPi.
  4. Pričvrstite RPi na donju ploču.
  5. Priključite žice zvona na vrata u žičani konektor i također ih montirajte na donju ploču.
  6. Spojite Picameru na RPi.
  7. Izbušite rupu na jednoj od bočnih ploča za žicu za uključivanje zvona na vratima i žicu za napajanje RPi.

Žičani konektor koristi se kao mjesto za pričvršćivanje žica prekidača zvona na vratima, tako da se kasnije može pričvrstiti na postojeće zvono na vratima. Sada je sve na svom mjestu i može se zalijepiti. Međutim, možda biste htjeli dovršiti sljedeće korake kako biste bili sigurni da sve funkcionira onako kako bi trebalo biti.

Opaske:

Autodesk Fusion 360 slobodno je dostupan za ljubitelje! Ako želite dobiti svoj primjerak, posjetite ovu vezu: autodesk.com - Fusion 360 For Hobbyists. Postoje neki pojmovi pa ih svakako pročitajte i primijenite. To je bio moj prvi projekt s Fusion 360 i nemam puno iskustva u korištenju CAD softvera, ali moram reći da mi se softver i svi dodatni alati koji dolaze s Fusion 360 jako sviđaju

Korak 4: Konfiguriranje kamere

Konfiguriranje kamere
Konfiguriranje kamere
Konfiguriranje kamere
Konfiguriranje kamere
Konfiguriranje kamere
Konfiguriranje kamere

Pretpostavlja se da imate instaliran Raspbian i da radi u GUI načinu rada. Ako još niste instalirali Raspbian, možete slijediti ovaj članak: raspberrypi.org - Instaliranje slika operacijskog sustava. Ako pokrenete Raspbian, trebali biste vidjeti radnu površinu kao što je prikazano na slikama.

Postavimo kameru na RPi i vidimo radi li! Ovdje opisana metoda izravno je iz raspberrypi.org - Dokumentacija. Prvo, ažurirajmo na najnovije pakete (uključujući firmver kamere) izvršavanjem sljedećih naredbi u prozoru terminala (vidi slike):

sudo apt ažuriranje

sudo apt potpuna nadogradnja

Zatim kameru morate omogućiti pomoću sljedeće naredbe:

sudo raspi-config

U izborniku idite na 5. Opcije sučelja -> P1 kamera. Odaberite omogućiti kameru i ponovno pokrenuti RPi izvršavanjem:

ponovno podizanje sustava

Kamera bi sada trebala biti ispravno konfigurirana. Može se testirati otvaranjem terminala i izvršiti sljedeće:

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

Slika se sprema u: /home /pi.

Korak 5: Postavljanje Dockera

Postavljanje Dockera
Postavljanje Dockera
Postavljanje Dockera
Postavljanje Dockera
Postavljanje Dockera
Postavljanje Dockera
Postavljanje Dockera
Postavljanje Dockera

Kako bih izbjegao ovisnosti i pogreške pri instalaciji, odlučio sam izgraditi prilagođenu sliku Dockera za ovaj projekt (vidi wikipedia.org - Docker). Ako nikada niste koristili ili čuli za Docker, bez brige, objasnit ću vam korak po korak kako ga koristiti u ovom projektu. Zapravo, super je jednostavno! U slučaju da želite pokrenuti ovaj projekt na lokalnoj instalaciji (umjesto u Docker spremniku), dat ću vam nekoliko savjeta. No, vrlo se preporučuje upotreba slike Docker. Uostalom, ja sam ga izgradio kako bih vam olakšao vođenje ovog projekta!

Što je Docker?

Napomena: ovaj dio pruža neke osnovne informacije o Dockeru, koje se mogu preskočiti ako samo želite pokrenuti kôd.

Ovaj projekt sam prvi put koristio Docker i jednostavno je fenomenalan! Možda ste čuli za virtualenv ili Anacondu za Python? Pa, Docker je prilično sličan u smislu da možete jednostavno upravljati verzijama paketa i pokretati različite verzije Pythona na jednom host sistemu pomoću drugog okruženja (ili spremnika kako se to naziva u Dockeru). No, u usporedbi s virtualenvom i Anakondom, Docker je znatno moćniji jer nije ograničen samo na sadržaje Python paketa. Doista, u Docker spremniku možete instalirati i upravljati i paketima željenog operacijskog sustava. Na primjer, razmislite o web stranici koju želite migrirati koja pokreće Python web okvir (npr. Django) s bazom podataka (npr. MySQL). Bez Docker spremnika morali biste instalirati sve pakete na novi poslužitelj, proces koji je vrlo sklon pogreškama i greškama. S druge strane, kada je vaša web stranica izgrađena u Dockeru, migracija je u osnovi jednostavna kao i premještanje slikovne datoteke/datoteka na novi poslužitelj i njihovo pokretanje/pokretanje. Kao što možete zamisliti, Docker je vrlo koristan i za projekte na Instructables;)! Ako želite saznati više o Dockeru, posjetite njihovu web stranicu: docker.org - Docker: Enterprise Container Platform. Ajmo sada pokrenuti se s Dockerom!

Instaliranje Dockera

Instalirajte Docker izvršavanjem:

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

Zatim se korisnik dodaje u korisničku skupinu 'docker' koja daje prava za pokretanje Dockera. To čine:

sudo usermod -aG docker $ USER

Sada biste trebali moći pokrenuti Docker. To se može potvrditi pokretanjem slike hello-world:

docker pokrenuti hello-world

Na kraju, povucimo sliku Dockera koja sadrži sve ovisnosti potrebne za pokretanje Python skripti za zvono na vratima. Ovaj proces može potrajati jer je slika prilično velika (~ 1,5 GB). Izvršiti:

docker pull erientes/zvono na vratima

Napomena: Dockerfile se može pronaći u spremištu zvona na vratima na Githubu. Sada je sve spremno za pokretanje skripti zvona na vratima, o čemu će biti riječi u sljedećem koraku.

Lokalna instalacija

Opet, toplo bih preporučio korištenje slike Dockera umjesto lokalne instalacije. No kako bi ovaj vodič bio dovršen, sada ću opisati neke korake koje sam poduzeo za lokalnu instalaciju.

Da biste mogli pokrenuti kôd, verzija pythona trebala bi biti> = 3.5 (koristio sam python 3.5.3), a potrebno je instalirati sljedeće pakete:

  • prepoznavanje lica
  • pikamera
  • numpy
  • Jastuk
  • python-telegram-bot
  • RPi. GPIO

Ova je veza vrlo korisna: Github - Instalirajte dlib i face_recognition na Raspberry Pi. Međutim, ovdje postoje neke opaske: 1) Jastuku je potreban najmanje Python 3.5, koji se neće instalirati na ovaj način. 2) Također, neće svi paketi koji su potrebni u projektu zvona na vratima biti instalirani slijedeći ovu metodu. Međutim, trebali biste ga moći instalirati jednostavnom upotrebom pip3.

Korak 6: Pokretanje skripti zvona na vratima

Pokretanje scenarija zvona na vratima
Pokretanje scenarija zvona na vratima
Pokretanje scenarija zvona na vratima
Pokretanje scenarija zvona na vratima
Pokretanje scenarija zvona na vratima
Pokretanje scenarija zvona na vratima

Nabavite skripte

Skripte se mogu ručno preuzeti sa: github.com - Erientes/zvono na vratima. Ili, ako imate instaliran Git, izvedite:

git clone

Stvorite pseudonime

Sada, kako bismo si olakšali život, napravimo neke pseudonime za pokretanje skripti. Izvršiti:

leafpad ~/.bashrc

Dodajte sljedeće retke i spremite datoteku:

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

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

Test skripte

Da biste provjerili je li sve ispravno instalirano, otvorite novi terminal i izvedite:

primjeri zvonjenja na vratima/0_test_installation.py

Rezultat bi jednostavno trebala biti poruka u prozoru terminala koja kaže 'Instalacija zvona je uspješno završila!'. Da biste provjerili može li se kameri pristupiti iz Docker spremnika, pokrenite:

primjeri zvonjenja na vratima/1_test_camera.py

Pokretanjem 1_test_camera.py fotografija će biti snimljena i spremljena kao 'test.jpg', koju možete pronaći u/home/pi/zvonce na vratima. Na kraju, LED upravljački programi mogu se testirati izvršavanjem:

primjeri zvonjenja na vratima/2_test_voicehat_drivers.py

Kada se ova skripta izvodi, LED dioda u arkadnom prekidaču trebala bi reagirati kada se pritisne gumb.

Pokretanje skripti zvona na vratima

Da biste pokrenuli skripte Doorbell, najprije morate dobiti vjerodajnice za Telegram bota. Instalirajte Telegram na svoj telefon i idite na telegram.me - Botfather. Započnite razgovor i unesite:

/newbot

Unesite ime i korisničko ime za robota. Nakon toga dobit ćete pristupni token. Kopirajte tu vrijednost u datoteku 'credentials_telegram_template.py' u/home/pi/doorbell i spremite je u novu datoteku pod nazivom 'credentials_telegram.py'. Na kraju, započnite razgovor s botom koji ste upravo stvorili klikom na vezu koju vam Botfather pruža.

Na kraju, pokrenimo zvono na vratima s prepoznavanjem lica:

zvono na vratima main.py

Opaske:

Ako želite saznati više o tome kako kôd radi, pogledajte komentare u samim skriptama. Ako imate pitanja o kodu, kontaktirajte me putem Github -a

Korak 7: Upotreba zvona na vratima

Image
Image
Korištenje zvona na vratima
Korištenje zvona na vratima
Korištenje zvona na vratima
Korištenje zvona na vratima

Pokrenimo skriptu zvona na vratima izvršavajući:

zvono na vratima main.py Nakon učitavanja paketa, skripte miruju. U osnovi se mogu dogoditi 2 stvari:

  1. Netko pozvoni na vrata.
  2. Netko je dodan na popis dopuštenih.

Netko pozvoni na vrata

U tom slučaju, skripta će početi fotografirati sve dok ne snima fotografiju na kojoj se detektira lice. Nakon otkrivanja, neke metode iz python paketa 'face_recognition' pozivaju se za izračunavanje 128 kodiranja lica. Zatim se dobiveno kodiranje uspoređuje s kodiranjima na whitelist.csv i blacklist.csv. Mogući ishodi rezultiraju sljedećim odgovorom:

Na bijeloj listi? Na crnoj listi? Odgovor
Da Ne Uključuje se zeleno svjetlo.
Da Da Uključuje se žuto svjetlo. Kamera na vratima šalje fotografije Telegram botu s narančastom ikonom. Ovo stanje se može dogoditi ako je netko dodan na oba popisa. Na primjer, kada je netko isprva bio dobrodošao, a kasnije je stavljen na crnu listu.
Ne Ne Uključuje se žuto svjetlo. Kamera na vratima šalje fotografije Telegram botu s narančastom ikonom.
Ne Da Uključuje se crveno svjetlo. Kamera na vratima šalje fotografije Telegram botu s crvenom ikonom.

Netko je dodan na popis dopuštenih

Da biste nekoga dodali na popis dopuštenih, pritisnite žuti gumb semafora kada je zvono na vratima u stanju mirovanja. Prvo će se upaliti žuto svjetlo. Ako zeleno svjetlo trepne 3 puta, lice osobe je uspješno dodano na bijelu listu. Ako zeleno svjetlo ne trepne 3 puta, pokušaj nije bio uspješan. U tom slučaju ponovno pritisnite žuti gumb. Možete li lako provjeriti je li bio uspješan, pozvonite na vrata i provjerite je li zeleno svjetlo prošlo.

Kako nekoga dodati na crnu listu?

Očigledno, ljudi s lošim namjerama neće proći da nam daju fotografiju svog lica. Umjesto toga, možete dodati slike zloglasnih ljudi koje je (na primjer) policija objavila u mapu img/blacklist. Svakog sata ova se mapa provjerava ima li novih slika. Ako postoji nova slika, kodiranje lica se izračunava i dodaje na crnu listu.csv. Slika se zatim preimenuje i premješta u mapu/img/blacklist/encoded.

Opaske:

  • Rukovanje skriptama prijavom u RPi pruža mnogo više kontrole i informacija, ali osnovne kontrole i informacije mogu se dobiti isključivo korištenjem semafora.
  • Prepoznavanje lica provodi se pomoću python paketa 'face_recognition'. Ovaj paket temelji se na Dlibu koji sadrži najsuvremeniji algoritam za prepoznavanje lica koji izvodi točnost od 99,38% na referentnoj vrijednosti Labeled Faces in the Wild (izvor: dlib.net-Prepoznavanje lica visoke kvalitete s dubokim metričkim učenjem).
Natjecanje u pomoćnoj tehnici
Natjecanje u pomoćnoj tehnici
Natjecanje u pomoćnoj tehnici
Natjecanje u pomoćnoj tehnici

Prva nagrada na natječaju za pomoćnu tehnologiju

Preporučeni: