Sisällysluettelo:

Kasvontunnistuspeili salaisella osastolla: 15 vaihetta (kuvilla)
Kasvontunnistuspeili salaisella osastolla: 15 vaihetta (kuvilla)

Video: Kasvontunnistuspeili salaisella osastolla: 15 vaihetta (kuvilla)

Video: Kasvontunnistuspeili salaisella osastolla: 15 vaihetta (kuvilla)
Video: What does Smart Bathroom Mirror do? 2024, Heinäkuu
Anonim
Kasvontunnistuspeili salaisella osastolla
Kasvontunnistuspeili salaisella osastolla
Kasvontunnistuspeili salaisella osastolla
Kasvontunnistuspeili salaisella osastolla
Kasvontunnistuspeili salaisella osastolla
Kasvontunnistuspeili salaisella osastolla

Minua ovat aina kiehtoneet tarinoissa, elokuvissa ja vastaavissa käytetyt aina luovat salaiset lokerot. Joten kun näin salaisen osaston kilpailun, päätin kokeilla ajatusta itse ja tehdä tavallisen näköisen peilin, joka avaa salaisen sivulaatikon, kun oikea henkilö katsoo sitä.

Hyödyntämällä Raspberry Pi: tä, jonkin verran tietoa python-ohjelmoinnista ja 8. luokan myymäläluokasta, voimme luoda tämän spiffy-laitteen piilottamaan näkyvissä olevat esineet, joihin vain oikealla käyttäjällä on pääsy.

Haluan kiittää erityisesti näitä ihmisiä/alustoja, joista olen myös saanut tietoni ja resursseja:

TeCoEd - Youtube -kanava

Emmet PiMyLifeUpilta

MJRoBot Hackster.io -sivustolla (profiili)

Gaven MacDonald - Youtube -kanava

Tucker Shannon Thingiversessa (profiili)

Tarvikkeet

Kehystarvikkeet:

  • Puulauta (Tämän levyn mitat olivat 42 "7,5" x 5/16 ")
  • Lyijykynäkehys (lasilla)
  • Spray-maali
  • Yksisuuntainen heijastava liima
  • Lasinpuhdistusaine ja rätti
  • MDF Puu

Kasvontunnistustarvikkeet:

  • Raspberry Pi (käytin Pi 3 B+: ta, mutta on myös muita vaihtoehtoja)
  • Kameramoduuli
  • Askelmoottori

Työkalut:

  • Pöytäsaha
  • Jig -saha
  • HiekkapaperiPuu
  • GlueTape
  • Mitata
  • Sakset
  • Suihkupullo
  • 3D tulostin
  • Pikaliima

Vaihe 1: Leikkaukset laatikon kehykseen

Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon
Leikkaukset laatikon runkoon

Ostin kuvakehyksen käytettyjen kaupasta. Vain varoitus: varmista, että kehyksen muodostavat lankut ovat vähintään 1 1/2 leveitä. Näin voit liimata siihen muita puulevyjä, joissa on riittävästi tilaa työskennellä. Varmista myös, että lasi on runko on täysin kirkas. Ostin vahingossa himmeän ja jouduin sitten ostamaan toisen kehyksen vain kirkkaalle lasille. Koska kehystäni käytetään, laatikon kehyksen mitat voivat vaihdella.

  • Aseta kehys pystyasentoon. Mittaa lasinreiän puolen pitkät sivut (LS) kehyksessä ja lisää ½”sekä ylä- että alapuolelta. (eli lisää tuuma lasiaukon mittauksen pitkälle puolelle. Merkitse tämä ja merkitse LSM (Long Side Measurement).
  • Samoin mittaa reiän yläpuoli ja lisää 1”. Tallenna tämä ja merkitse SSM (Short Side Measurement).
  • Hanki lauta ja leikkaa pöytäsahalla kaksi LSM x 2”ja kaksi SSM x 2”.
  • Ota yksi LSM -leikkauksista ja mittaa 2”x1” suorakulmio, joka on 1”alhaalta ja ½” vasemmalta ja oikealta puolelta (kuten kuvassa 3).
  • Leikkaa reikä palapelin avulla. Hio sitten reunat hiekkapaperilla.

Vaihe 2: Leikkaa laatikkoa

Leikkaukset laatikolle
Leikkaukset laatikolle
Leikkaukset laatikolle
Leikkaukset laatikolle
Leikkaukset laatikolle
Leikkaukset laatikolle
Leikkaukset laatikolle
Leikkaukset laatikolle

Nyt alamme rakentaa laatikkoa (eli salainen osasto).

  • Leikkaa kaksi 4 x 1 tuuman sivua, 3 x 1 tuumaa (takareuna), 4 x 1 tuumaa (etureuna) ja 4 x 3 tuumaa (taso).
  • Liimaa ensimmäinen 4”x 1” puoli korin 4”sivua pitkin. Laitoin pari taitettua paperia korin puolen alle, joten se nostettiin hieman, joten se ei vetäisi reikään, jonka leikkasin LS -lankusta. Aseta kuivumaan 30 minuutiksi.
  • Liimaa samalla tavalla 3 x 1 tuumaa korin 3 tuuman reunaa pitkin. Aseta kuivumaan 30 minuutiksi. Liimaa sitten toinen 4”x 1” -puoli ensimmäisen vastakkaiselle puolelle. Aseta kuivumaan 30 minuutiksi.
  • Jätä etureuna toistaiseksi sivuun. Se on viimeinen asia, joka on liimattu laatikkoon.
  • Kun olet valmis, tarkista, mahtuuko se reikään, jonka palasit LSM -lankkuun. Jos ei, hio reikä, kunnes vetolaatikko liukuu helposti sisään ja ulos ilman vetoa.

Vaihe 3: Kehyksen asettaminen yhteen

Kehyksen yhdistäminen
Kehyksen yhdistäminen
Kehyksen yhdistäminen
Kehyksen yhdistäminen
Kehyksen yhdistäminen
Kehyksen yhdistäminen

Kun kaikki osat ovat valmiit, voimme aloittaa koko kehyksen kokoamisen.

  • Liimaa LSM -lankku keskelle lasiaukkoa ½”kummallakin puolella. Varmista, että se on liimattu ½”etäisyydellä reiästä (kuten kuvassa 1). Aseta kuivumaan 30 minuutiksi.
  • Liimaa ensimmäinen SSM -lankku siten, että reuna koskettaa juuri liimatun LSM -lankun sisäpuolta. (Käytä viivainta varmistaaksesi, että se on liimattu suoraan). Aseta kuivumaan 30 minuutiksi.
  • Ota toinen LSM -puoli ja liimaa samanlainen kuin ensimmäinen. Varmista, että se on ½ tuuman päässä reiästä ja että juuri kiinnitetty SSM on liimattu lankun sisäpuolelle. Aseta kuivumaan 30 minuutiksi.
  • Liimaa viimeinen SSM yläreunaan. Koska sinulla on kaksi LSM: ää molemmilla puolilla, riippuen siitä, kuinka suoraan kiinnitit ne, sinun on ehkä hiottava SSM: n sivut alas varmistaaksesi, että se sopii (leikkaus on joskus pois päältä). Aseta kuivumaan 30 minuutiksi.
  • Mittaa pieni tila laatikon pohjan ja kehyksen välillä. Leikkaa MDF -puukappale tällä mitalla 4 ". Haluat asettaa tämän kappaleen lähelle laatikkoa, mutta ei kosketa siihen. Sen on tarkoitus tukea laatikkoa mahdollisimman vähäisellä kitkalla.
  • Kun kaikki on tehty, ruiskutin maalatun kehyksen vain niin, että kaikki palaset sopivat yhteen.

Vaihe 4: Peilille

Peilin puolesta
Peilin puolesta
Peilin puolesta
Peilin puolesta
Peilin puolesta
Peilin puolesta
Peilin puolesta
Peilin puolesta

Amazonilta ostamani yksisuuntainen kalvoliima oli noin 10 dollaria. On laadukkaampia, jotka ovat hieman kalliimpia, jos olet kiinnostunut. Käyttämäni heijastaa, mutta voit kertoa, että se ei ole tavallinen peili, jonka näet kotona. Kalliimmat saavat sen ilmeen.

  • Puhdista lasi molemmin puolin lasinpuhdistusaineella.
  • Rullaa yksisuuntainen liima rullalta ja aseta lasi päälle. Leikkaa liima pois niin, että lasin kummallakin puolella on vähintään ½”ylimäärä.
  • Aseta lasi sivuun ja kastele sen toinen puoli vedellä. Irrota sitten muovipäällyste yksisuuntaisesta liimasta ja suihkuta juuri paljastunut puoli vedellä.
  • Aseta lasin märkä puoli liiman märälle puolelle. Anna seistä 30 minuuttia.
  • Käännä ja peukalolla tasoita mahdolliset kuplat liiman ja lasin välillä. Leikkaa sitten ylimääräinen liima reunojen ympäri.

Vaihe 5: Asenna Raspbian Stretch

Tämä oli ensimmäinen kerta, kun syvensin Raspberry Pi -ympäristöön ja aloin etsiä ohjeita käyttöjärjestelmän asentamisesta. Löysin lopulta Youtubesta yksinkertaisen opetusohjelman TeCoEdilta, joka kävi läpi Stretchin asentamisen SD -kortille (myös melko kaunis johdanto). Tässä on linkki opetusohjelmaan:

Pohjimmiltaan sinun tarvitsee vain tehdä:

  • Alusta SD -kortti valitsemalla Drive >> Drive Tools >> Format. Lataa Raspian Stretchin ZIP-tiedosto (löytyy täältä:
  • Flash -käyttöjärjestelmän kuva SD -kortille. TeCoEd käytti Win32 Disk Imager -ohjelmaa tämän suorittamiseen. Päätin asentaa balenaEtcherin, joka näytti hieman yksinkertaisemmalta. (Tässä on balenaEtcherin latauslinkki:
  • Kun olet balenaEtcherissä, valitse”Flash From File” ja valitse aiemmin ladattu ZIP -tiedosto. Valitse seuraavaksi haluamasi SD -kortti (jos sitä ei valita automaattisesti). Paina sitten mehukasta salamapainiketta ja odota, että taika tapahtuu.

Kun olet asentanut SD -kortille, voit asettaa sen Raspberry Pi -laitteeseen ja käydä läpi yleisen Pi -asennusprosessin.

Vaihe 6: Asenna OpenCV

Siirry nyt kasvojen tunnistamiseen suuntautuneisiin osiin. Jotta voimme tunnistaa kasvot, meidän on ladattava OpenCV -kirjasto, joka sisältää suuren määrän työkaluja tietokoneen näkemiseen.

OpenCV: n asentaminen oli minulle vaikein osa ohjelmistoa. Mutta lukuisten ohjeiden jälkeen löysin vihdoin Emmetin opetusohjelman PiMyLifeUpista, joka teki tempun, joka löytyy täältä:

En käy läpi näitä vaiheita, koska sinulle sopii paremmin niiden seuraaminen linkistä (annetut selitykset ja mahdollisuus kopioida ja liittää suoraan sivustosta helpommin).

Vaihe 7: Ota kamera käyttöön/testaa sitä

Ota kamera käyttöön/testaa sitä
Ota kamera käyttöön/testaa sitä
Ota kamera käyttöön/testaa sitä
Ota kamera käyttöön/testaa sitä

Kun olin asentanut OpenCV: n, loput matkastani saatiin päätökseen käyttämällä Hackster.io-sivuston MJRoBotin opetusohjelmaa, joka löytyy täältä:

Ennen kuin aloitamme, haluan muistuttaa teitä siitä, että en ole näiden käsikirjoitusten alkuperäinen luoja, mutta päädyin muuttamaan niiden osia.

Aluksi meidän on testattava kamera varmistaaksemme, että voimme kaapata videota näytölle. Vietin noin tunnin yrittäessäni suorittaa MJRoBotin vaiheen 3 skriptiä. Kuten elämässä olisi, meidän on itse asiassa otettava kamera käyttöön Raspberry Pi -laitteessa (osoittautuu, että saattaa olla hyvä idea lukea mukana toimitetut ohjeet … mmm ei). Joten kun olet liittänyt kameran oikeaan porttiin, toimi seuraavasti:

  • Avaa komentopääte ja kirjoita sudo raspi-config
  • Valitse Ota kamera käyttöön (tämä saattaa löytyä laitevaihtoehdosta)
  • Paina "Enter"
  • Siirry kohtaan Valmis ja sinua kehotetaan käynnistämään uudelleen

Noudata sitten näitä ohjeita:

  • Siirry Vadelman päävalikkoon (vasen yläkulma)
  • Asetukset
  • Raspberry Pi -määritykset
  • Käyttöliittymät
  • Valitse sitten kamerassa "Käytössä"
  • Sitten Okei"

Nyt sinun pitäisi pystyä suorittamaan tämä komentosarja MJRoBotin opetusohjelmasta kameran testaamiseksi (muista, että kaikki tämä koodi ja perusteellisempi kuvaus löytyvät yllä olevasta linkistä MJRobotin opetusohjelmaan):

tuo numpy np: nä

tuoda cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Leveys cap.set (4, 480) # set Korkeus taas (True): ret, frame = cap.read () frame = cv2. käännä (kehys, -1) # Käännä kamera pystysuunnassa harmaa = cv2.cvtColor (kehys, cv2. COLOR_BGR2GRAY) cv2.imshow ('kehys', kehys) cv2.imshow ('harmaa', harmaa) k = cv2.waitKey (30) & 0xff, jos k == 27: # sulje tauko painamalla ESC -näppäintä. Release () cv2.destroyAllWindows ()

Edellisessä koodissa pitäisi näkyä kaksi ikkunaa, joista toinen on värillinen ja toinen harmaasävyinen. Jos olet päässyt tähän asti, mielestäni ansaitset mukavan voileivän.

Vaihe 8: Tietojen ja harjoitustietojen kerääminen

Tietojen kerääminen ja koulutustiedot
Tietojen kerääminen ja koulutustiedot
Tietojen kerääminen ja koulutustiedot
Tietojen kerääminen ja koulutustiedot
Tietojen kerääminen ja koulutustiedot
Tietojen kerääminen ja koulutustiedot

Annetussa opetusohjelmassa kirjoittaja perehtyy paljon syvemmälle pian toimitettavan koodin prosesseihin, mutta koska nämä ovat ohjeita tämän peilin valmistamisesta, en mene syvemmälle historiaan tai monimutkaiseen mekaniikkaan. Suosittelen kuitenkin, että käytät kuukauden elämästäsi lukemalla näitä kahta asiaa, koska ne voivat palvella mieltäsi hyvin.

On vain noin kolme skriptiä suoritettava ennen kuin voimme saada tämän kaiken toimimaan. Ensimmäinen koskee tietojen keräämistä, toinen on koulutusta ja viimeinen on oikeastaan tunnistamista varten. Tietojen kerääminen edellyttää todellisten kasvojen kuvien ottamista ja säilyttämistä tietyssä paikassa koulutusta varten. Tämän koodin luoja teki tämän kaiken tekemisen erittäin helpoksi, joten suosittelen noudattamaan näitä ohjeita päänsäryn välttämiseksi.

Avaa komentorivi ja luo uusi hakemisto, joka nimeää sen jotain hauskaa (kutsuin omani FaceReciksi)

mkdir FaceRec

Muuta nyt hakemisto FaceReciksi ja tee alihakemisto, joka nimeää sen tietojoukon

cd FaceRec

mkdir -tietojoukko

Kun olemme siinä, voimme tehdä myös toisen alihakemiston nimeltä kouluttaja

mkdir kouluttaja

Nyt voit suorittaa ja seurata ensimmäisen komentosarjan ohjeita, jotka kaappaavat käyttäjän kuvia. (Vain huomautus, muista syöttää käyttäjätunnus joko 1, 2, 3 jne.)

import cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # aseta videoleveys cam.set (4, 480) # aseta videon korkeus face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Jokaiselle henkilö, syötä yksi numeerinen kasvotunnus face_id = input ('\ n anna käyttäjätunnus loppu paina ==>') print ("\ n [INFO] Kasvojen kaappauksen alustaminen. Katso kameraa ja odota…") # Alusta yksittäinen näytteenotto count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # käännä videokuva pystysuunnassa harmaa = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = face_detector.detectMultiScale (harmaa, 1,3, 5) (x, y, w, h) kasvoille: cv2. suorakulmio (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Tallenna otettu kuva datasets -kansioon cv2.imwrite ("dataset/User." + Str (face_id) + '.' + Str (count) + ".jpg", harmaa [y: y +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Paina 'ESC' poistuaksesi videosta, jos k == 27: break elif count> = 30: # Ota 30 kasvonäytettä ja lopeta brea -video k print ("\ n [INFO] Ohjelmasta poistaminen ja siivoustiedot") cam.release () cv2.destroyAllWindows ()

Varmista tässä vaiheessa, että olet asentanut tyynyn Pi: hen. Jos ei, suorita komento:

pip asenna tyyny

Kun olet valmis, voit suorittaa harjoitusskriptin (toinen skripti), joka tarjoaa saumattomasti.yaml -tiedoston, jota käytetään lopullisessa komentosarjassa

tuo cv2import numpy np: nä PIL -tuonnista Kuvien tuonti os # Kasvojen kuvatietokannan polku = 'tietojoukon' tunnistin = cv2.face. LBPHFaceRecognizer_create () detektor = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # -toiminto kuvien ja tarratietojen saamiseksi: PIL_img = Image.open (imagePath).convert ('L') # muunna se harmaasävyiseksi img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. jakaa (".") [1]) kasvot = ilmaisin.detectMultiScale (img_numpy) (x, y, w, h) kasvoille: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Harjoittele kasvoja. Se kestää muutaman sekunnin. Odota…") kasvot, ids = getImagesAndLabels (polku) tunnistin.train (kasvot, np.array (ids)) # Tallenna malli trainer/trainer.yml -tunnistimeen.write ('trainer/trainer.yml') # tunnistin.save () toimi Macissa, mutta ei Pi -laitteessa # Tulosta koulutettujen kasvojen määrä ja lopeta ohjelman tulostus ("\ n [INFO] {0} kasvot koulutettu. Ohjelmasta poistuminen.format (len (np.unique (ids)))))

Tässä skriptisarjassa on hienoa, että järjestelmään voidaan syöttää useita kasvoja, mikä tarkoittaa, että useat henkilöt voivat halutessaan käyttää peilin sisäosia.

Alla on ladattavissa Data Capture- ja Training -skripti.

Vaihe 9: Kasvojen tunnistusaika

Kasvojen tunnistusaika
Kasvojen tunnistusaika
Kasvojen tunnistusaika
Kasvojen tunnistusaika

Lopuksi voimme suorittaa tunnistusskriptin. Tähän skriptiin lisättiin lisää koodia, jotta moottoriprosessi toimisi, joten selitän nämä osat hieman perusteellisemmin. Jaan sen osiin, mutta laitan koko käsikirjoituksen vaiheen loppuun, jos etsit sitä.

Aloitamme tuomalla kaikki tarvitsemamme moduulit ja asettamalla GPIO -tilaksi GPIO. BCM

tuo numpy np: nä

tuonti os tuonti aika tuonti RPi. GPIO muodossa GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM)

Tämä seuraava ControlPin -niminen luettelo on joukko numeroita, jotka edustavat askelmoottorissamme käytettäviä lähtötappeja.

ControlPin = [14, 15, 18, 23]

For-loop asettaa nämä nastat lähtöiksi ja varmistaa sitten, että ne on kytketty pois päältä. Minulla on vielä koodi täällä, jotta laatikon voi sulkea napin painalluksella, mutta päätin käyttää sen sijaan ajastinta.

GPIO.setup (ControlPin , GPIO. OUT)

GPIO. output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN)

Seuraavat kaksi muuttujaa ovat sekvenssejä, joita käytämme moottorin käyttämiseen. Opin nämä tiedot Gaven MacDonaldin upeasta videosta, jota suosittelen katsomaan, kun hän syventyy paitsi koodiin myös varsinaiseen moottoriin (löytyy täältä: https://www.youtube.com/embed/Dc16mKFA7Fo). Pohjimmiltaan jokainen sekvenssi toistetaan käyttämällä sisäkkäisiä silmukoita tulevissa openComp- ja closeComp-funktioissa. Jos tarkastelet tarkasti, seq2 on juuri päinvastainen kuin seq1. Joo, arvasit. Toinen on tarkoitettu moottorin siirtämiseen eteenpäin ja toinen taaksepäin.

sekvenssi =

sekvenssi =

OpenComp-toiminnosta alkaen luomme for-loopin, joka toistuu 1024 kertaa. MacDonald'sin videon mukaan 512 iterointi antaisi moottorin täyden kierroksen, ja huomasin, että noin kaksi kierrosta oli hyvä pituus, mutta tätä voidaan säätää yksilön koon mukaan. Seuraava silmukka muodostuu kahdeksasta iteraatiosta, jotta voidaan ottaa huomioon sekvenssissä 1 ja 2 olevat 8 taulukkoa. Ja lopuksi, viimeinen silmukka toistaa neljä kertaa jokaiselle näistä matriiseista löytyville neljälle kohteelle sekä 4 GPIO-nastalle, joihin moottorimme on kytketty. Tässä alla oleva viiva valitsee GPIO -nastan ja kytkee sen sitten päälle tai pois päältä sen mukaan, mikä iteraatio on käytössä. Jälkiviiva tarjoaa puskuriaikaa, jotta moottorimme ei pyöri lainkaan. Kun moottori pyörii siirtämään laatikon ulos, se nukkuu 5 sekuntia ennen kuin jatkaa eteenpäin. Tätä aikaa voidaan säätää täällä tai voit ottaa käyttöön kommentoidun koodin, joka mahdollistaa painikkeen käytön eteenpäin komentosarjan kanssa ajastimen sijaan.

i alueella (1024):

puolivaiheelle alueella (8): nastalle alueella (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'while True: if GPIO.input (2) == GPIO. LOW: tauko; '' 'time.sleep (5)

CloseComp -toiminto toimii samalla tavalla. Kun moottori on siirtynyt taaksepäin, asetan viimeiset GPIO -nastamme matalalle varmistaaksemme, ettemme tuhlaa energiaa, ja lisään sitten vielä kolme sekuntia aikaa ennen kuin jatkan.

i alueella (1024):

puolivaiheelle alueella (8): nastalle alueella (4): GPIO.output (ControlPin [pin], seq2 [halfstep] [pin]) time.sleep (.001) print ("lokero suljettu") GPIO. output (ControlPin [0], 0) GPIO. -lähtö (ControlPin [3], 0) time.sleep (3)

Suurin osa seuraavasta osasta käytetään kameran käyttöönottoon ja kasvojentunnistuksen aloittamiseen. Jälleen MKRoBotin ohjeet koskevat osia enemmän, mutta tällä hetkellä näytän vain peilille käytetyt osat.

Ensin muutin luettelonimet niin, että nimeni on siinä hakemistossa, jonka annoin sille tietojen keräämisen aikana (minun tapauksessani 1). Ja sitten asetin loput arvot arvoksi Ei mitään, koska minulla ei ollut enää kasvoja tietojoukossa.

names = ['Ei mitään', 'Daniel', 'Ei mitään', 'Ei mitään', 'Ei mitään', 'Ei mitään]

Muutamat viimeiset koodirivimme on toteutettu thicc for-loop -sovelluksessa. Luin muuttujan luottamuksen tallentamiseksi kokonaislukuna (intConfidence) ennen kuin muuttujan luottamus muuttuu merkkijonoksi. Sitten käytän if-lausetta tarkistaakseni, onko luottamus suurempi kuin 30 ja onko tunnus (kuka henkilö tietokone havaitsee, tässä tapauksessa "Daniel") on sama kuin nimeni. Kun tämä on vahvistettu, kutsutaan toimintoa openComp, joka (kuten edellä on selitetty) liikuttaa moottoria, käynnistyy 5 sekunnin kuluttua ja jatkaa sitten closeComp -toimintoon, joka liikuttaa moottoria vastakkaiseen suuntaan ja suorittaa jonkin verran puhdistusta ennen kuin jatkat thicc -silmukkaa.

jos luottamus> 30 ja id == 'Daniel':

openComp () closeComp ()

Vika, jonka löysin täältä, on se, että joskus closeComp-paluun jälkeen koodi jatkuu, mutta ehdollinen if-lause todetaan jälleen todeksi, ikään kuin se lukisi puskurissa olevaa videosyötettä. Vaikka se ei tapahdu joka kerta, en ole vielä löytänyt keinoa varmistaa, ettei sitä koskaan tapahdu, joten jos jollain on ideoita, ilmoita minulle kommenteissa.

Tässä on koko käsikirjoitus yhdessä paikassa (ja alla tämän voi ladata):

tuoda cv2

tuoda numpy np: nä tuonti os tuontiaika tuonti RPi. GPIO GPIO: na GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] i: lle alueella (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

Vaihe 10: Pi: n asentaminen ja moottorin kytkeminen

Pi: n asennus ja moottorin kytkeminen
Pi: n asennus ja moottorin kytkeminen
Pi: n asennus ja moottorin kytkeminen
Pi: n asennus ja moottorin kytkeminen
Pi: n asennus ja moottorin kytkeminen
Pi: n asennus ja moottorin kytkeminen

Raspberry Pi: n asentaminen runkoon oli melko yksinkertaista. Suunnittelin pienen 90 asteen kyynärpään, jonka toisella puolella oli reikä ja toinen puoli täysin tasainen. Kaksi näistä 3D -tulostuksen jälkeen ne voidaan kiinnittää ruuveilla Raspberry Pi: n kiinnitysreikiin (käytin kahta reikää GPIO -nastojen kummallakin puolella).

Sitten jatkoin superliiman käyttöä 3D -tulostettujen kyynärpäiden vastakkaisilla puolilla liimaamalla Pi aivan kehyksen laatikon yläpuolelle. Liiman kuivumisen jälkeen pystyin poistamaan tai vaihtamaan Pi paikalleen yksinkertaisesti ja kätevästi vain kahdella ruuvilla. Minulla on.stl kyynärpäälle linkitetty alla.

Liitä nyt moottorin ohjain PI: hen IN1, IN2, IN3, IN4 yhdistämällä GPIO 14, 15, 18, 23. Kytke lopuksi ohjainkortin 5v- ja maadoitusliittimet Pi -laitteen 5v -lähtö- ja maadoitusliittimiin.

Tässä on linkki Pi's Pinoutiin viitteenä:

Vaihe 11: Kameran asennus

Kameran asennus
Kameran asennus
Kameran asennus
Kameran asennus
Kameran asennus
Kameran asennus

Kameran asennus oli hiukan vähemmän kestävä kuin Pi, mutta menetelmä onnistui. Suunnitellut ja tulostanut ohuen palkin, jossa on 2 reikää kummassakin päässä, kiinnitin palkin Rasberry Pi: hen sen kiinnitysreiän kautta. Kiinnitä sitten kamera toisella ruuvilla palkin vastakkaiseen päähän. Ta-da! Näyttää aika kärpäseltä.

Vaihe 12: Laatikon siirtomekanismin luominen ja asentaminen

Laatikon siirtomekanismin luominen ja asentaminen
Laatikon siirtomekanismin luominen ja asentaminen
Laatikon siirtomekanismin luominen ja asentaminen
Laatikon siirtomekanismin luominen ja asentaminen
Laatikon siirtomekanismin luominen ja asentaminen
Laatikon siirtomekanismin luominen ja asentaminen

Tämä vaihe tehtiin helpoksi valmistajayhteisön aina hyväntahtoisten lahjojen ansiosta. Pikaisen Thingiverse -haun jälkeen löysin TucksProjectsin luoman lineaarisen toimilaitteen (löytyy täältä: https://www.thingiverse.com/thing:2987762). Jäljellä oli vain lyödä se SD -kortille ja antaa tulostimen tehdä työ.

Päädyin Fusion 360: een ja muokkasin kannusta, koska moottorini akseli oli liian suuri TucksProjectsin tarjoamaan akseliin. Minulla on alla oleva.stl. Tulostuksen jälkeen meidän on vain koottava se asettamalla kannus moottorin akselille ja kiinnittämällä moottori ja kotelon sivut 2 ruuvilla (varmista, että asetat telineen väliin ennen sulkemista). Jouduin leikkaamaan tuuman pois telineestä niin, että se mahtuu laatikon ja kehyksen väliin.

Nyt ei muuta kuin mekanismin kiinnittäminen runkoon ja laatikkoon. "MITEN TULEE TEHDÄ?" kysyt… joo, sano se kanssani: Superliima. Kuten yllä olevissa kuvissa näkyy, aseta mekanismi vain kehyksen pohjaa vasten ja työnnä sitä ylöspäin puukappaletta vasten, johon laatikko liukuu. On erittäin tärkeää, että yrität saada telineen/mekanismin mahdollisimman yhdensuuntaiseksi kehyksen kanssa, jotta mekanismi liikkuessaan se työntää laatikkoa suoraan eikä kulmassa. Kun liima on kuivunut, aseta hieman liimaa telineen reunaan ja siirrä laatikko paikalleen ja anna sen kuivua. Kun se on valmis, meillä on tukeva mekanismi, jolla salainen laatikko liukuu sisään ja ulos.

Vaihe 13: Pahvin lisääminen peilin taakse

Pahvin lisääminen peilin taakse
Pahvin lisääminen peilin taakse
Pahvin lisääminen peilin taakse
Pahvin lisääminen peilin taakse
Pahvin lisääminen peilin taakse
Pahvin lisääminen peilin taakse

Jotta tämä kaksisuuntainen kalvo näyttäisi enemmän peilimaiselta, huomasin, että se palvelee tarkoitustamme hyvin asettamalla pahvi lasin taakse. Käytetty pahvi on runko, mutta kaikki sopiviksi leikatut palat toimivat. Tämä takaa myös sen, ettei kameran LED -valosta, moottorin ohjaimesta tai peilien toisella puolella olevista Pi -näytöistä tule valoa. Kun kaikki on paikallaan, käytä kynää merkitsemään kameran paikka pahville. Leikkaa sitten partakoneella suorakulmio, jotta kamera voi kurkistaa paikalleen.

Vaihe 14: Viimeisen kappaleen asettaminen päälle

Viimeisen kappaleen asettaminen päälle
Viimeisen kappaleen asettaminen päälle
Viimeisen kappaleen asettaminen päälle
Viimeisen kappaleen asettaminen päälle

Viimeinen asia on laittaa aiemmin sivuun jätetyn laatikon etuosa. Siirrä moottoria niin, että laatikko tarttuu ulos. Liimaa sitten etuosa paikalleen niin, että laatikkokappale on keskellä (ripustusta pitäisi olla hieman joka puolelta. Sitten voit vain ripustaa sen seinälle.

Vaihe 15: Finaali

Finaali
Finaali
Finaali
Finaali

Siinä se on! On olemassa useita parannuksia, joita voitaisiin tehdä, kuten lisätä tämä painike, ostaa parempi kaksisuuntainen kalvo ja korjata tämä virhe koodissa, mutta kaiken kaikkiaan se saa työn aikaan: se näyttää peililtä, se tunnistaa ennalta määrätyn käyttäjän kasvot ja se avaa suloisen pienen laatikon. Kuten aina, haluaisin kuulla ajatuksiasi, kysymyksiäsi ja muistelmiasi alla olevissa kommenteissa.

Yleisarvio: 10/10

Kommentit: #ei yrittäisi uudelleen … ellei voisin noudattaa tätä ohjeistusta;)

Salainen osastohaaste
Salainen osastohaaste
Salainen osastohaaste
Salainen osastohaaste

Pääpalkinto salaisen osaston haasteessa

Suositeltava: