Talaan ng mga Nilalaman:

Doorbell Na May Pagkilala sa Mukha: 7 Hakbang (na may Mga Larawan)
Doorbell Na May Pagkilala sa Mukha: 7 Hakbang (na may Mga Larawan)

Video: Doorbell Na May Pagkilala sa Mukha: 7 Hakbang (na may Mga Larawan)

Video: Doorbell Na May Pagkilala sa Mukha: 7 Hakbang (na may Mga Larawan)
Video: Kapuso Mo, Jessica Soho: Pamahiin sa litrato 2024, Nobyembre
Anonim
Doorbell Na May Pagkilala sa Mukha
Doorbell Na May Pagkilala sa Mukha

Pagganyak

Kamakailan lamang, nagkaroon ng isang alon ng mga nakawan sa aking bansa na naka-target sa mga matatandang tao sa kanilang sariling mga tahanan. Karaniwan, ang pag-access ay ibinibigay ng mga naninirahan mismo dahil kinukumbinsi sila ng mga bisita na sila ay mga tagapag-alaga / nars. Lampas lamang sa mga salita, kung gaano ako galit at malungkot sa mga kuwentong ito na nararamdaman ko. Ang bahay ay dapat na ang iyong unang ligtas na kanlungan at lalo na kung ikaw ay nasa isang mahina na posisyon kapag nasa labas. Sa pag-iisip na ito, sinimulan ko ang proyektong ito.

Pangkalahatang Impormasyon

Ang sistema ng doorbell ay pangunahin na idinisenyo para sa mga matatanda o may kapansanan sa paningin at medyo deretso sa mga paggana nito. Sa madaling salita, ang switch ng doorbell ay nagpapalitaw ng camera upang makakuha ng footage. Susunod, ang mga mukha sa footage ay napansin at naitugma sa isang whitelist at blacklist. Ang nakatira ay nakakakuha ng malinaw na visual na feedback sa pamamagitan ng isang malinaw na display ng ilaw ng trapiko. Sa gayon, ipinahiwatig ng berde, dilaw o pula ang ilaw na ang (mga) tao ay nasa whitelist, hindi alam ng system o nasa blacklist ayon sa pagkakabanggit. Kung ang dilaw o pulang ilaw ay na-trigger, ang larawan ay ipinadala ng isang Telegram bot upang ipaalam / bigyan ng babala ang isang kamag-anak o tagapag-alaga.

Antas ng kadalubhasaan

Ang proyekto ay na-set up para sa mga taong mahilig na partikular na mausisa tungkol sa paggamit ng computer vision at artipisyal na intelektuwal. Ang itinuturo na ito ay nakasulat para sa isang madla ng mga nagsisimula, kaya huwag mag-alala kung wala kang karanasan! Bukod dito, ang proyekto ay maaaring maging kawili-wili para sa mas may karanasan na mga gumagawa din dahil ang pipeline ay inayos sa isang paraan na maaari mo itong mapalawak sa iyong sariling paningin sa computer at mga ideya sa pagkilala sa mukha nang walang gaanong abala.

Hakbang 1: Mga Kagamitan

Mga Kagamitan
Mga Kagamitan

Listahan ng produkto na may mga minimum na kinakailangan:

Produkto Link Magkomento
Raspberry Pi 3b RPi Ipinapakita ng link ang RPi 4 dahil mayroon itong mas mahusay na pagganap at halos pantay na presyo tulad ng RPi 3b.
Micro SD Amazon Ang isang micro SD card na 16 GB o mas malaki ang gagawa ng trabaho. Ngunit ang mga 16 GB card sa Amazon ay halos pareho ang presyo sa 32 GB card.
Kamera ng Raspberry Pi Amazon Ang camera v1 ay mas mura, ngunit ang v2 ay mas mahusay at mas mahahabang sinusuportahan.
15 pin FPC flex cable Amazon Ang haba ay talagang nakasalalay sa mga pangyayari sa paggawa ng proyektong ito. Kung nais mo lamang bumuo ng isang prototype, ang orihinal na flex cable ang gagawa ng trabaho.
Pag-supply ng Power 5v micro usb Adafruit Ang isang ito ay hindi kailanman pinabayaan matalo! Mahusay na kalidad. (Wala sa larawan)
Mga pindutan ng arcade na may built-in na LED Amazon Piliin ang laki na gusto mo, ngunit ang disenyo ng CAD ay batay sa 60mm na mga pindutan
Mga lumalaban Amazon Kailangan mo lamang ng isang pares ng 1k at 100 ohm resistors. Ang regular na 1 / 4W's ay mabuti.
Mga capacitor 0.1 uF Amazon Tatlong capacitor ang kinakailangan. (Wala sa larawan)
Jumper Wires / Ribbon Cable AmazonAmazon Kung nais mong i-save ang iyong sarili ng ilang mga pera, maaari mo ring gamitin ang isang lumang floppy drive ribbon cable (tingnan ang larawan).
Shrinking tube / Electrical tape AmazonAmazon

Mga tool na kinakailangan:

Tool Mahalaga? Magkomento
Panghinang Oo
Multimeter Oo
Wire stripper Oo O maaari kang gumamit ng kutsilyo / gunting.
Laser Cutter Hindi
3d printer Hindi
Mga clamp Hindi Kapaki-pakinabang para sa pagpapanatili ng kahon nang magkasama sa yugto ng pagsubok.

Pangungusap:

Upang madagdagan ang kakayahang mai-access ang proyekto, nagpasya akong paunlarin ito gamit ang isang Raspberry Pi 3b. Habang pinapataas nito ang kakayahang mai-access, binabawasan nito ang mga kakayahan ng application dahil ang RPi ay hindi ganoon kabilis. Kung naghahanap ka para sa isang solong board computer na mas mabilis, baka gusto mong tingnan ang NVIDIA Jetson Nano

Hakbang 2: Mga kable

Kable
Kable
Kable
Kable
Kable
Kable

Ang diagram ng eskematiko ay pinaka-kaalaman para sa hakbang na ito at ito ay lubos na nagpapaliwanag. Kung sakaling bago ka sa electronics, maaari mong gamitin ang legend na imahe. Ang halaga ng bahagi (kung nalalapat) ay nakasaad sa diagram ng eskematiko. Maaaring makatulong ang mga larawan upang makita kung paano ko binubuo ang circuit. Talaga, ikinonekta ko ang lahat ng mga bahagi nang malapit sa arcade button hangga't maaari na magreresulta sa isang malinaw na pangkalahatang ideya ng kung ano ang nangyayari.

Pangungusap:

  • Talagang nais kong gumamit ng mga konektor ng laso ng laso, dahil ang mga ito ay mas matatag kaysa sa paggamit ng mga solong wire na lumulukso.
  • Tulad ng iminungkahi, gumamit ako ng isang scavenged ribbon cable mula sa isang lumang computer. Ito ay medyo nakakalito kahit na dahil kailangan mong manu-manong igiit ang pagsasaayos ng cable. Halimbawa sa proyektong ito, nalaman ko na ang ilang mga butas ay konektado sa bawat isa (malamang na ginamit bilang ground para sa orihinal na application). Samakatuwid, kailangan kong kumuha ng ibang cable sa paglaon tulad ng nakikita mo sa mga larawan.

Hakbang 3: Pagbuo ng Casing

Pagbuo ng Casing
Pagbuo ng Casing
Pagbuo ng Casing
Pagbuo ng Casing
Pagbuo ng Casing
Pagbuo ng Casing
Pagbuo ng Casing
Pagbuo ng Casing

Casing ng camera

Maraming mga casing para sa picamera ang maaaring malayang mai-download mula sa internet. Kaya, pinili kong huwag muling likhain ang gulong at pumili ng pangunahing ngunit magandang pambalot mula sa internet: thingiverse.com - Kaso / enclosure ng Raspberry pi camera. (Shout-out sa taga-disenyo na VGer.)

Casing ng traffic light

Para sa casing ng ilaw sa trapiko, nagdisenyo ako ng isang maliit na kahon sa Autodesk Fusion 360 (na malayang maida-download, tingnan ang Mga Pahayag) na umaangkop sa lahat ng hardware. Sa kalakip, mahahanap mo ang file na ipinadala ko sa aking lokal na kumpanya ng paggupit ng laser. Sa gayon, ang disenyo ay batay sa isang kapal ng 6mm na plato. Gayunpaman, kung nais mong ayusin ang mga bagay, maaari mong ma-access ang lahat ng mga uri ng mga format ng file sa pamamagitan ng paggamit ng link na ito. Tulad ng ipinakita sa mga larawan, maaari mo ring gamitin ang isang karton na kahon kung wala kang access sa isang pamutol ng laser. Ginamit ko ang kahon ng karton sa larawan para sa prototyping at gumagana ito tulad ng isang alindog.

Ang pagpupulong ay medyo tuwid pasulong:

  1. I-mount ang mga switch ng Arcade.
  2. Siguraduhin na panatilihing libre ang mga wire para sa doorbell.
  3. Ikonekta ang ribbon cable sa RPi.
  4. I-screw ang RPi sa ilalim ng panel.
  5. Ikonekta ang mga wire ng doorbell sa isang konektor ng kawad at i-mount din ito sa ibabang panel.
  6. Ikonekta ang Picamera sa RPi.
  7. Mag-drill ng isang butas sa isa sa mga panel ng gilid para sa doorbell switching wire at sa RPi power wire.

Ang konektor ng kawad ay ginagamit bilang isang mounting point para sa mga wire switch ng doorbell, upang maaari itong maayos sa isang mayroon nang doorbell sa paglaon. Ang lahat ay nasa lugar na at maaaring nakadikit nang magkasama. Gayunpaman, baka gusto mo munang tapusin ang mga susunod na hakbang, upang matiyak na gumagana ang lahat sa paraang dapat.

Pangungusap:

Ang Autodesk Fusion 360 ay malayang magagamit para sa mga hobbyist! Kung nais mong makuha ang iyong kopya, bisitahin ang link na ito: autodesk.com - Fusion 360 Para sa Mga Hobbyist. Mayroong ilang mga term, kaya tiyaking basahin at ilapat ang mga ito. Ito ang aking unang proyekto sa Fusion 360 at wala akong maraming karanasan sa paggamit ng CAD software, ngunit dapat kong sabihin na gusto ko talaga ang software at lahat ng mga karagdagang tool na kasama ng Fusion 360

Hakbang 4: Pag-configure ng Camera

Pag-configure ng Camera
Pag-configure ng Camera
Pag-configure ng Camera
Pag-configure ng Camera
Pag-configure ng Camera
Pag-configure ng Camera

Ipinapalagay na mayroon kang naka-install na Raspbian at tumatakbo ito sa GUI mode. Kung wala ka pang naka-install na Raspbian, maaari mong sundin ang artikulong ito: raspberrypi.org - Pag-install ng mga imahe ng operating system. Kung boot mo ang Raspbian, dapat mong makita ang isang desktop tulad ng ipinakita sa mga larawan.

I-configure natin ang camera sa RPi at tingnan kung gumagana ito! Ang pamamaraang inilarawan dito ay direkta mula sa raspberrypi.org - Dokumentasyon. Una, mag-update tayo sa pinakabagong mga pakete (kasama ang firmware ng camera) sa pamamagitan ng pagpapatupad ng mga sumusunod na utos sa isang window ng terminal (tingnan ang mga larawan):

sudo apt update

sudo apt full-upgrade

Susunod, kailangang paganahin ang camera gamit ang sumusunod na utos:

sudo raspi-config

Sa menu, pumunta sa 5. Mga Pagpipilian sa Interfacing -> P1 Camera. Piliin upang paganahin ang camera at i-reboot ang RPi sa pamamagitan ng pagpapatupad:

i-reboot

Dapat na mai-configure nang maayos ang camera. Maaari itong masubukan sa pamamagitan ng pagbubukas ng isang window ng terminal at isagawa:

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

Ang imahe ay nai-save sa: / home / pi.

Hakbang 5: Pag-set up ng Docker

Pag-set up ng Docker
Pag-set up ng Docker
Pag-set up ng Docker
Pag-set up ng Docker
Pag-set up ng Docker
Pag-set up ng Docker
Pag-set up ng Docker
Pag-set up ng Docker

Upang maiwasan ang mga pagkakamali sa pagtitiwala at pag-install, nagpasya akong bumuo ng isang pasadyang imahe ng Docker para sa proyektong ito (tingnan ang wikipedia.org - Docker). Kung hindi mo kailanman ginamit o narinig ang tungkol sa Docker, walang mga alalahanin, ipapaliwanag ko hakbang-hakbang kung paano ito gamitin sa proyektong ito. Sa katunayan, napakadali! Kung sakaling nais mong patakbuhin ang proyektong ito sa isang lokal na pag-install (sa halip na sa isang lalagyan ng Docker), bibigyan kita ng ilang mga tip. Ngunit lubos na inirerekumenda na gamitin ang imahe ng Docker. Pagkatapos ng lahat, binubuo ko ito upang gawing madali para sa iyo na patakbuhin ang proyektong ito!

Ano ang Docker?

Tandaan: ang bahaging ito ay nagbibigay ng ilang impormasyon sa background tungkol sa Docker, na maaaring laktawan kung nais mo lamang patakbuhin ang code.

Ang proyektong ito ay ang unang pagkakataon na ginamit ko ang Docker at ito ay simpleng kahanga-hangang! Marahil ay narinig mo ang tungkol sa virtualenv o Anaconda para sa Python? Sa gayon, ang Docker ay halos kapareho sa kahulugan na madali mong mapamahalaan ang mga bersyon ng package at magpatakbo ng iba't ibang mga bersyon ng Python sa isang host system sa pamamagitan ng paggamit ng ibang kapaligiran (o lalagyan na kung tawagin sa Docker). Ngunit, kumpara sa virtualenv at Anaconda, ang Docker ay mas malakas dahil hindi ito limitado upang maglaman lamang ng mga Python package. Sa katunayan, sa isang lalagyan ng Docker, maaari mong mai-install at pamahalaan din ang mga pakete ng isang nais na operating system. Halimbawa, isaalang-alang ang isang website na nais mong lumipat na nagpapatakbo ng isang Python web framework (hal. Django) na may isang database (hal. MySQL). Nang walang isang lalagyan ng Docker, kakailanganin mong i-install ang lahat ng mga pakete sa bagong server, isang proseso na madaling kapitan ng mga error at bug. Sa kabilang banda, kapag ang iyong website ay naitayo sa Docker, ang paglipat ay karaniwang kasing dali ng paglipat ng file ng imahe / mga file sa bagong server at patakbuhin ito / ang mga ito. Tulad ng naiisip mo, ang Docker ay lubhang kapaki-pakinabang para sa mga proyekto sa Instructables din;)! Kung nais mong malaman ang tungkol sa Docker, tingnan ang kanilang website: docker.org - Docker: Enterprise Container Platform. Ngayon, bumangon tayo at tumakbo kasama si Docker!

Pag-install ng Docker

I-install ang Docker sa pamamagitan ng pagpapatupad:

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

Susunod, ang gumagamit ay idinagdag sa usergroup 'docker', na nagbibigay ng mga karapatang patakbuhin ang Docker. Ginagawa ito ng:

sudo usermod -aG docker $ USER

Ngayon, dapat mong patakbuhin ang Docker. Maaari itong mapatunayan sa pamamagitan ng pagpapatakbo ng hello-world na imahe:

docker magpatakbo ng hello-world

Panghuli, hilahin natin ang imahe ng Docker na naglalaman ng lahat ng mga dependency na kinakailangan upang patakbuhin ang mga script ng doorbell Python. Ang prosesong ito ay maaaring magtagal habang ang imahe ay malaki (~ 1.5 GB). Isagawa:

docker pull erientes / doorbell

Tandaan: ang Dockerfile ay matatagpuan sa repository ng doorbell sa Github. Ngayon, handa na ang lahat na patakbuhin ang mga script ng doorbell, na tatalakayin sa susunod na hakbang.

Lokal na pag-install

Muli, lubos kong inirerekumenda na gamitin ang imahe ng Docker sa halip na isang lokal na pag-install. Ngunit upang makumpleto ang tutorial na ito, ilalarawan ko ngayon ang ilan sa mga hakbang na kinuha ko para sa lokal na pag-install.

Upang maipatakbo ang code, ang bersyon ng sawa ay dapat na = = 3.5 (Gumamit ako ng python 3.5.3) at ang mga sumusunod na pakete ay kailangang mai-install:

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

Ang link na ito ay lubos na kapaki-pakinabang: Github - I-install ang dlib at face_recognition sa isang Raspberry Pi. Gayunpaman, mayroong ilang mga pag-iingat dito: 1) Ang unan ay nangangailangan ng hindi bababa sa Python 3.5, na hindi mai-install kasunod sa pamamaraang ito. 2) Gayundin, hindi lahat ng mga pakete na kinakailangan sa proyekto ng doorbell ay mai-install sa pamamagitan ng pagsunod sa pamamaraang ito. Gayunpaman, dapat mong mai-install ito sa pamamagitan lamang ng paggamit ng pip3.

Hakbang 6: Pagpapatakbo ng Mga Script ng Doorbell

Pagpapatakbo ng Mga Script ng Doorbell
Pagpapatakbo ng Mga Script ng Doorbell
Pagpapatakbo ng Mga Script ng Doorbell
Pagpapatakbo ng Mga Script ng Doorbell
Pagpapatakbo ng Mga Script ng Doorbell
Pagpapatakbo ng Mga Script ng Doorbell

Kunin ang mga script

Maaaring manu-manong ma-download ang mga script mula sa: github.com - Erientes / doorbell. O kung mayroon kang naka-install na Git, magpatupad ng:

git clone

Lumikha ng mga alias

Ngayon, upang gawing mas madali ang ating buhay, lumikha tayo ng ilang mga alias upang patakbuhin ang mga script. Isagawa:

leafpad ~ /.bashrc

Idagdag ang mga sumusunod na linya at i-save ang file:

alias doorbell_run = 'runcker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -ito erientes / doorbell python $ 1'

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

Mga script ng pagsubok

Upang masubukan kung ang lahat ay naka-install nang tama, magbukas ng isang bagong terminal at magpatupad:

mga halimbawa ng doorbell_run / 0_test_installation.py

Ang resulta ay dapat na isang mensahe lamang sa window ng terminal na nagsasabing 'Matagumpay na natapos ang pag-install ng Doorbell!'. Upang masubukan kung ma-access ang camera ng lalagyan ng Docker, patakbuhin ang:

mga halimbawa ng doorbell_run / 1_test_camera.py

Sa pamamagitan ng pagpapatakbo ng 1_test_camera.py isang larawan ang makukuha at mai-save bilang 'test.jpg', na matatagpuan sa / home / pi / doorbell. Panghuli, ang mga LED driver ay maaaring masubukan sa pamamagitan ng pagpapatupad:

mga halimbawa ng doorbell_run / 2_test_voicehat_drivers.py

Kapag tumatakbo ang script na ito, dapat tumugon ang LED sa arcade switch kapag pinindot ang pindutan.

Pagpapatakbo ng mga script ng Doorbell

Upang patakbuhin ang mga script ng Doorbell, kailangan munang makuha ang mga kredensyal ng Telegram bot. I-install ang Telegram sa iyong telepono at pumunta sa telegram.me - Botfather. Magsimula ng isang pag-uusap at ipasok ang:

/ newbot

Punan ang isang pangalan at isang username para sa bot. Pagkatapos nito, bibigyan ka ng access token. Kopyahin ang halagang iyon sa file na 'mga kredensyal_telegram_template.py' sa / home / pi / doorbell at i-save ito sa isang bagong file na pinangalanang 'kredensyal_telegram.py'. Panghuli, magsimula ng isang pag-uusap kasama ang bot na iyong nilikha sa pamamagitan ng pag-click sa link na ibinibigay sa iyo ng Botfather.

Sa wakas, patakbuhin natin ang Doorbell na may Pagkilala sa Mukha:

doorbell_run main.py

Pangungusap:

Kung nais mong malaman ang tungkol sa kung paano gumagana ang code, suriin ang mga komento sa mga script mismo. Kung mayroon kang isang katanungan tungkol sa code, mangyaring makipag-ugnay sa akin sa pamamagitan ng Github

Hakbang 7: Gamit ang Doorbell

Image
Image
Gamit ang Doorbell
Gamit ang Doorbell
Gamit ang Doorbell
Gamit ang Doorbell

Patakbuhin natin ang script ng doorbell sa pamamagitan ng pagpapatupad:

doorbell_run main.py Matapos ang paglo-load ng mga package, ang mga script ay magiging tamad. Mayroong karaniwang 2 mga bagay na maaaring mangyari:

  1. May nag-doorbell.
  2. May naidagdag sa whitelist.

May nag-doorbell

Sa kasong ito, magsisimula ang script ng pagkuha ng mga larawan hanggang sa mag-shoot ito ng larawan kung saan ang isang mukha ay napansin. Pagkatapos ng pagtuklas, ang ilang mga pamamaraan mula sa python package na 'face_recognition' ay tinawag upang makalkula ang isang 128 na pag-encode ng mukha. Susunod, ang nakuha na pag-encode ay inihambing sa mga pag-encode sa whitelist.csv at blacklist.csv. Ang mga posibleng resulta ay magreresulta sa sumusunod na tugon:

Sa whitelist? Sa blacklist? Tugon
Oo Hindi Bukas ang berdeng ilaw.
Oo Oo Bukas ang dilaw na ilaw. Nagpapadala ang camera ng doorbell ng mga larawan sa Telegram bot na may orange na icon. Maaaring mangyari ang estado na ito kung ang isang tao ay naidagdag sa parehong listahan. Halimbawa, kapag ang isang tao ay tinatanggap sa una, ngunit na-blacklist sa paglaon.
Hindi Hindi Bukas ang dilaw na ilaw. Nagpapadala ang camera ng doorbell ng mga larawan sa Telegram bot na may orange na icon.
Hindi Oo Bumukas ang pulang ilaw. Nagpapadala ang camera ng doorbell ng mga larawan sa Telegram bot na may pulang icon.

May naidagdag sa whitelist

Upang magdagdag ng isang tao sa whitelist, pindutin ang dilaw na pindutan ng ilaw ng trapiko kapag ang doorbell ay nasa idle na estado. Una, bubuksan ang dilaw na ilaw. Kung ang berdeng ilaw ay kumikislap ng 3 beses, matagumpay na naidagdag ang mukha ng tao sa whitelist. Kung ang berdeng ilaw ay hindi kumurap ng 3 beses, ang pagtatangka ay hindi matagumpay. Sa kasong iyon, pindutin muli ang dilaw na pindutan. Madali mong mai-verify kung matagumpay ito sa pamamagitan ng pag-ring sa doorbell at pag-check kung naipasa ang berdeng ilaw.

Paano magdagdag ng isang tao sa blacklist?

Malinaw na, ang mga taong may masamang hangarin ay hindi dumadaan upang bigyan kami ng isang larawan ng kanilang mukha. Kaya sa halip, maaari kang magdagdag ng mga larawan ng mga kilalang tao na (halimbawa) na-publish ng pulisya sa folder na img / blacklist. Bawat oras, nasuri ang folder na ito para sa mga bagong imahe. Kung mayroong isang bagong imahe, ang pag-encode ng mukha ay kinakalkula at idinagdag sa blacklist.csv. Ang imahe ay pagkatapos ay pinalitan ng pangalan at inilipat sa folder / img / blacklist / naka-encode.

Pangungusap:

  • Ang pagpapatakbo ng mga script sa pamamagitan ng pag-login sa RPi ay nagbibigay ng mas maraming kontrol at impormasyon, ngunit ang pangunahing kontrol at impormasyon ay maaaring makuha sa pamamagitan lamang ng paggamit ng display ng ilaw trapiko.
  • Ang pagkilala sa mukha ay ipinatupad sa pamamagitan ng paggamit ng python package na 'face_recognition'. Ang package na ito ay batay sa Dlib na naglalaman ng isang state-of-the-art na pagkilala sa algorithm, na gumaganap ng katumpakan na 99.38% sa Mga Label na Mukha sa Wild benchmark (pinagmulan: dlib.net - Mataas na Kalidad na Pagkilala sa Mukha na may Deep Metric Learning).
Tulong sa Teknikal na Paligsahan
Tulong sa Teknikal na Paligsahan
Tulong sa Teknikal na Paligsahan
Tulong sa Teknikal na Paligsahan

Unang Gantimpala sa assistive Tech Contest

Inirerekumendang: