Sisällysluettelo:

Ovikello kasvojentunnistuksella: 7 vaihetta (kuvilla)
Ovikello kasvojentunnistuksella: 7 vaihetta (kuvilla)

Video: Ovikello kasvojentunnistuksella: 7 vaihetta (kuvilla)

Video: Ovikello kasvojentunnistuksella: 7 vaihetta (kuvilla)
Video: Älykkäät turvakamerat - mitä kannattaa ottaa huomioon 2024, Marraskuu
Anonim
Ovikello, jossa kasvojentunnistus
Ovikello, jossa kasvojentunnistus

Motivaatio

Viime aikoina kotimaassani on ollut ryöstöaalto, joka on kohdistettu vanhuksille heidän kodeissaan. Yleensä asukkaat myöntävät pääsyn itse, koska vierailijat vakuuttavat heidät olevansa hoitajia/sairaanhoitajia. Sanaton, kuinka vihaisia ja surullisia nämä tarinat saavat minut tuntemaan. Kodin pitäisi olla ensimmäinen turvasatama ja vielä enemmän, jos olet jo haavoittuvassa asemassa ollessasi ulkona. Tämän mielessä aloitin tämän projektin.

Yleistä tietoa

Ovikellojärjestelmä on suunniteltu pääasiassa vanhuksille tai näkövammaisille, ja se on melko suoraviivainen toiminnassaan. Lyhyesti sanottuna ovikellon kytkin laukaisee kameran ottamaan materiaalia. Seuraavaksi kuvamateriaalin kasvot tunnistetaan ja ne yhdistetään sallittujen ja mustan listan kanssa. Matkustaja saa selkeän visuaalisen palautteen kirkkaan liikennevalonäytön avulla. Vihreä, keltainen tai punainen valo osoittaa täten, että henkilö (t) on sallittujen luettelossa, järjestelmälle tuntematon tai mustalle listalle. Jos keltainen tai punainen valo syttyy, sähkebotti lähettää valokuvan ilmoittamaan sukulaiselle tai huoltajalle.

Asiantuntemuksen taso

Hanke on tarkoitettu harrastajille, jotka ovat erityisen kiinnostuneita tietokonevision ja tekoälyn käytöstä. Tämä ohje on kirjoitettu aloittelijoille, joten älä huoli, jos sinulla ei ole kokemusta! Lisäksi projekti voi olla kiinnostava myös kokeneemmille tekijöille, koska putkilinja on järjestetty siten, että voit laajentaa sitä omalla tietokonenäkölläsi ja kasvojentunnistusideoilla ilman paljon vaivaa.

Vaihe 1: Materiaalit

Materiaalit
Materiaalit

Tuoteluettelo vähimmäisvaatimuksilla:

Tuote Linkki Kommentti
Vadelma Pi 3b RPi Linkki näyttää RPi 4: n, koska sillä on paljon parempi suorituskyky ja lähes sama hinta kuin RPi 3b: llä.
Micro SD Amazon Vähintään 16 Gt: n mikro -SD -kortti hoitaa homman. Mutta Amazonin 16 Gt: n kortit ovat nyt suunnilleen samaa hintaa kuin 32 Gt: n kortit.
Raspberry Pi kamera Amazon Kamera v1 on halvempi, mutta v2 on parempi ja sitä tuetaan pidempään.
15 -nastainen FPC flex -kaapeli Amazon Pituus riippuu itse asiassa hankkeen toteuttamisen olosuhteista. Jos haluat vain rakentaa prototyypin, alkuperäinen flex -kaapeli tekee työn.
Virtalähde 5v micro usb Adafruit Tämä ei koskaan pettänyt! Erinomainen laatu. (Ei kuvassa)
Arcade-painikkeet sisäänrakennetulla LED-valolla Amazon Valitse haluamasi koko, mutta CAD -muotoilu perustuu 60 mm: n painikkeisiin
Vastukset Amazon Tarvitset vain pari 1k ja 100 ohmin vastusta. Tavalliset 1/4W ovat hyviä.
Kondensaattorit 0,1 uF Amazon Tarvitaan kolme kondensaattoria. (Ei kuvassa)
Hyppyjohdot / nauhakaapeli AmazonAmazon Jos haluat säästää rahaa, voit käyttää myös vanhaa levykeaseman kaapelia (katso kuva).
Kutistusputki / sähköteippi AmazonAmazon

Tarvittavat työkalut:

Työkalu Olennaista? Kommentti
Juotin Joo
Yleismittari Joo
Langanpoistaja Joo Tai voit käyttää veistä/saksia.
Laserleikkuri Ei
3D tulostin Ei
Kiinnikkeet Ei Hyödyllinen säilytettäessä laatikkoa yhdessä testausvaiheessa.

Huomautukset:

Projektin saavutettavuuden lisäämiseksi päätin kehittää sen Raspberry Pi 3b: n avulla. Vaikka se lisää saavutettavuutta, se vähentää sovelluksen ominaisuuksia, koska RPi: t eivät ole niin nopeita. Jos etsit yhtä nopeampaa korttitietokonetta, kannattaa ehkä katsoa NVIDIA Jetson Nano

Vaihe 2: Johdotus

Johdotus
Johdotus
Johdotus
Johdotus
Johdotus
Johdotus

Kaavamainen kaavio on kaikkein informatiivisin tässä vaiheessa ja on täysin itsestään selvä. Jos olet uusi elektroniikan parissa, voit käyttää selityskuvaa. Komponentin arvo (jos sovellettavissa) on esitetty kaaviossa. Valokuvat voivat auttaa näkemään, miten rakennan piirin. Pohjimmiltaan liitin kaikki komponentit mahdollisimman lähelle arcade -painiketta, mikä johtaa selkeään yleiskatsaukseen siitä, mitä tapahtuu.

Huomautukset:

  • Tykkään todella käyttää nauhakaapeliliittimiä, koska ne ovat paljon tukevampia kuin yhden hyppyjohdon käyttäminen.
  • Kuten ehdotettiin, olen käyttänyt vanhasta tietokoneesta irrotettua nauhakaapelia. Tämä on kuitenkin hieman hankalaa, koska joudut vahvistamaan kaapelin kokoonpanon manuaalisesti. Esimerkiksi tässä projektissa huomasin, että jotkut reiät oli kytketty toisiinsa (todennäköisesti käytetty alkuperäisen sovelluksen maana). Siksi minun piti hankkia myöhemmin toinen kaapeli, kuten kuvista näkyy.

Vaihe 3: Kotelon rakentaminen

Kotelon rakentaminen
Kotelon rakentaminen
Kotelon rakentaminen
Kotelon rakentaminen
Kotelon rakentaminen
Kotelon rakentaminen
Kotelon rakentaminen
Kotelon rakentaminen

Kameran kotelo

Monet picamera -kuoret voidaan ladata vapaasti Internetistä. Joten päätän olla keksimättä pyörää uudelleen ja valitsen perus- mutta mukavan kotelon Internetistä: thingiverse.com - Raspberry pi -kotelo/kotelo. (Huuda suunnittelija VGerille.)

Liikennevalojen kotelo

Suunnittelin liikennevalojen koteloon pienen laatikon Autodesk Fusion 360: een (joka on ladattavissa vapaasti, katso Huomautuksia), joka sopii kaikkiin laitteisiin. Liitteestä löydät tiedoston, jonka lähetän paikalliselle laserleikkausyritykselleni. Suunnittelu perustuu täten 6 mm: n levypaksuuteen. Jos haluat kuitenkin säätää asioita, voit käyttää kaikenlaisia tiedostomuotoja tämän linkin avulla. Kuten kuvissa näkyy, voit käyttää myös pahvilaatikkoa, jos sinulla ei ole pääsyä laserleikkuriin. Käytin kuvan pahvilaatikkoa prototyyppien laatimiseen ja se toimii kuin viehätys.

Kokoonpano on melko suoraviivaista:

  1. Asenna Arcade -kytkimet.
  2. Muista pitää ovikellon johdot vapaina.
  3. Liitä nauhakaapeli RPi: hen.
  4. Ruuvaa RPi pohjapaneeliin.
  5. Kytke ovikellon johdot johdinliittimeen ja kiinnitä se myös pohjapaneeliin.
  6. Liitä Picamera RPi -laitteeseen.
  7. Poraa reikä yhteen sivupaneeleista ovikellon kytkentäjohtoa ja RPi -virtajohtoa varten.

Johtoliitintä käytetään ovikellon kytkentäjohtojen kiinnityspisteenä, jotta se voidaan myöhemmin kiinnittää olemassa olevaan ovikelloon. Kaikki on nyt paikallaan ja voidaan liimata yhteen. Haluat kuitenkin ensin suorittaa seuraavat vaiheet loppuun varmistaaksesi, että kaikki toimii odotetulla tavalla.

Huomautukset:

Autodesk Fusion 360 on vapaa harrastajille! Jos haluat saada kopion, käy tästä linkistä: autodesk.com - Fusion 360 For Hobbyists. On joitain termejä, joten muista lukea ja soveltaa niitä. Se oli ensimmäinen projektini Fusion 360: n kanssa, eikä minulla ole paljon kokemusta CAD -ohjelmiston käytöstä, mutta minun on sanottava, että pidän todella ohjelmistosta ja kaikista Fusion 360: n mukana tulevista työkaluista

Vaihe 4: Kameran määritykset

Kameran määrittäminen
Kameran määrittäminen
Kameran määritykset
Kameran määritykset
Kameran määritykset
Kameran määritykset

Oletetaan, että sinulla on Raspbian asennettuna ja että se toimii GUI -tilassa. Jos sinulla ei ole vielä asennettu Raspbian -ohjelmaa, voit seurata tätä artikkelia: raspberrypi.org - Käyttöjärjestelmän kuvien asentaminen. Jos käynnistät Raspbianin, sinun pitäisi nähdä työpöytä, kuten kuvissa näkyy.

Määritetään kamera RPi: lle ja katsotaan toimiiko se! Tässä kuvattu menetelmä on suoraan osoitteesta raspberrypi.org - Documentation. Päivitetään ensin uusimmat paketit (mukaan lukien kameran laiteohjelmisto) suorittamalla seuraavat komennot pääteikkunassa (katso kuvat):

sudo apt päivitys

sudo apt täysi päivitys

Seuraavaksi kamera on otettava käyttöön käyttämällä seuraavaa komentoa:

sudo raspi-config

Siirry valikossa kohtaan 5. Liitäntäasetukset -> P1 -kamera. Ota kamera käyttöön ja käynnistä RPi uudelleen suorittamalla:

käynnistä uudelleen

Kamera on nyt määritettävä oikein. Se voidaan testata avaamalla pääteikkuna ja suorittamalla:

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

Kuva tallennetaan: /home /pi.

Vaihe 5: Dockerin asentaminen

Dockerin asentaminen
Dockerin asentaminen
Dockerin asentaminen
Dockerin asentaminen
Dockerin asentaminen
Dockerin asentaminen
Dockerin asentaminen
Dockerin asentaminen

Riippuvuuden ja asennusvirheiden välttämiseksi päätin rakentaa mukautetun Docker -kuvan tälle projektille (katso wikipedia.org - Docker). Jos et ole koskaan käyttänyt tai kuullut Dockerista, älä huoli, selitän askel askeleelta, miten sitä käytetään tässä projektissa. Itse asiassa se on erittäin helppoa! Jos haluat suorittaa tämän projektin paikallisessa asennuksessa (Docker -säilön sijaan), annan sinulle vinkkejä. Mutta on erittäin suositeltavaa käyttää Docker -kuvaa. Loppujen lopuksi rakennan sen helpottaaksesi tämän projektin suorittamista!

Mikä on Docker?

Huomautus: tämä osa sisältää Dockerista taustatietoja, jotka voidaan ohittaa, jos haluat vain suorittaa koodin.

Tämä projekti on ensimmäinen kerta, kun käytin Dockeria, ja se on yksinkertaisesti mahtava! Ehkä olet kuullut virtualenvista tai Anaconda for Pythonista? Docker on melko samanlainen siinä mielessä, että voit helposti hallita pakettiversioita ja käyttää erilaisia Python -versioita yhdessä isäntäjärjestelmässä käyttämällä eri ympäristöä (tai säilöä, kuten sitä kutsutaan Dockerissa). Verrattuna virtualenviin ja Anacondaan Docker on kuitenkin tehokkaampi, koska se ei rajoitu pelkästään Python -pakettien sisältämiseen. Docker -säilössä voit itse asentaa ja hallita myös halutun käyttöjärjestelmän paketteja. Ajattele esimerkiksi verkkosivustoa, jonka haluat siirtää ja joka käyttää Python -verkkokehystä (esim. Django) ja jossa on tietokanta (esim. MySQL). Ilman Docker -säilöä sinun on asennettava kaikki paketit uudelle palvelimelle, mikä on erittäin altis virheille ja virheille. Toisaalta, kun verkkosivustosi on rakennettu Dockeriin, siirtäminen on pohjimmiltaan yhtä helppoa kuin kuvatiedoston/tiedostojen siirtäminen uudelle palvelimelle ja niiden suorittaminen. Kuten voitte kuvitella, Docker on erittäin hyödyllinen myös Instructables -projekteissa;)! Jos haluat tietää enemmän Dockerista, tutustu heidän verkkosivustoonsa: docker.org - Docker: Enterprise Container Platform. Aloitetaan nyt Dockerin kanssa!

Dockerin asentaminen

Asenna Docker suorittamalla:

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

Seuraavaksi käyttäjä lisätään käyttäjäryhmään "telakoitsija", joka antaa Dockerin käyttöoikeudet. Tämän tekee:

sudo usermod -aG -telakka $ USER

Nyt sinun pitäisi pystyä suorittamaan Docker. Tämä voidaan vahvistaa suorittamalla hei-maailmankuva:

telakoitsija ajaa hello-world

Vedetään lopuksi Docker -kuva, joka sisältää kaikki riippuvuudet, joita tarvitaan ovikellon Python -komentosarjojen suorittamiseen. Tämä voi kestää jonkin aikaa, koska kuva on melko suuri (~ 1,5 Gt). Suorittaa:

telakoitsija vetää erientes/ovikello

Huomautus: Dockerfile löytyy Githubin ovikellovarastosta. Nyt kaikki on valmis suorittamaan ovikelloskriptejä, joista keskustellaan seuraavassa vaiheessa.

Paikallinen asennus

Suosittelen jälleen kerran käyttämään Docker -kuvaa paikallisen asennuksen sijaan. Mutta jotta tämä opetusohjelma olisi täydellinen, kuvailen nyt joitain paikallisen asennuksen vaiheita.

Koodin suorittamiseksi python -version tulee olla> = 3.5 (käytin python 3.5.3) ja seuraavat paketit on asennettava:

  • kasvojen tunnistus
  • picamera
  • numpy
  • Tyyny
  • python-sähke-bot
  • RPi. GPIO

Tämä linkki on varsin hyödyllinen: Github - Asenna dlib ja face_recognition Raspberry Pi -laitteeseen. Tässä on kuitenkin joitain varoituksia: 1) Tyyny tarvitsee vähintään Python 3.5: n, jota ei asenneta tällä menetelmällä. 2) Kaikkia ovikelloprojektissa tarvittavia paketteja ei myöskään asenneta tällä menetelmällä. Sinun pitäisi kuitenkin pystyä asentamaan se yksinkertaisesti käyttämällä pip3: a.

Vaihe 6: Ovikelloskriptien suorittaminen

Ovikelloskriptien suorittaminen
Ovikelloskriptien suorittaminen
Ovikelloskriptien suorittaminen
Ovikelloskriptien suorittaminen
Ovikelloskriptien suorittaminen
Ovikelloskriptien suorittaminen

Hae käsikirjoitukset

Skriptit voidaan ladata manuaalisesti osoitteesta: github.com - Erientes/ovikello. Tai jos sinulla on Git asennettuna, suorita:

git -klooni

Luo aliaksia

Nyt tehdäksemme elämästämme hieman helpompaa, luomme joitain aliaksia komentosarjojen suorittamiseksi. Suorittaa:

leafpad ~/.bashrc

Lisää seuraavat rivit ja tallenna tiedosto:

alias doorbell_run = 'Docker Run -etuoikeutettu -v/home/pi/ovikello:/ovikello -w/ovikello -it erientes/ovikello python $ 1'

alias doorbell_login = 'Docker Run -etuoikeutettu -v/home/pi/ovikello:/ovikello -w/ovikello -it erientes/ovikello bash'

Testaa skriptejä

Testaa, onko kaikki asennettu oikein, avaa uusi pääte ja suorita:

ovikellon_esimerkit/0_test_installation.py

Tuloksena pitäisi yksinkertaisesti olla viesti pääteikkunassa, joka sanoo 'Ovikellon asennus päättyi onnistuneesti!'. Testaa, pääseekö kameraan käsiksi Docker -säiliöstä:

ovikellon_esimerkit/1_test_camera.py

Käynnistämällä 1_test_camera.py valokuva otetaan ja tallennetaan nimellä 'test.jpg', joka löytyy/home/pi/ovikellosta. Lopuksi LED -ohjaimet voidaan testata suorittamalla:

ovikellon_esimerkit/2_test_voicehat_drivers.py

Kun tämä skripti on käynnissä, arcade -kytkimen LED -valon pitäisi vastata, kun painiketta painetaan.

Ovikello -skriptien suorittaminen

Doorbell -skriptien suorittamiseksi on ensin hankittava Telegram -bot -tunnistetiedot. Asenna Telegram puhelimeesi ja siirry osoitteeseen telegram.me - Botfather. Aloita keskustelu ja kirjoita:

/newbot

Kirjoita botille nimi ja käyttäjätunnus. Tämän jälkeen saat käyttöoikeustunnuksen. Kopioi arvo tiedostoon "credentials_telegram_template.py"/home/pi/doorbell ja tallenna se uuteen tiedostoon nimeltä credentials_telegram.py. Aloita lopuksi keskustelu juuri luomasi botin kanssa napsauttamalla Botfatherin tarjoamaa linkkiä.

Lopuksi suoritetaan ovikello kasvojentunnistuksella:

ovikello_run main.py

Huomautukset:

Jos haluat tietää enemmän koodin toiminnasta, tutustu komentosarjojen kommentteihin. Jos sinulla on kysyttävää koodista, ota minuun yhteyttä Githubin kautta

Vaihe 7: Ovikellon käyttäminen

Image
Image
Ovikellon käyttäminen
Ovikellon käyttäminen
Ovikellon käyttäminen
Ovikellon käyttäminen

Suorita ovikelloskripti suorittamalla:

ovikello_run main.py Pakettien lataamisen jälkeen komentosarjat eivät toimi. Pohjimmiltaan voi tapahtua 2 asiaa:

  1. Joku soittaa ovikelloa.
  2. Joku lisätään sallittujen luetteloon.

Joku soittaa ovikelloa

Tässä tapauksessa käsikirjoitus alkaa ottaa valokuvia, kunnes se ottaa valokuvan, jossa kasvot tunnistetaan. Havaitsemisen jälkeen joitakin python -paketin "face_recognition" menetelmiä kutsutaan kasvojen 128 -koodauksen laskemiseksi. Seuraavaksi saatua koodausta verrataan valkoisen listan.csv- ja mustan listan.csv -koodauksiin. Mahdolliset tulokset johtavat seuraavaan vastaukseen:

Valkoisella listalla? Mustalla listalla? Vastaus
Joo Ei Vihreä valo syttyy.
Joo Joo Keltainen valo syttyy. Ovikellokamera lähettää valokuvia Telegram -botille oranssilla kuvakkeella. Tämä tila voi tapahtua, jos joku lisättiin molempiin luetteloihin. Esimerkiksi silloin, kun joku oli aluksi tervetullut, mutta myöhemmin mustalle listalle.
Ei Ei Keltainen valo syttyy. Ovikellokamera lähettää valokuvia sähkebottiin oranssilla kuvakkeella.
Ei Joo Punainen valo syttyy. Ovikellokamera lähettää valokuvia Telegram -botille, jossa on punainen kuvake.

Joku lisätään sallittujen luetteloon

Jos haluat lisätä henkilön sallittujen luetteloon, paina liikennevalon keltaista painiketta, kun ovikello on lepotilassa. Ensinnäkin keltainen valo syttyy. Jos vihreä valo vilkkuu 3 kertaa, henkilön kasvot on lisätty sallittujen luetteloon. Jos vihreä valo ei vilku 3 kertaa, yritys ei onnistunut. Paina tällöin keltaista painiketta uudelleen. Voit helposti tarkistaa onnistumisen soittamalla ovikelloa ja tarkistamalla, onko vihreä valo ohitettu.

Kuinka lisätä joku mustalle listalle?

Ilmeisesti ihmiset, joilla on pahat aikomukset, eivät mene ohi antamaan meille kuvaa kasvoistaan. Voit sen sijaan lisätä kuvia pahamaineisista henkilöistä, jotka (esimerkiksi) poliisi on julkaissut kansioon img/blacklist. Tästä kansiosta tarkistetaan joka tunti uusia kuvia. Jos kuva on uusi, kasvojen koodaus lasketaan ja lisätään mustalle listalle.csv. Kuva nimetään uudelleen ja siirretään kansioon/img/blacklist/encoded.

Huomautukset:

  • Skriptien käyttäminen RPi: hen kirjautumalla tarjoaa paljon enemmän hallintaa ja tietoa, mutta perusohjauksen ja tiedot voi saada pelkästään liikennevalojen näytön avulla.
  • Kasvojentunnistus toteutetaan käyttämällä python -pakettia face_recognition. Tämä paketti perustuu Dlibiin, joka sisältää uusimman kasvojentunnistusalgoritmin, joka suorittaa 99,38%: n tarkkuuden Labeled Faces in the Wild -testissä (lähde: dlib.net-Korkealaatuinen kasvojentunnistus ja syvä metrinen oppiminen).
Avustava tekninen kilpailu
Avustava tekninen kilpailu
Avustava tekninen kilpailu
Avustava tekninen kilpailu

Ensimmäinen palkinto Assistive Tech Contest -kilpailussa

Suositeltava: