Turinys:

Durų skambutis su veido atpažinimu: 7 žingsniai (su nuotraukomis)
Durų skambutis su veido atpažinimu: 7 žingsniai (su nuotraukomis)

Video: Durų skambutis su veido atpažinimu: 7 žingsniai (su nuotraukomis)

Video: Durų skambutis su veido atpažinimu: 7 žingsniai (su nuotraukomis)
Video: Zoom pamoka 2024, Liepa
Anonim
Durų skambutis su veido atpažinimu
Durų skambutis su veido atpažinimu

Motyvacija

Pastaruoju metu mano šalyje kilo apiplėšimų banga, nukreipta į pagyvenusius žmones jų namuose. Paprastai prieigą suteikia patys keleiviai, nes lankytojai juos įtikina, kad jie yra globėjai/slaugytojai. Neįmanoma pasakyti, kokios piktos ir liūdnos šios istorijos verčia mane jaustis. Namai turėtų būti jūsų pirmasis saugus prieglobstis ir dar labiau, jei būdami lauke jau esate pažeidžiamoje padėtyje. Turėdamas tai omenyje, pradėjau šį projektą.

Bendra informacija

Durų skambučių sistema daugiausia skirta senyvo amžiaus arba silpnaregiams ir yra gana paprasta. Trumpai tariant, durų skambučio jungiklis priverčia fotoaparatą gauti filmuotą medžiagą. Be to, filmuotos medžiagos veidai aptinkami ir suderinami su baltuoju ir juoduoju sąrašu. Keleivis gauna aiškų vaizdinį grįžtamąjį ryšį šviesaus šviesoforo ekrane. Žalia, geltona arba raudona lemputė rodo, kad asmuo (-ai) yra įtrauktas į baltąjį sąrašą, atitinkamai sistemai nežinomas arba įtrauktas į juodąjį sąrašą. Jei užsidega geltona arba raudona lemputė, nuotrauka siunčiama „Telegram“roboto, kad informuotų/įspėtų giminaitį ar prižiūrėtoją.

Ekspertizės lygis

Projektas buvo skirtas entuziastams, kuriems ypač įdomu naudotis kompiuterine vizija ir dirbtiniu intelektu. Ši pamoka skirta pradedantiesiems, todėl nesijaudinkite, jei neturite patirties! Be to, projektas gali būti įdomus ir labiau patyrusiems kūrėjams, nes dujotiekis yra organizuotas taip, kad galėtumėte jį išplėsti savo kompiuterio vizija ir veido atpažinimo idėjomis be didelių rūpesčių.

1 žingsnis: medžiagos

Medžiagos
Medžiagos

Produktų sąrašas su minimaliais reikalavimais:

Produktas Nuoroda Komentuoti
Raspberry Pi 3b RPi Nuoroda rodo „RPi 4“, nes jo našumas yra geresnis ir kaina beveik tokia pati kaip „RPi 3b“.
„Micro SD“ „Amazon“ Darbą atliks 16 GB ar didesnė „micro SD“kortelė. Tačiau 16 GB „Amazon“kortelių kaina dabar yra beveik tokia pati kaip ir 32 GB.
„Raspberry Pi“fotoaparatas „Amazon“ Fotoaparatas v1 yra pigesnis, tačiau v2 yra geresnis ir bus palaikomas ilgiau.
15 kontaktų FPC lankstus kabelis „Amazon“ Ilgis iš tikrųjų priklauso nuo šio projekto vykdymo aplinkybių. Jei norite tik sukurti prototipą, originalus lankstus kabelis atliks darbą.
Maitinimo šaltinis 5v micro usb Adafruit Šis niekuomet nenuvylė! Puiki kokybė. (Ne nuotraukoje)
Arkadiniai mygtukai su įmontuotu LED „Amazon“ Pasirinkite norimą dydį, tačiau CAD dizainas pagrįstas 60 mm mygtukais
Rezistoriai „Amazon“ Jums tereikia poros 1k ir 100 omų rezistorių. Įprasti 1/4W yra gerai.
Kondensatoriai 0,1 uF „Amazon“ Reikia trijų kondensatorių. (Ne nuotraukoje)
Trumpieji laidai / juostos kabelis AmazonAmazon Jei norite sutaupyti šiek tiek pinigų, taip pat galite naudoti seną diskelių juostos kabelį (žr. Nuotrauką).
Susitraukiantis vamzdis / elektros juosta AmazonAmazon

Reikalingi įrankiai:

Įrankis Esminis? Komentuoti
Lituoklis Taip
Multimetras Taip
Vielos nuėmiklis Taip Arba galite naudoti peilį/žirkles.
Lazerinis pjoviklis Ne
3D spausdintuvas Ne
Spaustukai Ne Naudinga laikyti dėžutę kartu bandymo etape.

Pastabos:

Norėdami padidinti projekto prieinamumą, nusprendžiau jį sukurti naudodami „Raspberry Pi 3b“. Tai padidina prieinamumą, tačiau sumažina programos galimybes, nes RPi nėra tokie greiti. Jei ieškote greitesnio vieno lentos kompiuterio, galbūt norėsite pažvelgti į „NVIDIA Jetson Nano“

2 žingsnis: laidų prijungimas

Laidai
Laidai
Laidai
Laidai
Laidai
Laidai

Scheminė diagrama yra informatyviausia šiam žingsniui ir yra savaime suprantama. Jei esate naujokas elektronikoje, galite naudoti legendos vaizdą. Komponento vertė (jei taikoma) nurodyta schemoje. Nuotraukos gali padėti pamatyti, kaip aš kuriu grandinę. Iš esmės aš prijungiau visus komponentus kuo arčiau pasažo mygtuko, todėl aiškiai matoma, kas vyksta.

Pastabos:

  • Man labai patinka naudoti juostines kabelių jungtis, nes jos yra tvirtesnės nei naudojant vieno jungiklio laidus.
  • Kaip siūloma, aš naudoju nušlifuotą juostinį kabelį iš seno kompiuterio. Tačiau tai yra šiek tiek sudėtinga, nes turėsite rankiniu būdu patvirtinti kabelio konfigūraciją. Pavyzdžiui, šiame projekte sužinojau, kad kai kurios skylės buvo sujungtos viena su kita (tikriausiai buvo naudojamos kaip pagrindas pradinei programai). Todėl vėliau turėjau gauti kitą kabelį, kaip matote nuotraukose.

3 žingsnis: korpuso statyba

Korpuso statyba
Korpuso statyba
Korpuso statyba
Korpuso statyba
Korpuso statyba
Korpuso statyba
Korpuso statyba
Korpuso statyba

Fotoaparato korpusas

Daugelį „picamera“korpusų galima laisvai atsisiųsti iš interneto. Taigi, aš nusprendžiu neišradinėti rato ir iš interneto išsirenku paprastą, bet gražų korpusą: thingiverse.com - Raspberry pi fotoaparato dėklas/gaubtas. (Šaukitės dizainerio VGerio.)

Šviesoforo korpusas

Šviesoforo korpusui sukūriau nedidelę dėžutę „Autodesk Fusion 360“(kurią galima nemokamai atsisiųsti, žr. Pastabas), kuri tinka visai aparatinei įrangai. Priede galite rasti failą, kurį išsiunčiau savo vietinei lazerinio pjovimo įmonei. Taigi dizainas grindžiamas 6 mm plokštės storiu. Tačiau, jei norite koreguoti dalykus, naudodami šią nuorodą galite pasiekti visų rūšių failų formatus. Kaip parodyta paveikslėliuose, taip pat galite naudoti kartoninę dėžę, jei neturite prieigos prie lazerinio pjaustytuvo. Prototipams panaudojau paveikslėlyje esančią kartoninę dėžutę ir ji veikia kaip žavesys.

Surinkimas yra gana tiesus:

  1. Sumontuokite „Arcade“jungiklius.
  2. Įsitikinkite, kad durų skambučio laidai nėra laisvi.
  3. Prijunkite juostinį kabelį prie RPi.
  4. Prisukite RPi prie apatinio skydo.
  5. Prijunkite durų skambučio laidus prie laido jungties ir taip pat pritvirtinkite prie apatinio skydo.
  6. Prijunkite „Picamera“prie RPi.
  7. Išgręžkite skylę vienoje iš šoninių skydų durų skambučio perjungimo laidui ir RPi maitinimo laidui.

Laido jungtis naudojama kaip durų skambučio jungiklių laidų tvirtinimo vieta, kad vėliau ją būtų galima pritvirtinti prie esamo durų skambučio. Dabar viskas yra savo vietose ir gali būti suklijuota. Tačiau pirmiausia galite užbaigti kitus veiksmus ir įsitikinti, kad viskas veikia taip, kaip turėtų būti.

Pastabos:

„Autodesk Fusion 360“yra laisvai prieinamas mėgėjams! Jei norite gauti savo kopiją, apsilankykite šioje nuorodoje: autodesk.com - „Fusion 360 For Hobbyists“. Yra keletas terminų, todėl būtinai perskaitykite ir taikykite. Tai buvo mano pirmasis projektas su „Fusion 360“ir neturiu daug patirties naudojant CAD programinę įrangą, tačiau turiu pasakyti, kad man labai patinka programinė įranga ir visi papildomi įrankiai, pateikiami kartu su „Fusion 360“

4 veiksmas: fotoaparato konfigūravimas

Fotoaparato konfigūravimas
Fotoaparato konfigūravimas
Fotoaparato konfigūravimas
Fotoaparato konfigūravimas
Fotoaparato konfigūravimas
Fotoaparato konfigūravimas

Daroma prielaida, kad turite įdiegtą „Raspbian“ir kad jis veikia GUI režimu. Jei dar neįdiegėte „Raspbian“, galite perskaityti šį straipsnį: raspberrypi.org - Operacinės sistemos vaizdų diegimas. Jei paleisite „Raspbian“, turėtumėte pamatyti darbalaukį, kaip parodyta paveikslėliuose.

Sukonfigūruokime kamerą RPi ir pažiūrėkime, ar ji veikia! Čia aprašytas metodas yra tiesiogiai iš raspberrypi.org - Documentation. Pirmiausia atnaujinkime naujausius paketus (įskaitant fotoaparato programinę įrangą), terminalo lange vykdydami šias komandas (žr. Paveikslėlius):

sudo apt atnaujinimas

sudo apt pilnas atnaujinimas

Tada fotoaparatas turi būti įjungtas naudojant šią komandą:

sudo raspi-config

Meniu eikite į 5. Sąsajos parinktys -> P1 kamera. Pasirinkite, kad įjungtumėte fotoaparatą ir iš naujo paleistumėte RPi, atlikdami šiuos veiksmus:

perkrauti

Dabar fotoaparatas turi būti tinkamai sukonfigūruotas. Tai galima patikrinti atidarius terminalo langą ir vykdant:

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

Vaizdas išsaugomas: /home /pi.

5 veiksmas: „Docker“nustatymas

„Docker“nustatymas
„Docker“nustatymas
„Docker“nustatymas
„Docker“nustatymas
„Docker“nustatymas
„Docker“nustatymas
„Docker“nustatymas
„Docker“nustatymas

Kad išvengčiau priklausomybės ir diegimo klaidų, nusprendžiau sukurti šiam projektui pritaikytą „Docker“vaizdą (žr. Wikipedia.org - „Docker“). Jei niekada nenaudojote ar negirdėjote apie „Docker“, nesijaudinkite, žingsnis po žingsnio paaiškinsiu, kaip jį naudoti šiame projekte. Tiesą sakant, tai labai paprasta! Jei norite paleisti šį projektą vietiniame diegime (o ne „Docker“konteineryje), pateiksiu keletą patarimų. Tačiau labai rekomenduojama naudoti „Docker“vaizdą. Galų gale, aš jį kuriu, kad jums būtų lengviau vykdyti šį projektą!

Kas yra Dokeris?

Pastaba: šioje dalyje pateikiama tam tikra pagrindinė informacija apie „Docker“, kurią galima praleisti, jei norite tik paleisti kodą.

Šis projektas pirmą kartą naudoju „Docker“ir yra tiesiog nuostabus! Galbūt esate girdėję apie virtualenv ar Anaconda for Python? Na, „Docker“yra gana panaši ta prasme, kad galite lengvai valdyti paketų versijas ir paleisti skirtingas „Python“versijas vienoje pagrindinėje sistemoje naudodami kitą aplinką (arba konteinerį, kaip jis vadinamas „Docker“). Tačiau, palyginti su „virtualenv“ir „Anaconda“, „Docker“yra daug galingesnis, nes jame nėra tik „Python“paketų. Iš tikrųjų „Docker“talpykloje taip pat galite įdiegti ir valdyti norimos operacinės sistemos paketus. Pvz., Apsvarstykite svetainę, kurią norite perkelti ir kurioje veikia „Python“žiniatinklio sistema (pvz., „Django“) su duomenų baze (pvz., „MySQL“). Be „Docker“konteinerio turėsite įdiegti visus paketus naujame serveryje, o tai labai linkusi į klaidas ir klaidas. Kita vertus, kai jūsų svetainė buvo sukurta „Docker“, perkelti iš esmės yra taip pat paprasta, kaip perkelti vaizdo failą/failus į naują serverį ir juos paleisti. Kaip galite įsivaizduoti, „Docker“taip pat yra labai naudingas projektams „Instructables“;)! Jei norite sužinoti daugiau apie „Docker“, apsilankykite jų svetainėje: docker.org - „Docker: Enterprise Container Platform“. Dabar atsikelkime kartu su „Docker“!

„Docker“diegimas

Įdiekite „Docker“atlikdami šiuos veiksmus:

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

Tada vartotojas įtraukiamas į vartotojų grupę „docker“, kuri suteikia teises paleisti „Docker“. Tai daro:

sudo usermod -aG docker $ USER

Dabar turėtumėte turėti galimybę paleisti „Docker“. Tai galima patvirtinti paleidus „hello-world“vaizdą:

„Docker Run Hello“pasaulis

Galiausiai ištraukime „Docker“atvaizdą, kuriame yra visos priklausomybės, reikalingos paleisti durų skambučio „Python“scenarijus. Šis procesas gali užtrukti, nes vaizdas yra gana didelis (~ 1,5 GB). Vykdyti:

prieplauka traukia erientes/durų skambutį

Pastaba: „Dockerfile“galima rasti „Github“durų skambučių saugykloje. Dabar viskas paruošta paleisti durų skambučių scenarijus, kurie bus aptarti kitame žingsnyje.

Vietinis montavimas

Vėlgi, labai rekomenduočiau naudoti „Docker“vaizdą, o ne vietinį diegimą. Bet kad ši pamoka būtų baigta, dabar aprašysiu kai kuriuos veiksmus, kurių ėmiausi diegdami vietinį.

Kad būtų galima paleisti kodą, „python“versija turėtų būti> = 3.5 (naudojau „python 3.5.3“) ir reikia įdiegti šiuos paketus:

  • veido atpažinimas
  • fotoaparatas
  • kvailas
  • Pagalvė
  • python-telegram-bot
  • RPi. GPIO

Ši nuoroda yra labai naudinga: „Github“- „Raspberry Pi“įdiekite „dlib“ir „face_recognition“. Tačiau čia yra keletas įspėjimų: 1) pagalvei reikia bent jau „Python 3.5“, kuri nebus įdiegta taikant šį metodą. 2) Be to, ne visi paketai, reikalingi durų skambučio projektui, bus įdiegti laikantis šio metodo. Tačiau turėtumėte turėti galimybę ją įdiegti tiesiog naudodami pip3.

6 veiksmas: paleiskite durų skambučių scenarijus

Durų skambučių scenarijų vykdymas
Durų skambučių scenarijų vykdymas
Durų skambučių scenarijų vykdymas
Durų skambučių scenarijų vykdymas
Durų skambučių scenarijų vykdymas
Durų skambučių scenarijų vykdymas

Gaukite scenarijus

Scenarijus galima atsisiųsti rankiniu būdu iš: github.com - Erientes/doorbell. Arba, jei įdiegėte „Git“, vykdykite:

git klonas

Sukurkite slapyvardžius

Dabar, norėdami šiek tiek palengvinti mūsų gyvenimą, sukurkime keletą slapyvardžių scenarijams paleisti. Vykdyti:

leafpad ~/.bashrc

Pridėkite šias eilutes ir išsaugokite failą:

alias doorbell_run = 'docker run -privilegijuotas -v/home/pi/doorbell:/doorbell -w/doorbell -it erientes/doorbell python $ 1 “

alias doorbell_login = 'docker run -privilegijuotas -v/home/pi/doorbell:/doorbell -w/doorbell -it erientes/doorbell bash'

Bandymo scenarijai

Norėdami patikrinti, ar viskas įdiegta teisingai, atidarykite naują terminalą ir vykdykite:

„doorbell_run“pavyzdžiai/0_test_installation.py

Rezultatas turėtų būti tiesiog pranešimas terminalo lange, kuriame sakoma: „Durų skambučio diegimas sėkmingai baigtas!“. Norėdami patikrinti, ar fotoaparatą galima pasiekti naudojant „Docker“konteinerį, paleiskite:

durų skambučio pavyzdžiai/1_test_camera.py

Paleidus 1_test_camera.py nuotrauka bus nufotografuota ir išsaugota kaip „test.jpg“, kurią galima rasti/home/pi/doorbell. Galiausiai, LED tvarkykles galima išbandyti atlikus šiuos veiksmus:

„doorbell_run“pavyzdžiai/2_test_voicehat_drivers.py

Kai šis scenarijus veikia, pasažo jungiklio šviesos diodas turėtų reaguoti, kai paspaudžiamas mygtukas.

Vykdomi durų skambučių scenarijai

Norėdami paleisti „Doorbell“scenarijus, pirmiausia turite gauti „Telegram“roboto kredencialus. Įdiekite „Telegram“savo telefone ir eikite į telegram.me - Botfather. Pradėkite pokalbį ir įveskite:

/newbot

Įveskite roboto vardą ir vartotojo vardą. Po to jums bus suteiktas prieigos raktas. Nukopijuokite šią vertę į failą „credentials_telegram_template.py“/home/pi/doorbell ir išsaugokite jį naujame faile pavadinimu „credentials_telegram.py“. Galiausiai pradėkite pokalbį su ką tik sukurtu robotu spustelėdami nuorodą, kurią jums teikia „Botfather“.

Galiausiai paleiskite durų skambutį su veido atpažinimu:

„doorbell_run main.py“

Pastabos:

Jei norite sužinoti daugiau apie kodo veikimą, peržiūrėkite komentarus pačiuose scenarijuose. Jei turite klausimų apie kodą, susisiekite su manimi per „Github“

7 veiksmas: naudokite durų skambutį

Image
Image
Durų skambučio naudojimas
Durų skambučio naudojimas
Durų skambučio naudojimas
Durų skambučio naudojimas

Paleiskite durų skambučio scenarijų vykdydami:

„doorbell_run main.py“Įkėlus paketus, scenarijai nenaudojami. Iš esmės gali įvykti 2 dalykai:

  1. Kažkas skambina durų skambučiu.
  2. Kažkas įtrauktas į baltąjį sąrašą.

Kažkas skambina durų skambučiu

Tokiu atveju scenarijus pradės fotografuoti, kol nufotografuos nuotrauką, kurioje aptinkamas veidas. Aptikus, iškviečiami kai kurie „python“paketo „face_recognition“metodai, norint apskaičiuoti veido 128 kodavimą. Tada gautas kodavimas lyginamas su baltojo sąrašo.csv ir juodojo sąrašo.csv koduotėmis. Galimi rezultatai lemia tokį atsakymą:

Į baltąjį sąrašą? Į juodąjį sąrašą? Atsakymas
Taip Ne Užsidega žalia lemputė.
Taip Taip Užsidega geltona lemputė. Durų skambučio kamera siunčia nuotraukas į „Telegram“robotą su oranžine piktograma. Ši būsena gali atsirasti, jei kas nors buvo įtrauktas į abu sąrašus. Pavyzdžiui, kai kas nors iš pradžių buvo laukiamas, bet vėliau buvo įtrauktas į juodąjį sąrašą.
Ne Ne Užsidega geltona lemputė. Durų skambučio kamera siunčia nuotraukas į „Telegram“robotą su oranžine piktograma.
Ne Taip Užsidega raudona lemputė. Durų skambučio kamera siunčia nuotraukas į „Telegram“robotą su raudona piktograma.

Kažkas įtrauktas į baltąjį sąrašą

Jei norite įtraukti ką nors į baltąjį sąrašą, paspauskite geltoną šviesoforo mygtuką, kai durų skambutis veikia laukimo režimu. Pirma, užsidegs geltona lemputė. Jei žalia lemputė mirksi 3 kartus, asmens veidas sėkmingai įtraukiamas į baltąjį sąrašą. Jei žalia lemputė nemirksi 3 kartus, bandymas nebuvo sėkmingas. Tokiu atveju dar kartą paspauskite geltoną mygtuką. Galite lengvai patikrinti, ar tai pavyko, paskambinę į durų skambutį ir patikrinę, ar žalia šviesa praėjo.

Kaip įtraukti ką nors į juodąjį sąrašą?

Akivaizdu, kad žmonės, turintys blogų ketinimų, nepraleis mums savo veido nuotraukos. Taigi vietoj to galite pridėti žinomų žmonių atvaizdus, kuriuos (pavyzdžiui) policija paskelbė aplanke img/blacklist. Kas valandą šiame aplanke tikrinama, ar nėra naujų vaizdų. Jei yra naujas vaizdas, veido kodavimas apskaičiuojamas ir įtraukiamas į juodąjį sąrašą.csv. Tada vaizdas pervadinamas ir perkeliamas į aplanką/img/blacklist/encoded.

Pastabos:

  • Skriptų valdymas prisijungus prie RPi suteikia daug daugiau kontrolės ir informacijos, tačiau pagrindinį valdymą ir informaciją galima gauti tik naudojant šviesoforo ekraną.
  • Veido atpažinimas įgyvendinamas naudojant „python“paketą „face_recognition“. Šis paketas yra sukurtas naudojant „Dlib“, kuriame yra moderniausias veido atpažinimo algoritmas, kuris atlieka 99,38% tikslumą „Labeled Faces in the Wild“etalonuose (šaltinis: dlib.net-Aukštos kokybės veido atpažinimas naudojant giluminį metrikos mokymąsi)).
Pagalbinių technologijų konkursas
Pagalbinių technologijų konkursas
Pagalbinių technologijų konkursas
Pagalbinių technologijų konkursas

Pirmasis prizas pagalbinių technologijų konkurse

Rekomenduojamas: