Satura rādītājs:

Durvju zvans ar sejas atpazīšanu: 7 soļi (ar attēliem)
Durvju zvans ar sejas atpazīšanu: 7 soļi (ar attēliem)

Video: Durvju zvans ar sejas atpazīšanu: 7 soļi (ar attēliem)

Video: Durvju zvans ar sejas atpazīšanu: 7 soļi (ar attēliem)
Video: BERMUDU DIVSTŪRIS x APVEDCEĻŠ - Brāl' Ar Dzīvi Nekaulē 2024, Jūlijs
Anonim
Durvju zvans ar sejas atpazīšanu
Durvju zvans ar sejas atpazīšanu

Motivācija

Nesen manā valstī ir bijis laupīšanas vilnis, kas vērsts uz vecāka gadagājuma cilvēkiem viņu mājās. Parasti piekļuvi piešķir paši iemītnieki, jo apmeklētāji viņus pārliecina, ka viņi ir aprūpētāji/medmāsas. Ir vienkārši vārdi, cik dusmīgi un skumji šie stāsti man liek justies. Mājām vajadzētu būt jūsu pirmajam drošajam patvērumam un vēl jo vairāk, ja atrodaties ārpusē, jūs jau esat neaizsargātā stāvoklī. Paturot to prātā, es sāku šo projektu.

Galvenā informācija

Durvju zvana sistēma galvenokārt ir paredzēta vecāka gadagājuma cilvēkiem vai cilvēkiem ar redzes traucējumiem, un tā darbība ir diezgan vienkārša. Īsāk sakot, durvju zvana slēdzis aktivizē kameru, lai iegūtu kadrus. Pēc tam kadros tiek atklātas sejas, un tās tiek saskaņotas ar balto sarakstu un melno sarakstu. Braucējs saņem skaidru vizuālu atgriezenisko saiti ar skaidru luksofora displeju. Līdz ar to zaļā, dzeltenā vai sarkanā gaisma norāda, ka persona (-as) ir iekļauta baltajā sarakstā, kas sistēmai nav zināma vai melnajā sarakstā. Ja iedegas dzeltena vai sarkana gaisma, fotoattēlu nosūta Telegram robots, lai informētu/brīdinātu radinieku vai aprūpētāju.

Zināšanu līmenis

Projekts tika izveidots entuziastiem, kuriem īpaši interesē datora redzes un mākslīgā intelekta izmantošana. Šī pamācība ir rakstīta iesācēju auditorijai, tāpēc neuztraucieties, ja jums nav pieredzes! Turklāt projekts var būt interesants arī pieredzējušākiem veidotājiem, jo cauruļvads ir organizēts tā, lai jūs varētu to paplašināt ar savu datora redzējumu un sejas atpazīšanas idejām bez lielām grūtībām.

1. solis: materiāli

Materiāli
Materiāli

Produktu saraksts ar minimālajām prasībām:

Produkts Saite Komentēt
Raspberry Pi 3b RPi Saite parāda RPi 4, jo tai ir daudz labāka veiktspēja un gandrīz tāda pati cena kā RPi 3b.
Micro SD Amazon 16 GB vai lielāka micro SD karte veiks šo uzdevumu. Bet Amazon 16 GB kartes tagad ir gandrīz tādas pašas cenas kā 32 GB kartes.
Raspberry Pi kamera Amazon Kamera v1 ir lētāka, bet v2 ir labāka un tiks atbalstīta ilgāk.
15 kontaktu FPC elastīgais kabelis Amazon Ilgums faktiski ir atkarīgs no šī projekta īstenošanas apstākļiem. Ja jūs vienkārši vēlaties izveidot prototipu, oriģinālais elastīgais kabelis veiks šo darbu.
Barošanas avots 5V micro usb Adafruit Šis nekad neļāva satikties! Lieliska kvalitāte. (Nav fotoattēlā)
Arkādes pogas ar iebūvētu LED Amazon Izvēlieties vēlamo izmēru, bet CAD dizains ir balstīts uz 60 mm pogām
Rezistori Amazon Jums vienkārši nepieciešami pāris 1k un 100 omu rezistori. Parastie 1/4 W ir labi.
Kondensatori 0,1 uF Amazon Nepieciešami trīs kondensatori. (Nav fotoattēlā)
Džempera vadi / lentes kabelis AmazonAmazon Ja vēlaties ietaupīt naudu, varat izmantot arī veco disketes lentes kabeli (skatiet fotoattēlu).
Saraušanās caurule / elektriskā lente AmazonAmazon

Nepieciešamie rīki:

Rīks Būtiski? Komentēt
Lodāmurs
Multimetrs
Stiepļu noņēmējs Vai arī varat izmantot nazi/šķēres.
Lāzera griezējs
3D printeris
Skavas Noderīga kastes turēšanai kopā testēšanas fāzē.

Piezīmes:

Lai palielinātu projekta pieejamību, es nolēmu to izstrādāt, izmantojot Raspberry Pi 3b. Lai gan tas palielina pieejamību, tas samazina lietojumprogrammas iespējas, jo RPi nav tik ātri. Ja jūs meklējat ātrāku viena borta datoru, iespējams, vēlēsities apskatīt NVIDIA Jetson Nano

2. solis: elektroinstalācija

Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija

Shematiskā diagramma ir visinformatīvākā šim solim un ir diezgan pašsaprotama. Ja esat jauns elektronikas lietotājs, varat izmantot leģendas attēlu. Komponenta vērtība (ja piemērojama) ir norādīta shematiskajā diagrammā. Fotogrāfijas var palīdzēt redzēt, kā es izveidoju ķēdi. Būtībā es savienoju visus komponentus pēc iespējas tuvāk arkādes pogai, kā rezultātā tika sniegts skaidrs pārskats par notiekošo.

Piezīmes:

  • Man ļoti patīk izmantot lentes kabeļu savienotājus, jo tie ir daudz izturīgāki nekā viena džempera vadi.
  • Kā ieteikts, esmu izmantojis izvilktu lentes kabeli no veca datora. Tomēr tas ir nedaudz sarežģīti, jo jums būs manuāli jāapstiprina kabeļa konfigurācija. Piemēram, šajā projektā es uzzināju, ka daži caurumi ir savienoti viens ar otru (iespējams, tika izmantoti kā pamats sākotnējam lietojumam). Tāpēc vēlāk man nācās iegūt citu kabeli, kā redzams attēlos.

3. solis: korpusa veidošana

Korpusa veidošana
Korpusa veidošana
Korpusa veidošana
Korpusa veidošana
Korpusa veidošana
Korpusa veidošana
Korpusa veidošana
Korpusa veidošana

Kameras korpuss

Daudzus picamera apvalkus var brīvi lejupielādēt no interneta. Tātad, es izvēlos neizgudrot riteni no jauna un izvēlēties vienkāršu, bet jauku korpusu no interneta: thingiverse.com - Raspberry pi kameras korpuss/korpuss. (Uzsauciet dizainerim VGer.)

Luksofora korpuss

Luksofora korpusam es izveidoju nelielu kastīti Autodesk Fusion 360 (kas ir brīvi lejupielādējama, sk. Piezīmes), kas der visai aparatūrai. Pielikumā varat atrast failu, ko esmu nosūtījis savam vietējam lāzergriešanas uzņēmumam. Tādējādi dizains ir balstīts uz 6 mm plāksnes biezumu. Tomēr, ja vēlaties pielāgot lietas, varat piekļūt visu veidu failu formātiem, izmantojot šo saiti. Kā parādīts attēlos, varat izmantot arī kartona kastīti, ja jums nav piekļuves lāzera griezējam. Prototipēšanai izmantoju kartonā redzamo kartona kārbu, un tā darbojas kā šarms.

Montāža ir diezgan taisna:

  1. Uzstādiet Arcade slēdžus.
  2. Pārliecinieties, ka durvju zvana vadi nav brīvi.
  3. Pievienojiet lentes kabeli RPi.
  4. Pieskrūvējiet RPi uz apakšējā paneļa.
  5. Savienojiet durvju zvana vadus ar vadu savienotāju un piestipriniet to arī pie apakšējā paneļa.
  6. Pievienojiet Picamera RPi.
  7. Izurbiet caurumu vienā no sānu paneļiem durvju zvana pārslēgšanas vadam un RPi barošanas vadam.

Vada savienotājs tiek izmantots kā durvju zvana slēdža vadu stiprinājuma punkts, lai vēlāk to varētu piestiprināt pie esoša durvju zvana. Tagad viss ir savās vietās un var salīmēt kopā. Tomēr vispirms varat pabeigt nākamās darbības, lai pārliecinātos, ka viss darbojas tā, kā paredzēts.

Piezīmes:

Autodesk Fusion 360 ir brīvi pieejams hobijiem! Ja vēlaties iegūt savu kopiju, apmeklējiet šo saiti: autodesk.com - Fusion 360 For Hobbyists. Ir daži termini, tāpēc noteikti izlasiet un izmantojiet tos. Tas bija mans pirmais projekts ar Fusion 360, un man nav lielas pieredzes CAD programmatūras lietošanā, taču jāsaka, ka man ļoti patīk programmatūra un visi papildu rīki, kas nāk ar Fusion 360

4. darbība: kameras konfigurēšana

Kameras konfigurēšana
Kameras konfigurēšana
Kameras konfigurēšana
Kameras konfigurēšana
Kameras konfigurēšana
Kameras konfigurēšana

Tiek pieņemts, ka jums ir instalēta Raspbian un ka tā darbojas GUI režīmā. Ja vēl neesat instalējis Raspbian, varat sekot šim rakstam: raspberrypi.org - Operētājsistēmas attēlu instalēšana. Ja startējat Raspbian, jums vajadzētu redzēt darbvirsmu, kā parādīts attēlos.

Konfigurēsim kameru RPi un pārbaudīsim, vai tā darbojas! Šeit aprakstītā metode ir tieši no raspberrypi.org - Dokumentācija. Vispirms atjaunināsim jaunākās pakotnes (ieskaitot kameras programmaparatūru), termināļa logā izpildot šādas komandas (skat. Attēlus):

sudo apt atjauninājums

sudo apt pilna jaunināšana

Tālāk kamera ir jāiespējo, izmantojot šādu komandu:

sudo raspi-config

Izvēlnē dodieties uz 5. Saskarnes opcijas -> P1 kamera. Izvēlieties iespējot kameru un restartējiet RPi, izpildot:

pārstartēt

Tagad kamerai jābūt pareizi konfigurētai. To var pārbaudīt, atverot termināļa logu un izpildot:

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

Attēls tiek saglabāts mapē: /home /pi.

5. darbība: Docker iestatīšana

Docker iestatīšana
Docker iestatīšana
Docker iestatīšana
Docker iestatīšana
Docker iestatīšana
Docker iestatīšana
Docker iestatīšana
Docker iestatīšana

Lai izvairītos no atkarības un instalēšanas kļūdām, es nolēmu šim projektam izveidot pielāgotu Docker attēlu (skat. Wikipedia.org - Docker). Ja jūs nekad neesat izmantojis vai dzirdējis par Docker, neuztraucieties, es soli pa solim paskaidrošu, kā to izmantot šajā projektā. Patiesībā tas ir super vienkārši! Ja vēlaties palaist šo projektu vietējā instalācijā (nevis Docker konteinerā), es jums sniegšu dažus padomus. Bet ir ļoti ieteicams izmantot Docker attēlu. Galu galā es to veidoju, lai jums būtu viegli vadīt šo projektu!

Kas ir Docker?

Piezīme: šajā daļā ir sniegta pamatinformācija par Docker, kuru var izlaist, ja vēlaties tikai palaist kodu.

Šis projekts ir pirmā reize, kad izmantoju Docker, un tas ir vienkārši lieliski! Varbūt esat dzirdējuši par virtualenv vai Anaconda for Python? Nu, Docker ir diezgan līdzīgs tādā nozīmē, ka jūs varat viegli pārvaldīt pakotņu versijas un palaist dažādas Python versijas vienā resursdatora sistēmā, izmantojot citu vidi (vai konteineru, kā to sauc Docker). Bet, salīdzinot ar virtualenv un Anaconda, Docker ir daudz jaudīgāks, jo tas neaprobežojas tikai ar Python pakotnēm. Patiešām, Docker konteinerā varat instalēt un pārvaldīt arī vēlamās operētājsistēmas pakotnes. Piemēram, apsveriet vietni, kuru vēlaties migrēt un kurā darbojas Python tīmekļa ietvars (piemēram, Django) ar datu bāzi (piemēram, MySQL). Ja nebūtu Docker konteinera, jums būtu jāinstalē visas pakotnes jaunajā serverī, kas ir ļoti pakļauts kļūdām un kļūdām. No otras puses, ja jūsu vietne ir veidota Docker, migrēšana būtībā ir tikpat vienkārša kā attēla faila/failu pārvietošana uz jauno serveri un palaišana. Kā jūs varat iedomāties, Docker ir ļoti noderīgs arī projektos par Instructables;)! Ja vēlaties uzzināt vairāk par Docker, apmeklējiet viņu vietni: docker.org - Docker: Enterprise Container Platform. Tagad sāksim darboties ar Docker!

Docker instalēšana

Instalējiet Docker, izpildot:

čokurošanās -sSL https://get.docker.com | sh

Pēc tam lietotājs tiek pievienots lietotāju grupai "docker", kas nodrošina tiesības palaist Docker. To veic:

sudo usermod -aG docker $ USER

Tagad jums vajadzētu būt iespējai palaist Docker. To var apstiprināt, palaižot labās pasaules attēlu:

docker run hello-world

Visbeidzot, izvelciet Docker attēlu, kurā ir visas atkarības, kas nepieciešamas, lai palaistu durvju zvana Python skriptus. Šis process var aizņemt kādu laiku, jo attēls ir diezgan liels (~ 1,5 GB). Izpildīt:

docker pull erientes/durvju zvans

Piezīme: Dockerfile ir atrodams Github durvju zvana krātuvē. Tagad viss ir gatavs, lai palaistu durvju zvana skriptus, kas tiks apspriesti nākamajā solī.

Vietējā instalācija

Atkal es ļoti ieteiktu izmantot Docker attēlu, nevis vietējo instalāciju. Bet, lai šī apmācība būtu pabeigta, es tagad aprakstīšu dažas darbības, ko veicu vietējai instalēšanai.

Lai varētu palaist kodu, python versijai jābūt> = 3.5 (es izmantoju python 3.5.3) un jāinstalē šādas paketes:

  • face_recognition
  • picamera
  • dūšīgs
  • Spilvens
  • python-telegram-bot
  • RPi. GPIO

Šī saite ir diezgan noderīga: Github - instalējiet dlib un face_recognition Raspberry Pi. Tomēr šeit ir daži brīdinājumi: 1) Spilvenam ir nepieciešama vismaz Python 3.5 versija, kas netiks instalēta pēc šīs metodes. 2) Turklāt ne visas paketes, kas nepieciešamas durvju zvana projektā, tiks instalētas, ievērojot šo metodi. Tomēr jums vajadzētu būt iespējai to instalēt, vienkārši izmantojot pip3.

6. darbība: durvju zvana skriptu palaišana

Durvju zvana skriptu palaišana
Durvju zvana skriptu palaišana
Durvju zvana skriptu palaišana
Durvju zvana skriptu palaišana
Durvju zvana skriptu palaišana
Durvju zvana skriptu palaišana

Iegūstiet skriptus

Skriptus var manuāli lejupielādēt no: github.com - Erientes/durvju zvans. Vai arī, ja esat instalējis Git, izpildiet:

git klons

Izveidojiet aizstājvārdus

Tagad, lai atvieglotu mūsu dzīvi, izveidosim dažus aizstājvārdus, lai palaistu skriptus. Izpildīt:

leafpad ~/.bashrc

Pievienojiet šādas rindas un saglabājiet failu:

alias doorbell_run = 'docker run -priviliģēts -v/home/pi/doorbell:/doorbell -w/doorbell -it erientes/doorbell python $ 1'

alias doorbell_login = 'docker run -priviliģēts -v/home/pi/durvju zvans:/durvju zvans -w/durvju zvans -it erientes/durvju zvans"

Pārbaudiet skriptus

Lai pārbaudītu, vai viss ir pareizi instalēts, atveriet jaunu termināli un izpildiet:

durvju zvana piemēri/0_test_installation.py

Rezultātam vienkārši jābūt ziņojumam termināļa logā, kurā teikts: “Durvju zvana instalēšana ir veiksmīgi pabeigta!”. Lai pārbaudītu, vai kamerai var piekļūt, izmantojot Docker konteineru, palaidiet:

durvju zvana piemēri/1_test_camera.py

Palaižot 1_test_camera.py, fotoattēls tiks uzņemts un saglabāts kā “test.jpg”, kas atrodams mapē/home/pi/doorbell. Visbeidzot, LED draiverus var pārbaudīt, izpildot:

durvju zvana piemēri/2_test_voicehat_drivers.py

Kad šis skripts darbojas, arkādes slēdža gaismas diodei vajadzētu reaģēt, nospiežot pogu.

Darbojas durvju zvana skripti

Lai palaistu durvju zvana skriptus, vispirms ir jāiegūst Telegram robota akreditācijas dati. Instalējiet Telegram savā tālrunī un dodieties uz telegram.me - Botfather. Sāciet sarunu un ievadiet:

/newbot

Ievadiet robota vārdu un lietotājvārdu. Pēc tam jums tiks piešķirts piekļuves marķieris. Kopējiet šo vērtību failā "credentials_telegram_template.py"/home/pi/doorbell un saglabājiet to jaunā failā ar nosaukumu "credentials_telegram.py". Visbeidzot, sāciet sarunu ar tikko izveidoto robotu, noklikšķinot uz Botfather sniegtās saites.

Visbeidzot, palaidīsim durvju zvanu ar sejas atpazīšanu:

durvju zvans_run main.py

Piezīmes:

Ja vēlaties uzzināt vairāk par koda darbību, skatiet komentārus pašos skriptos. Ja jums ir jautājumi par kodu, lūdzu, sazinieties ar mani, izmantojot Github

7. darbība: durvju zvana izmantošana

Image
Image
Durvju zvana izmantošana
Durvju zvana izmantošana
Durvju zvana izmantošana
Durvju zvana izmantošana

Palaidīsim durvju zvana skriptu, izpildot:

durvju zvans_run main.py Pēc pakotņu ielādes skripti paliek dīkstāvē. Būtībā var notikt 2 lietas:

  1. Kāds zvana pie durvīm.
  2. Kāds ir pievienots baltajam sarakstam.

Kāds zvana pie durvīm

Šajā gadījumā skripts sāks fotografēt, līdz uzņems fotoattēlu, kurā tiek atklāta seja. Pēc noteikšanas tiek izsauktas dažas metodes no python pakotnes “face_recognition”, lai aprēķinātu sejas 128 kodējumu. Tālāk iegūto kodējumu salīdzina ar kodējumiem baltajā sarakstā.csv un melnajā sarakstā.csv. Iespējamie rezultāti rada šādu atbildi:

Baltā sarakstā? Melnajā sarakstā? Atbilde
Iedegas zaļā gaisma.
Ieslēdzas dzeltenā gaisma. Durvju zvana kamera nosūta fotoattēlus uz Telegram robotu ar oranžu ikonu. Šis stāvoklis var rasties, ja kāds ir pievienots abiem sarakstiem. Piemēram, kad sākumā kāds bija laipni gaidīts, bet vēlāk tika iekļauts melnajā sarakstā.
Ieslēdzas dzeltenā gaisma. Durvju zvana kamera nosūta fotoattēlus uz Telegram robotu ar oranžu ikonu.
Ieslēdzas sarkanā gaisma. Durvju zvana kamera nosūta fotoattēlus uz Telegram robotu ar sarkanu ikonu.

Kāds ir pievienots baltajam sarakstam

Lai pievienotu kādu personu baltajam sarakstam, nospiediet luksofora dzelteno pogu, kad durvju zvans ir gaidīšanas režīmā. Pirmkārt, iedegsies dzeltenā gaisma. Ja zaļā gaisma mirgo 3 reizes, personas seja ir veiksmīgi pievienota baltajam sarakstam. Ja zaļā gaisma nemirgo 3 reizes, mēģinājums nebija veiksmīgs. Tādā gadījumā vēlreiz nospiediet dzelteno pogu. Jūs varat viegli pārbaudīt, vai tas bija veiksmīgs, piezvanot pie durvīm un pārbaudot, vai zaļā gaisma ir nodota.

Kā pievienot personu melnajam sarakstam?

Acīmredzot cilvēki ar sliktiem nodomiem nepaies garām, lai mums nodotu savas sejas fotoattēlu. Tā vietā jūs varat pievienot bēdīgi slavenu cilvēku attēlus, kurus (piemēram) policija ir publicējusi mapē img/melnais saraksts. Katru stundu šajā mapē tiek pārbaudīti jauni attēli. Ja ir jauns attēls, sejas kodējums tiek aprēķināts un pievienots melnajam sarakstam.csv. Pēc tam attēls tiek pārdēvēts un pārvietots uz mapi/img/melnais saraksts/kodēts.

Piezīmes:

  • Skriptu lietošana, piesakoties RPi, nodrošina daudz lielāku kontroli un informāciju, bet pamata vadību un informāciju var iegūt, tikai izmantojot luksofora displeju.
  • Sejas atpazīšana tiek īstenota, izmantojot python pakotni 'face_recognition'. Šī pakotne ir veidota, izmantojot Dlib, kas satur vismodernāko sejas atpazīšanas algoritmu, kas nodrošina 99,38% precizitāti marķētajām sejām savvaļā (avots: dlib.net-Augstas kvalitātes sejas atpazīšana ar dziļu metrikas mācīšanos)).
Palīgtehnikas konkurss
Palīgtehnikas konkurss
Palīgtehnikas konkurss
Palīgtehnikas konkurss

Pirmā balva palīgtehnikas konkursā

Ieteicams: