Sisällysluettelo:
- Vaihe 1: Materiaalit
- Vaihe 2: Johdotus
- Vaihe 3: Kotelon rakentaminen
- Vaihe 4: Kameran määritykset
- Vaihe 5: Dockerin asentaminen
- Vaihe 6: Ovikelloskriptien suorittaminen
- Vaihe 7: Ovikellon käyttäminen
Video: Ovikello kasvojentunnistuksella: 7 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
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
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
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
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:
- Asenna Arcade -kytkimet.
- Muista pitää ovikellon johdot vapaina.
- Liitä nauhakaapeli RPi: hen.
- Ruuvaa RPi pohjapaneeliin.
- Kytke ovikellon johdot johdinliittimeen ja kiinnitä se myös pohjapaneeliin.
- Liitä Picamera RPi -laitteeseen.
- 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
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
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
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
Suorita ovikelloskripti suorittamalla:
ovikello_run main.py Pakettien lataamisen jälkeen komentosarjat eivät toimi. Pohjimmiltaan voi tapahtua 2 asiaa:
- Joku soittaa ovikelloa.
- 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).
Ensimmäinen palkinto Assistive Tech Contest -kilpailussa
Suositeltava:
DIY Smart -ovikello: koodi, asennus ja HA -integrointi: 7 vaihetta (kuvilla)
DIY Smart -ovikello: koodi, asennus ja HA -integrointi: Tässä projektissa näytän sinulle, kuinka voit muuttaa normaalin ovikellosi älykkääksi muuttamatta mitään nykyisistä toiminnoista tai katkaisemalla johtoja. Käytän ESP8266 -korttia nimeltä Wemos D1 mini. Uusi ESP8266? Katso esittelyni
Liiketunnistimen ovikello: 5 vaihetta (kuvilla)
Liikkeentunnistimen ovikello: Kun kerroin pojalleni Jaydenille haasteesta, hän ajatteli heti käyttää LEGO WeDo -sarjaa. Hän on pelannut Legoilla vuosia, mutta vasta viime lukuvuoden alussa hän sai mahdollisuuden koodata WeDo 2.0: lla
Langaton ovikello - (Vadelma PI ja Amazon Dash): 4 vaihetta (kuvilla)
Langaton ovikello - (Vadelma PI ja Amazon Dash): Mitä se tekee? (katso video) Kun painiketta painetaan, Raspberry löytää uuden laitteen kirjautuvan langattomaan verkkoon. Tällä tavalla se tunnistaa painetun painikkeen ja välittää tämän tiedon matkapuhelimeesi (tai laitteeseesi)
Hip Hop -ovikello: 9 vaihetta (kuvilla)
Hip Hop -ovikello: Ovikello, jossa on useita näytteitä ja levysoitin, johon voit itse raapia! Joten, pari vuotta sitten Facebook -viestin jälkeen ideasta ovikellosta, jossa on erilliset soittoäänet jokaiselle taloni henkilölle, kaverini otti idean mukaan
IP-kamera kasvojentunnistuksella ESP32-CAM-kortin avulla: 5 vaihetta
IP-kamera, jossa on kasvojentunnistus ESP32-CAM-kortin avulla: Tämä viesti on erilainen kuin muut, ja tarkastelemme erittäin mielenkiintoista ESP32-CAM-korttia, joka on yllättävän halpa (alle 9 dollaria) ja helppokäyttöinen. Luomme yksinkertaisen IP -kameran, jota voidaan käyttää suoratoistovideon syöttämiseen 2