Satura rādītājs:

Sejas atpazīšanas spogulis ar slepeno nodalījumu: 15 soļi (ar attēliem)
Sejas atpazīšanas spogulis ar slepeno nodalījumu: 15 soļi (ar attēliem)

Video: Sejas atpazīšanas spogulis ar slepeno nodalījumu: 15 soļi (ar attēliem)

Video: Sejas atpazīšanas spogulis ar slepeno nodalījumu: 15 soļi (ar attēliem)
Video: Потрясающий заброшенный замок XVIII века во Франции | ПОЛНЫЙ СОКРОВИЩ 2024, Jūlijs
Anonim
Sejas atpazīšanas spogulis ar slepeno nodalījumu
Sejas atpazīšanas spogulis ar slepeno nodalījumu
Sejas atpazīšanas spogulis ar slepeno nodalījumu
Sejas atpazīšanas spogulis ar slepeno nodalījumu
Sejas atpazīšanas spogulis ar slepeno nodalījumu
Sejas atpazīšanas spogulis ar slepeno nodalījumu

Mani vienmēr interesēja aizvien radošie slepenie nodalījumi, ko izmanto stāstos, filmās un tamlīdzīgi. Tātad, redzot slepeno nodalījumu konkursu, es nolēmu pats eksperimentēt ar šo ideju un izveidot parastu spoguli, kas atver slepeno sānu atvilktni, kad tajā ieskatās īstais cilvēks.

Izmantojot Raspberry Pi, dažas zināšanas par python programmēšanu un 8. klases veikalu klasi, mēs varam izveidot šo krāšņo ierīci, lai paslēptu objektus redzamā vietā, kuriem varēs piekļūt tikai pareizais lietotājs.

Es vēlos īpaši pateikties šiem cilvēkiem/platformām, no kurām es arī ieguvu savu informāciju un resursus:

TeCoEd - Youtube kanāls

Emets no PiMyLifeUp

MJRoBot vietnē Hackster.io (profils)

Gavens Makdonalds - Youtube kanāls

Tucker Shannon vietnē Thingiverse (profils)

Piegādes

Rāmja piederumi:

  • Koka dēlis (šīs plāksnes izmēri bija 42 x 7,5 x 5/16 collas)
  • Rāmis ar zīmuli (ar stiklu)
  • Pūšamā krāsa
  • Vienvirziena atstarojoša līme
  • Stikla tīrītājs un lupata
  • MDF koks

Sejas atpazīšanas piederumi:

  • Raspberry Pi (es izmantoju Pi 3 B+, bet ir arī citas iespējas)
  • Kameras modulis
  • Stepper motors

Rīki:

  • Galda zāģis
  • Džigzāģis
  • SmilšpapīrsKoks
  • GlueTape
  • Mērs
  • Šķēres
  • Smidzināšanas pudele
  • 3D printeris
  • Super līme

1. darbība: kastes rāmja izgriešana

Izgriezumi kastes rāmim
Izgriezumi kastes rāmim
Izgriezumi kastes rāmim
Izgriezumi kastes rāmim
Izgriezumi kastes rāmim
Izgriezumi kastes rāmim
Izgriezumi kastes rāmim
Izgriezumi kastes rāmim

Attēlu rāmi nopirku lietotu preču veikalā. Tikai brīdinājums, pārliecinieties, vai dēļi, kas veido rāmi, ir vismaz 1 1/2 collas plati. Tas ir tāpēc, lai uz tā varētu pielīmēt citus koka dēļus ar pietiekami daudz vietas, ar ko strādāt. Tāpat pārliecinieties, vai stikls ir rāmis ir pilnīgi skaidrs. Es nejauši nopirku matētu un pēc tam nācās nopirkt citu rāmi tikai caurspīdīgam stiklam. Tā kā mans rāmis tiek izmantots, kastes rāmja izmēri var atšķirties.

  • Novietojiet rāmi portreta virzienā. Izmēriet rāmja stikla cauruma puses garās malas (LS) ar papildu ½”augšpusē un apakšā. (t.i., pievienojiet collu stikla cauruma mērījuma garajai pusei. Ierakstiet to un atzīmējiet LSM (Long Side Measurement).
  • Līdzīgi izmēriet cauruma augšējo malu un pievienojiet papildu 1”. Ierakstiet to un atzīmējiet SSM (Short Side Measurement).
  • Paņemiet savu dēli un ar galda zāģi sagrieziet divus LSM x 2”un divus SSM x 2”.
  • Paņemiet vienu no LSM griezumiem un izmēriet 2”x1” taisnstūri, kas ir 1”no apakšas un ½” no kreisās un labās puses (kā parādīts 3. attēlā).
  • Izmantojiet finierzāģi, lai izgrieztu caurumu. Pēc tam izmantojiet smilšpapīru, lai noslīpētu malas.

2. darbība: atvilktnes izgriešana

Izgriezumi atvilktnei
Izgriezumi atvilktnei
Izgriezumi atvilktnei
Izgriezumi atvilktnei
Izgriezumi atvilktnei
Izgriezumi atvilktnei
Izgriezumi atvilktnei
Izgriezumi atvilktnei

Tagad mēs sāksim veidot atvilktni (jeb slepeno nodalījumu).

  • Izgrieziet divas 4”x 1” malas, 3”x 1” (aizmugurējā mala), 4”x 1” (priekšējā mala) un 4”x 3” (platforma).
  • Līmējiet pirmo 4”x 1” malu gar platformas 4”malu. Es ievietoju pāris salocītus papīrus zem platformas puses, lai tas būtu nedaudz pacelts, tādējādi tas netiktu ievilkts caurumā, ko es izgriezu LS dēļā. Uzstādiet nožūt 30 minūtes.
  • Līdzīgi pielīmējiet 3 x 1 collu gar platformas 3 ⅜ malu. Uzstādiet nožūt 30 minūtes. Pēc tam pielīmējiet otro 4”x 1” pusi pretējā pusē pirmajai. Uzstādiet nožūt 30 minūtes.
  • Pagaidām nolieciet priekšējo malu malā. Tā būs pēdējā lieta, kas pielīmēta pie atvilktnes.
  • Kad esat pabeidzis, pārbaudiet, vai tas iekļaujas caurumā, kuru jūs atgriezāt LSM dēļā. Ja nē, slīpējiet caurumu, līdz atvilktne viegli slīd iekšā un ārā un nav vilces.

3. darbība: rāmja salikšana kopā

Rāmja salikšana kopā
Rāmja salikšana kopā
Rāmja salikšana kopā
Rāmja salikšana kopā
Rāmja salikšana kopā
Rāmja salikšana kopā

Kad visas detaļas ir pabeigtas, mēs varam sākt salikt visu rāmi.

  • Līmējiet LSM dēli centrā ar stikla caurumu ar ½ collu katrā pusē. Pārliecinieties, ka tas ir pielīmēts ar ½ collu attālumā no cauruma (kā parādīts 1. attēlā). Uzstādiet nožūt 30 minūtes.
  • Līmējiet pirmo SSM dēli ar malu, kas pieskaras tikko pielīmētās LSM dēļa iekšpusei. (Izmantojiet lineālu, lai pārliecinātos, ka tas ir pielīmēts taisni). Uzstādiet nožūt 30 minūtes.
  • Paņemiet otru LSM pusi un pielīmējiet līdzīgu kā pirmo. Pārliecinieties, ka tas ir ½”attālumā no cauruma un vai tikko piestiprinātais SSM ir pielīmēts dēļa iekšpusē. Uzstādiet nožūt 30 minūtes.
  • Līmējiet pēdējo SSM augšējā malā. Tā kā jums ir divi LSM abās pusēs, atkarībā no tā, cik taisni tos piestiprinājāt, jums var būt nepieciešams noslīpēt SSM malas, lai pārliecinātos, ka tas atbilst (mana griešana dažreiz ir izslēgta). Uzstādiet nožūt 30 minūtes.
  • Izmēriet nelielu atstarpi starp atvilktnes dibenu un rāmi. Izgrieziet MDF koka gabalu ar šo mērījumu par 4 ". Jūs vēlaties, lai šis gabals būtu tuvu atvilktnei, bet nepieskartos tam. Tas ir paredzēts, lai atbalstītu atvilktni ar minimālu berzi.
  • Kad viss ir izdarīts, es izsmidzināju rāmi, lai visi gabali atbilstu.

4. solis: spogulim

Par spoguli
Par spoguli
Par spoguli
Par spoguli
Par spoguli
Par spoguli
Par spoguli
Par spoguli

Vienvirziena plēves līme, ko nopirku no Amazon, bija aptuveni 10 USD. Ir interesantāki kvalitatīvāki, kas ir nedaudz dārgāki. Tas, ko es izmantoju, atspoguļo, bet jūs varat teikt, ka tas nav parasts spogulis, ko jūs redzētu mājās. Dārgākie iegūs šo izskatu.

  • Notīriet stiklu ar stikla tīrītāju abās pusēs.
  • Atritiniet vienvirziena līmi un uzlieciet stiklu uz augšu. Izgrieziet līmi tā, lai katrā stikla pusē būtu vismaz ½”pārpalikums.
  • Nolieciet glāzi malā un samitriniet tās vienu pusi ar ūdeni. Pēc tam noņemiet plastmasas apvalku no vienvirziena līmes un apsmidziniet tikko atklāto pusi ar ūdeni.
  • Novietojiet stikla mitro pusi uz līmes mitrās puses. Ļaujiet sēdēt 30 minūtes.
  • Apgrieziet un ar īkšķi izlīdziniet visus burbuļus starp līmi un stiklu. Pēc tam nogrieziet lieko līmi no malām.

5. darbība: instalējiet Raspbian Stretch

Šī bija mana pirmā reize, kad iedziļinājos Raspberry Pi vidē, un es sāku meklēt norādījumus par OS instalēšanu. Beidzot vietnē Youtube atradu vienkāršu TeCoEd apmācību, kas ietvēra Stretch instalēšanas procesu SD kartē (ar diezgan jauku ievadu). Šeit ir saite uz šo apmācību:

Būtībā viss, kas jums jādara, ir:

  • Formatējiet SD karti, atlasot disku >> Diska rīki >> Formāts. Lejupielādējiet Raspian Stretch ZIP failu (atrodams šeit:
  • Zibspuldziet OS attēlu SD kartē. Lai to paveiktu, TeCoEd izmantoja Win32 diska attēlveidotāju. Es beidzot instalēju balenaEtcher, kas šķita nedaudz vienkāršāk. (Šeit ir balenaEtcher lejupielādes saite:
  • Kad esat balenaEtcher, atlasiet “Flash from File” un izvēlieties iepriekš lejupielādēto ZIP failu. Pēc tam atlasiet vēlamo SD karti (ja tā netiek izvēlēta automātiski). Pēc tam nospiediet sulīgo zibspuldzes pogu un gaidiet, kamēr notiks maģija.

Kad tas ir instalēts SD kartē, varat to ievietot Raspberry Pi un iziet vispārējo Pi iestatīšanas procesu.

6. darbība: instalējiet OpenCV

Tagad pārejiet pie vairāk uz sejas atpazīšanu orientētām daļām. Lai atpazītu sejas, mums ir jālejupielādē OpenCV bibliotēka, kurā ir liels skaits rīku darbam ar datora redzi.

OpenCV instalēšana man bija visgrūtākā programmatūras aspekta daļa. Bet pēc daudzu norādījumu ievērošanas es beidzot atradu Emmet apmācību no PiMyLifeUp, kas izdarīja triku, kas atrodams šeit:

Es neizstaigāšu šīs darbības, jo jums būs labāk sekot to sekošanai no saites (ar sniegtajiem paskaidrojumiem un iespēju vieglāk kopēt un ielīmēt tieši no vietnes).

7. darbība: iespējojiet/pārbaudiet kameru

Iespējot/pārbaudīt kameru
Iespējot/pārbaudīt kameru
Iespējot/pārbaudīt kameru
Iespējot/pārbaudīt kameru

Pēc OpenCV instalēšanas pārējais mans ceļojums tika pabeigts, izmantojot MJRoBot apmācību vietnē Hackster.io, kas atrodama šeit:

Pirms darba sākšanas es vēlos jums atgādināt, ka es neesmu šo skriptu sākotnējais veidotājs, bet galu galā mainīju to daļas.

Lai sāktu, mums jāpārbauda kamera, lai pārliecinātos, ka varam uzņemt video ekrānā. Es pavadīju apmēram stundu, mēģinot palaist MJRoBot 3. darbībā sniegto skriptu. Kā dzīvē būtu, mums faktiski ir jāiespējo kamera Raspberry Pi (izrādās, ka varētu būt laba ideja izlasīt sniegtos norādījumus … mmm nē). Tātad, pēc kameras pievienošanas pareizajam portam, rīkojieties šādi:

  • Atveriet komandu termināli un ierakstiet sudo raspi-config
  • Atlasiet “Iespējot kameru” (tas var būt atrodams ierīču opcijā)
  • Nospiediet “Enter”
  • Dodieties uz “Pabeigt”, un jums tiks piedāvāts atsāknēt

Pēc tam rīkojieties šādi:

  • Dodieties uz aveņu galveno izvēlni (augšējā kreisajā stūrī)
  • Preferences
  • Raspberry Pi konfigurācija
  • Saskarnes
  • Pēc tam kamerā atlasiet “Iespējots”
  • Tad “Labi”

Tagad jums vajadzētu būt iespējai veiksmīgi palaist šo skriptu no MJRoBot apmācības, lai pārbaudītu kameru (atcerieties, ka viss šis kods un padziļināts apraksts ir atrodams iepriekš norādītajā saitē uz MJRobot apmācību):

importēt numpy kā np

importēt cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while (True): ret, frame = cap.read () frame = cv2. flip (kadrs, -1) # Flip kamera vertikāli pelēka = cv2.cvtColor (kadrs, cv2. COLOR_BGR2GRAY) cv2.imshow ('rāmis', rāmis) cv2.imshow ('pelēks', pelēks) k = cv2.waitKey (30) & 0xff, ja k == 27: # nospiediet 'ESC', lai aizvērtu pārtraukuma vāciņu. Release () cv2.destroyAllWindows ()

Iepriekšējam kodam vajadzētu parādīt divus logus - vienu krāsu un otru pelēktoņos. Ja jūs tikāt līdz šim, es domāju, ka esat pelnījis jauku sviestmaizi.

8. darbība. Datu un apmācības datu vākšana

Datu vākšana un apmācības dati
Datu vākšana un apmācības dati
Datu vākšana un apmācības dati
Datu vākšana un apmācības dati
Datu vākšana un apmācības dati
Datu vākšana un apmācības dati

Piedāvātajā apmācībā autore daudz dziļāk iepazīstas ar koda procesiem, kas drīzumā tiks sniegti, taču, tā kā šie ir norādījumi par šī spoguļa izgatavošanu, es neiedziļināšos vēsturē un sarežģītajā mehānikā. Tomēr es iesaku jums veltīt mēnesi savas dzīves, lasot par šīm divām lietām, jo tās var labi kalpot jūsu prātam.

Ir jāpalaiž vēl tikai aptuveni trīs skripti, pirms mēs visu varam sākt darboties. Pirmais ir paredzēts datu vākšanai, otrais - to apmācībai, bet pēdējais - atpazīšanai. Datu vākšanai ir nepieciešami faktiski sejas attēli un jāuzglabā noteiktā apmācības vietā. Šī koda radītājs padarīja to visu ļoti vienkāršu, tāpēc iesaku ievērot šos norādījumus, lai izvairītos no galvassāpēm.

Atveriet komandrindu un izveidojiet jaunu direktoriju, nosaucot to par kaut ko jautru (es nosaucu manu FaceRec)

mkdir FaceRec

Tagad nomainiet direktoriju uz FaceRec un izveidojiet apakšdirektoriju, nosaucot to par datu kopu

cd FaceRec

mkdir datu kopa

Kamēr mēs to darām, mēs varam izveidot arī otru apakšdirektoriju ar nosaukumu treneris

mkdir treneris

Tagad jūs varat palaist un izpildīt pirmā skripta norādījumus, kas uzņems lietotāja attēlus. (Tikai uzmanību, noteikti ievadiet lietotāja ID kā 1, 2, 3 utt.)

importēt cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # iestatīt video platumu cam.set (4, 480) # iestatīt video augstumu face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Katram persona, ievadiet vienu ciparu sejas ID face_id = ievade ('\ n ievadiet lietotāja ID beigas nospiediet ==>') print ("\ n [INFO] Notiek sejas uztveršanas inicializēšana. Paskatieties uz kameru un pagaidiet…") # Inicializējiet individuālo paraugu ņemšanas sejas skaitīšanu skaits = 0, kamēr (True): ret, img = cam.read () img = cv2.flip (img, -1) # flip video attēls vertikāli pelēks = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) sejas = face_detector.detectMultiScale (pelēks, 1.3, 5) (x, y, w, h) sejās: cv2. taisnstūris (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Saglabājiet uzņemto attēlu datu kopu mapē cv2.imwrite ("datu kopa/lietotājs." + Str (face_id) + '.' + Str (skaits) + ".jpg", pelēks [y: y +h, x: x+w]) cv2.imshow ('attēls', img) k = cv2.waitKey (100) & 0xff # Nospiediet 'ESC', lai izietu no video, ja k == 27: pārtraukuma elifu skaits> = 30: # Paņemiet 30 sejas paraugu un pārtrauciet video brea k print ("\ n [INFO] Iziet no programmas un notīrīt lietas") cam.release () cv2.destroyAllWindows ()

Šajā brīdī pārliecinieties, vai esat uzstādījis spilvenu uz Pi. Ja nē, palaidiet komandu:

pip uzstādīt spilvenu

Kad tas ir pabeigts, varat palaist apmācības skriptu (otro skriptu), kas nemanāmi nodrošinās jums.yaml failu, kas tiks izmantots galīgajā skriptā

importēt cv2import numpy kā np no PIL importēšanas Attēlu importēšana os # Ceļš sejas attēlu datu bāzes ceļam = 'datu kopa' atpazītājs = cv2.face. LBPHFaceRecognizer_create () detektors = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # funkcija attēlu un iezīmju datu iegūšanai: PIL_img = Image.open (imagePath).convert ('L') # pārvērst to pelēktoņos img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. sadalīt (".") [1]) sejas = detektors.detectMultiScale (img_numpy) (x, y, w, h) sejās: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) atgriezt seju ids)) # Saglabājiet modeli trenera/trenažiera.yml atpazīšanas ierīcē.write ('trainer/trainer.yml') # tunnizētājs.save () strādāja operētājsistēmā Mac, bet ne uz Pi # Izdrukājiet apmācīto seju skaitu un beidziet programmas drukāšanu ("\ n [INFO] {0} sejas ir apmācītas. Iziet no programmas".format (len (np.unique (ids))))

Šajā skriptu komplektā ir forši tas, ka sistēmā var ievadīt vairākas sejas, kas nozīmē, ka pēc vēlēšanās vairākas personas var piekļūt spoguļa iekšienei.

Lejā ir pieejams datu uztveršanas skripts un apmācības skripts.

9. darbība. Sejas atpazīšanas laiks

Sejas atpazīšanas laiks
Sejas atpazīšanas laiks
Sejas atpazīšanas laiks
Sejas atpazīšanas laiks

Visbeidzot, mēs varam palaist atpazīšanas skriptu. Šim skriptam tika pievienots vairāk kodu, lai padarītu motora procesu funkcionālu, tāpēc es šīs detaļas paskaidrošu nedaudz rūpīgāk. Es to sadalīšu sadaļās, bet es ievietošu visu skriptu soļa beigās, ja jūs to meklējat.

Mēs vispirms importēsim visus nepieciešamos moduļus un pēc tam iestatīsim GPIO režīmu uz GPIO. BCM

importēt numpy kā np

importēt os importēšanas laiku importēt RPi. GPIO kā GPIO GPIO.setwarnings (nepatiess) GPIO.setmode (GPIO. BCM)

Šis nākamais saraksts ar nosaukumu ControlPin ir skaitļu masīvs, kas apzīmē izejas tapas, kas tiks izmantotas mūsu soļu motoram.

ControlPin = [14, 15, 18, 23]

For-loop nosaka šīs tapas kā izejas un pēc tam pārliecinās, ka tās ir izslēgtas. Man joprojām ir kāds kods, lai atvilktni varētu aizvērt, nospiežot pogu, bet es nolēmu izmantot taimeri.

GPIO iestatīšana (ControlPin , GPIO. OUT)

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

Nākamie divi mainīgie ir secības, kuras mēs izmantosim motora darbināšanai. Šo informāciju es uzzināju no brīnišķīga Gavena Makdonalda video, kuru es ļoti iesaku noskatīties, jo viņš iedziļinās ne tikai kodā, bet arī faktiskajā motorā (atrodams šeit: https://www.youtube.com/embed/Dc16mKFA7Fo). Būtībā katra secība tiks atkārtota, izmantojot ligzdotās for-cilpas gaidāmajās openComp un closeComp funkcijās. Ja paskatās uzmanīgi, seq2 ir tieši pretējs secībai 1. Jā, jūs uzminējāt. Viens ir paredzēts motora pārvietošanai uz priekšu, bet otrs - atpakaļgaitai.

secība1 =

seq2 =

Sākot ar mūsu openComp funkciju, mēs izveidojam for-loop, kas atkārtosies 1024 reizes. Saskaņā ar MacDonald's video 512 atkārtojumiem tiktu nodrošināta pilna motora rotācija, un es atklāju, ka apmēram divi apgriezieni bija labs garums, taču to var pielāgot atkarībā no indivīda lieluma. Nākamā cilpa sastāv no 8 atkārtojumiem, lai ņemtu vērā 8 masīvus, kas atrodami secībā 1 un seq2. Visbeidzot, pēdējā for-loop atkārto četras reizes četriem vienumiem, kas atrodami katrā no šiem blokiem, kā arī 4 GPIO tapām, kurām ir pievienots mūsu motors. Šeit esošā līnija izvēlas GPIO tapu un pēc tam to ieslēdz vai izslēdz atkarībā no tā, kurā iterācijā tas ir ieslēgts. Līnija pēc nodrošina zināmu bufera laiku, lai mūsu motors vispār negrieztos. Kad motors griežas, lai izvilktu atvilktni ārā, pirms pāriešanas tas guļ 5 sekundes. Šo laiku var pielāgot šeit vai arī varat iespējot komentējamo kodu, kas ļauj izmantot spiedpogu, lai pārsūtītu ar skriptu, nevis taimeri.

i diapazonā (1024):

pussolim diapazonā (8): tapai diapazonā (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' ', kamēr True: ja GPIO.input (2) == GPIO. LOW: pārtraukums; "" time.sleep (5)

Funkcija closeComp darbojas līdzīgi. Kad motors pārvietojas atpakaļ, es turpinu iestatīt mūsu pēdējās GPIO tapas uz zemu, lai pārliecinātos, ka mēs netērējam enerģiju, un pēc tam es pievienoju vēl trīs sekundes laika, pirms turpināt.

i diapazonā (1024):

pussolim diapazonā (8): tapai diapazonā (4): GPIO.output (ControlPin [pin], seq2 [halfstep] [pin]) time.sleep (.001) print ("Compartment Closed") GPIO.output (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) time.sleep (3)

Lielākā nākamās daļas daļa tiek izmantota, lai iestatītu kameru un sāktu sejas atpazīšanu. Atkal MKRoBot norādījumi vairāk attiecas uz detaļām, bet pagaidām es tikai parādīju spoguļa daļas.

Vispirms es mainīju sarakstu nosaukumus, lai mans vārds būtu tajā rādītājā, kuru es tam piešķīru, vācot datus (manā gadījumā 1). Un tad es iestatīju pārējās vērtības uz Nav, jo man vairs nebija seju datu kopā.

vārdi = ['Nav', 'Daniel', 'Nav', 'Nav', 'Nav', 'Nav']

Mūsu pēdējās koda rindas ir ieviestas thicc for-loop. Es izveidoju mainīgo, lai pārliecību saglabātu kā veselu skaitli (intConfidence), pirms mainīgā pārliecība tiek pārvērsta par virkni. Tad es izmantoju if-paziņojumu, lai pārbaudītu, vai ticamība ir lielāka par 30 un vai id (kuru personu dators nosaka, šajā gadījumā “Daniel”) ir vienāds ar manu vārdu. Pēc tam, kad tas ir apstiprināts, tiek izsaukta funkcija openComp, kas (kā paskaidrots iepriekš) kustina motoru, izslēdzas pēc 5 sekundēm un pēc tam pāriet uz closeComp, kas pārvieto motoru pretējā virzienā un veic nelielu tīrīšanu, pirms turpināt darbu ar cilpiņu.

ja pašapziņa> 30 un id == 'Daniel':

openComp () closeComp ()

Šeit atradu kļūdu, ka dažreiz pēc closeComp atgriešanās kods tiek turpināts, bet nosacījuma if-paziņojums atkal tiek atzīts par patiesu, it kā tas lasa buferšķīdumā joprojām esošu video plūsmu. Lai gan tas nenotiek katru reizi, kad vēl neesmu atradis veidu, kā nodrošināt, lai tas nekad nenotiktu, tāpēc, ja kādam ir kādas idejas, vienkārši informējiet mani komentāros.

Šeit ir viss skripts vienā vietā (un tieši zem tā ir lejupielādējams):

importēt cv2

importēt numpy kā np importēt os importa laiku importēt RPi. GPIO kā GPIO GPIO.setwarnings (nepatiess) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] i diapazonā (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

10. solis: Pi montāža un motora pievienošana

Pi montāža un motora pievienošana
Pi montāža un motora pievienošana
Pi montāža un motora pievienošana
Pi montāža un motora pievienošana
Pi montāža un motora pievienošana
Pi montāža un motora pievienošana

Raspberry Pi uzstādīšana pie rāmja bija diezgan vienkārša. Es izveidoju nelielu 90 grādu elkoni ar vienu seju ar caurumu un otru pusi pilnīgi līdzenu. Pēc 3D drukāšanas divus no tiem var piestiprināt ar skrūvēm Raspberry Pi uz tā stiprinājuma caurumiem (es izmantoju divus caurumus katrā GPIO tapu pusē).

Pēc tam es izmantoju super līmi 3D drukāto elkoņu pretējās pusēs, lai pielīmētu Pi tieši virs atvilktnes uz rāmja. Pēc līmes nožūšanas es varēju vienkārši un ērti noņemt vai nomainīt Pi vietā tikai ar divām skrūvēm. Man ir.stl elkoņam, kas saistīts zemāk.

Tagad vienkārši pievienojiet motora draiveri PI ar IN1, IN2, IN3, IN4, savienojot attiecīgi ar GPIO 14, 15, 18, 23. Visbeidzot, pievienojiet vadības paneļa 5v un zemējuma tapas Pi 5V izejai un zemējuma tapām.

Šeit ir saite uz Pi Pinout, lai iegūtu atsauci:

11. darbība: kameras uzstādīšana

Kameras uzstādīšana
Kameras uzstādīšana
Kameras uzstādīšana
Kameras uzstādīšana
Kameras uzstādīšana
Kameras uzstādīšana

Kameras uzstādīšana bija nedaudz mazāk izturīga nekā Pi, taču metode paveica darbu. Pēc plānas sijas projektēšanas un izdrukāšanas ar 2 caurumiem katrā galā es piestiprināju staru pie Rasberry Pi caur tā montāžas atveri. Pēc tam ar citu skrūvi vienkārši pievienojiet kameru sijas pretējam galam. Ta-da! Izskatās diezgan muša.

12. darbība: atvilktņu pārvietošanas mehānisma izveide un uzstādīšana

Atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
Atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
Atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
Atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
Atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
Atvilktņu pārvietošanas mehānisma izveide un uzstādīšana

Šis solis tika padarīts viegls, pateicoties veidotāju kopienas vienmēr labvēlīgajām dāvanām. Pēc ātras Thingiverse meklēšanas man izdevās atrast TucksProjects izveidotu lineāru izpildmehānismu (atrodams šeit: https://www.thingiverse.com/thing:2987762). Atlika tikai iepļaukāt to SD kartē un ļaut printerim paveikt darbu.

Es beidzot devos uz Fusion 360 un rediģēju stimulu, jo mana motora vārpsta bija pārāk liela TucksProjects piedāvātajam. Man ir.stl par to zemāk. Pēc drukāšanas mums tas vienkārši jāsamontē, novietojot uzmavu uz motora vārpstas, pēc tam piestiprinot motora un korpusa malas ar 2 skrūvēm (pirms aizvēršanas noteikti ievietojiet statīvu starp). Man galu galā vajadzēja nogriezt vienu collu no plaukta, lai tas ietilptu starp atvilktni un rāmi.

Tagad atliek tikai mehānismu piestiprināt pie rāmja un atvilktnes. "KĀ DARĪTU ŠO?" jūs jautājat … jā, sakiet to ar mani: Super līme. Kā parādīts iepriekš attēlos, vienkārši novietojiet mehānismu pret rāmja apakšdaļu un piespiediet to pret koka gabalu, pa kuru atvilktne slīd. Šeit ir ļoti svarīgi mēģināt novietot statīvu/mehānismu pēc iespējas paralēli rāmim, lai mehānisms kustētos stumtu atvilktni taisni, nevis slīpi. Pēc tam, kad līme ir izžuvusi, uz plaukta malas uzlieciet vēl kādu līmi un pārvietojiet atvilktni vietā un ļaujiet tai nožūt. Kad tas ir pabeigts, mums ir izturīgs mehānisms, lai iebīdītu un izvilktu slepeno atvilktni.

13. darbība. Kartona pievienošana aiz spoguļa

Kartona pievienošana aiz spoguļa
Kartona pievienošana aiz spoguļa
Kartona pievienošana aiz spoguļa
Kartona pievienošana aiz spoguļa
Kartona pievienošana aiz spoguļa
Kartona pievienošana aiz spoguļa

Lai padarītu šo divvirzienu plēvi spoguļveidīgāku, es atklāju, ka mūsu mērķim labi atbilst kartona ievietošana aiz stikla. Izmantotais kartons tiek piegādāts kopā ar rāmi, taču derēs jebkurš gabals, kas sagriezts atbilstoši. Tas arī nenodrošina gaismu no kameras LED, motora kontrollera vai Pi rāda spoguļa otrā pusē. Kad viss ir savās vietās, izmantojiet zīmuli, lai atzīmētu, kur kamera atrodas uz kartona. Pēc tam ar skuvekli sagrieziet taisnstūri, lai kamera varētu ielūkoties, kad tā ir vietā.

14. solis: gala gabala uzlikšana

Uzliekot gala gabalu
Uzliekot gala gabalu
Uzliekot gala gabalu
Uzliekot gala gabalu

Pēdējā lieta, kas jādara, ir uzvilkt atvilktnes priekšējo daļu, kas tika atlikta malā. Pārvietojiet motoru tā, lai atvilktne izliktos. Pēc tam pielīmējiet priekšējo daļu tā, lai atvilktnes gabals būtu centrēts (no visām pusēm vajadzētu nedaudz pakārt. Tad jūs varat vienkārši pakārt to pie sienas.

15. solis: fināls

Fināls
Fināls
Fināls
Fināls

Tur jums tas ir! Var veikt vairākus uzlabojumus, piemēram, pievienot šo spiedpogu, nopirkt kādu labāku divvirzienu plēvi un labot šo kļūdu kodā, bet kopumā viss tiek paveikts: tas izskatās kā spogulis, tas atpazīst iepriekš noteikto lietotāja seju, un tā atver šo mazo atvilktni. Kā vienmēr, es labprāt uzklausīšu jūsu domas, jautājumus un memuārus zemāk esošajos komentāros.

Kopējais vērtējums: 10/10

Komentāri: #Vai nemēģinātu vēlreiz … ja vien es nevarētu izpildīt šo pamācību;)

Slepenais nodalījuma izaicinājums
Slepenais nodalījuma izaicinājums
Slepenais nodalījuma izaicinājums
Slepenais nodalījuma izaicinājums

Galvenā balva slepenā nodalījuma izaicinājumā

Ieteicams: