Sadržaj:

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

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

Video: Zvono na vratima sa prepoznavanjem lica: 7 koraka (sa slikama)
Video: Я есть. Ты есть. Он есть_Рассказ_Слушать 2024, Juli
Anonim
Zvono na vratima sa prepoznavanjem lica
Zvono na vratima sa prepoznavanjem lica

Motivacija

Nedavno je u mojoj zemlji došlo do talasa 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ćam zbog ovih priča. 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. Imajući ovo na umu, započeo sam ovaj projekat.

Opće informacije

Sistem zvona na vratima je uglavnom dizajniran za starije osobe ili osobe sa oštećenim vidom i prilično je jednostavan u svom radu. Ukratko, prekidač za zvono na vratima pokreće kameru da dobije snimke. Zatim se lica na snimcima otkriju i uparuju s bijelom i crnom listom. Putnik dobija jasne vizuelne povratne informacije jasnim prikazom na semaforu. Ovim, zeleno, žuto ili crveno svjetlo označava da su osobe na bijeloj listi, nepoznate sistemu, odnosno na crnoj listi. Ako se upali žuto ili crveno svjetlo, fotografiju šalje telegram bot kako bi obavijestio/upozorio rođaka ili čuvara.

Nivo stručnosti

Projekt je postavljen za entuzijaste koji su posebno znatiželjni u korištenju računarskog 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 jer je cjevovod organiziran na način da ga možete proširiti vlastitom računarskom vizijom i idejama za prepoznavanje lica bez mnogo muke.

Korak 1: Materijali

Materijali
Materijali

Lista proizvoda sa minimalnim zahtjevima:

Proizvod Veza Komentar
Raspberry Pi 3b RPi Link prikazuje RPi 4 jer ima bolje performanse i gotovo jednaku cijenu kao RPi 3b.
Micro SD Amazon Mikro SD kartica od 16 GB ili veća odradit će posao. Ali kartice od 16 GB na Amazonu sada su prilično iste cijene kao i kartice od 32 GB.
Raspberry Pi kamera Amazon Kamera v1 je jeftinija, ali v2 je bolja i bit će duže podržana.
15 -polni FPC fleksibilni kabel Amazon Trajanje zapravo ovisi o okolnostima izvođenja ovog projekta. Ako samo želite izgraditi prototip, originalni fleksibilni kabel će obaviti posao.
Napajanje 5v micro usb Adafruit Ovaj nikad nije iznevjerio! Odlična kvaliteta. (Nema na fotografiji)
Arkadni tasteri sa ugrađenom LED diodom Amazon Odaberite željenu veličinu, ali CAD dizajn temelji se na gumbima od 60 mm
Otpornici Amazon Trebate samo par otpornika od 1 k i 100 ohma. Obični 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 kabel s vrpcom za disketu (pogledajte fotografiju).
Cijev za skupljanje / električna traka AmazonAmazon

Alati koji su potrebni:

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

Napomene:

Kako bih povećao pristupačnost projekta, odlučio sam ga razviti koristeći Raspberry Pi 3b. Iako povećava pristupačnost, smanjuje mogućnosti aplikacije jer RPi -ji nisu tako brzi. Ako tražite brži single board računar, trebali biste 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 prilično je razumljiv. U slučaju da ste tek počeli s elektronikom, možete upotrijebiti legendarnu sliku. Vrijednost komponente (ako postoji) navedena je u shematskom dijagramu. Fotografije mogu pomoći da vidite kako ja gradim kolo. U osnovi, spojio sam sve komponente što je moguće bliže arkadnom gumbu što rezultira jasnim pregledom onoga što se događa.

Napomene:

  • Zaista volim koristiti konektore za vrpčane kabele, jer su oni mnogo čvršći od upotrebe jednostrukih žica.
  • Kao što je predloženo, koristio sam očišćen ribbon kabel sa starog računara. Ovo je ipak malo nezgodno jer ćete morati ručno potvrditi konfiguraciju kabela. Na primjer, u ovom projektu sam otkrio da su neke rupe međusobno povezane (vjerovatno se koriste kao podloga za originalnu aplikaciju). 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. Odlučio sam 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 Autodesk Fusion 360 (koja se može besplatno preuzeti, vidi Napomene) koja odgovara cijelom hardveru. U prilogu možete pronaći datoteku koju sam poslao svojoj lokalnoj kompaniji za lasersko rezanje. Ovim 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 montirajte ih na donju ploču.
  6. Priključite 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. Sve je sada 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.

Napomene:

Autodesk Fusion 360 je besplatno 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 operativnog sistema. 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 (pogledajte slike):

sudo apt update

sudo apt potpuna nadogradnja

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

sudo raspi-config

U meniju idite na 5. Opcije povezivanja -> P1 kamera. Odaberite da omogućite kameru i ponovo pokrenete RPi izvršavanjem:

reboot

Kamera bi sada trebala biti pravilno konfigurirana. Može se testirati otvaranjem prozora terminala i izvršenjem:

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

Slika je sačuvana na: /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 greške pri instalaciji, odlučio sam izgraditi prilagođenu sliku Dockera za ovaj projekt (pogledajte wikipedia.org - Docker). Bez brige, ako nikada niste koristili ili čuli za Docker, 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 kontejneru), dat ću vam nekoliko savjeta. Ali se toplo preporučuje upotreba slike Docker. Uostalom, ja sam ga izgradio kako bih vam olakšao vođenje ovog projekta!

Šta 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 koristeći različito okruženje (ili spremnik kako se to naziva u Dockeru). No, u usporedbi s virtualenv i Anacondom, Docker je znatno moćniji jer nije ograničen samo na sadržaje Python paketa. Zaista, u Docker kontejneru možete instalirati i upravljati i paketima željenog operativnog sistema. Na primjer, razmislite o web stranici koju želite migrirati koja pokreće Python web okvir (npr. Django) s bazom podataka (npr. MySQL). Bez Docker kontejnera morali biste instalirati sve pakete na novi server, proces koji je vrlo sklon greš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 sad krenuti s radom s Dockerom!

Instaliranje Dockera

Instalirajte Docker izvršavanjem:

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

Zatim se korisnik dodaje u korisničku grupu 'docker', koja daje prava za pokretanje Dockera. To rade:

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 Docker sliku koja sadrži sve zavisnosti potrebne za pokretanje Python skripti za zvono na vratima. Ovaj proces može potrajati jer je slika prilično velika (~ 1,5 GB). Izvršite:

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) i potrebno je instalirati sljedeće pakete:

  • face_recognition
  • picamera
  • numpy
  • Jastuk
  • python-telegram-bot
  • RPi. GPIO

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

Korak 6: Pokretanje skripti zvona na vratima

Pokretanje skripti zvona na vratima
Pokretanje skripti zvona na vratima
Pokretanje skripti zvona na vratima
Pokretanje skripti zvona na vratima
Pokretanje skripti zvona na vratima
Pokretanje skripti zvona na vratima

Preuzmite skripte

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

git clone

Kreirajte pseudonime

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

leafpad ~/.bashrc

Dodajte sljedeće redove i spremite datoteku:

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

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

Test skripte

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

doorbell_run examples/0_test_installation.py

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

primjer zvona na vratima/1_test_camera.py

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

primjer zvona na vratima/2_test_voicehat_drivers.py

Kada je ova skripta aktivna, LED dioda u arkadnom prekidaču bi trebala reagirati kada se pritisne dugme.

Pokretanje skripti za zvono na vratima

Za pokretanje Doorbell skripti, prvo je potrebno pribaviti vjerodajnice za Telegram bota. Instalirajte Telegram na svom telefonu i idite na telegram.me - Botfather. Započnite razgovor i unesite:

/newbot

Unesite ime i korisničko ime za robota. Nakon toga će vam biti dodijeljen 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 sa prepoznavanjem lica:

doorbell_run main.py

Napomene:

Ako želite saznati više o tome kako kod funkcionira, pogledajte komentare u samim skriptama. Ako imate pitanja u vezi koda, kontaktirajte me putem Github -a

Korak 7: Upotreba zvona na vratima

Image
Image
Upotreba zvona na vratima
Upotreba zvona na vratima
Upotreba zvona na vratima
Upotreba zvona na vratima

Pokrenimo skriptu zvona na vratima izvršavanjem:

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

  1. Neko pozvoni na vrata.
  2. Neko je dodat na bijelu listu.

Neko pozvoni na vrata

U ovom slučaju, skripta će početi snimati fotografije sve dok ne snima fotografiju na kojoj se detektira lice. Nakon otkrivanja, pozivaju se neke metode iz python paketa 'face_recognition' 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 svetlo. Kamera sa zvona na vratima šalje fotografije Telegram botu sa narandžastom ikonom. Ovo stanje se može dogoditi ako je neko dodan na obje liste. Na primjer, kada je neko isprva bio dobrodošao, a kasnije je stavljen na crnu listu.
Ne Ne Uključuje se žuto svetlo. Kamera sa zvona na vratima šalje fotografije Telegram botu sa narandžastom ikonom.
Ne Da Uključuje se crveno svjetlo. Kamera na vratima šalje fotografije Telegram botu sa crvenom ikonom.

Neko je dodat na bijelu listu

Da biste nekoga dodali na bijelu listu, pritisnite žuto dugme 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 ponovo pritisnite žuto dugme. Možete li lako provjeriti je li uspjelo tako što ćete pozvoniti na vrata i provjeriti je li zeleno svjetlo prošlo.

Kako dodati nekoga na crnu listu?

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

Napomene:

  • Upravljanje skriptama prijavljivanjem u RPi pruža mnogo više kontrole i informacija, ali osnovne kontrole i informacije mogu se dobiti isključivo upotrebom prikaza na semaforu.
  • Prepoznavanje lica implementirano je pomoću python paketa 'face_recognition'. Ovaj paket je zasnovan na Dlibu koji sadrži najsavremeniji algoritam za prepoznavanje lica, koji obavlja tač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).
Takmičenje u tehničkoj podršci
Takmičenje u tehničkoj podršci
Takmičenje u tehničkoj podršci
Takmičenje u tehničkoj podršci

Prva nagrada na takmičenju Pomoćne tehnologije

Preporučuje se: