Turinys:

Veido atpažinimo veidrodis su slaptu skyriumi: 15 žingsnių (su nuotraukomis)
Veido atpažinimo veidrodis su slaptu skyriumi: 15 žingsnių (su nuotraukomis)

Video: Veido atpažinimo veidrodis su slaptu skyriumi: 15 žingsnių (su nuotraukomis)

Video: Veido atpažinimo veidrodis su slaptu skyriumi: 15 žingsnių (su nuotraukomis)
Video: Часть 04 — Аудиокнига «Наш общий друг» Чарльза Диккенса (книга 1, главы 14–17) 2024, Liepa
Anonim
Veido atpažinimo veidrodis su slaptu skyriumi
Veido atpažinimo veidrodis su slaptu skyriumi
Veido atpažinimo veidrodis su slaptu skyriumi
Veido atpažinimo veidrodis su slaptu skyriumi
Veido atpažinimo veidrodis su slaptu skyriumi
Veido atpažinimo veidrodis su slaptu skyriumi

Mane visada domino vis kūrybingi slapti skyriai, naudojami istorijose, filmuose ir pan. Taigi, pamačiusi slaptų skyrių konkursą, nusprendžiau pati eksperimentuoti su šia idėja ir padaryti įprastą veidrodį, kuris atidarys slaptą šoninį stalčių, kai į jį pažvelgs tinkamas žmogus.

Naudodamiesi „Raspberry Pi“, tam tikromis „python“programavimo žiniomis ir 8 klasės parduotuvių klase, galime sukurti šį neįprastą įrenginį, kad paslėptų objektus, kuriuos matys tik tinkamas vartotojas.

Norėčiau ypač padėkoti šiems žmonėms/platformoms, iš kurių taip pat gavau informacijos ir išteklių:

„TeCoEd“- „Youtube“kanalas

Emmetas iš „PiMyLifeUp“

„MJRoBot“Hackster.io (profilis)

Gavenas MacDonaldas - „Youtube“kanalas

Tucker Shannon „Thingiverse“(profilis)

Prekės

Rėmo reikmenys:

  • Medžio lenta (šios lentos matmenys buvo 42 "7,5" x 5/16 ")
  • Pieštukų rėmelis (su stiklu)
  • Purškiami dažai
  • Vienpusis atspindintis klijai
  • Stiklo valiklis ir skudurėlis
  • MDF mediena

Veido atpažinimo reikmenys:

  • Raspberry Pi (naudojau Pi 3 B+, bet yra ir kitų variantų)
  • Kameros modulis
  • Žingsninis variklis

Įrankiai:

  • Stalo pjūklas
  • Jig pjūklas
  • Švitrinis popierius
  • GlueTape
  • Išmatuoti
  • Žirklės
  • Purškimo butelis
  • 3D spausdintuvas
  • Super klijai

1 žingsnis: Dėžutės rėmo pjūviai

Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai
Dėžutės rėmo pjūviai

Nuotraukų rėmelį nusipirkau iš dėvėtų prekių parduotuvės. Tik įspėjimas, įsitikinkite, kad lentos, sudarančios rėmą, yra bent 1 1/2 colio pločio. Taip galite klijuoti kitas medines lentas, kuriose yra pakankamai vietos dirbti. Taip pat įsitikinkite, kad stiklas rėmas yra visiškai skaidrus. Aš atsitiktinai nusipirkau matinį, o tada turėjau nusipirkti kitą rėmą tik permatomam stiklui. Kadangi naudojamas mano rėmas, dėžutės rėmo matmenys gali skirtis.

  • Padėkite rėmelį vertikaliai. Išmatuokite stiklo skylės pusės ilgas kraštines (LS) ant rėmo ir papildomai ½ colio viršuje ir apačioje. (t.y. pridėkite colį prie ilgosios stiklo skylės matavimo pusės. Įrašykite tai ir pažymėkite LSM (Long Side Measurement).
  • Panašiai išmatuokite viršutinę skylės pusę ir pridėkite papildomą 1 ". Įrašykite tai ir pažymėkite SSM (Short Side Measurement).
  • Paimkite lentą ir su stalo pjūklu supjaustykite du LSM x 2”ir du SSM x 2”.
  • Paimkite vieną iš LSM pjūvių ir išmatuokite 2 "x1" stačiakampį, kuris yra 1 "iš apačios ir ½" iš kairės ir dešinės pusės (kaip parodyta 3 paveiksle).
  • Norėdami iškirpti skylę, naudokite dėlionę. Tada švitriniu popieriumi nušlifuokite kraštus.

2 žingsnis: Stalčių pjaustymas

Pjūviai stalčiui
Pjūviai stalčiui
Pjūviai stalčiui
Pjūviai stalčiui
Pjūviai stalčiui
Pjūviai stalčiui
Pjūviai stalčiui
Pjūviai stalčiui

Dabar pradėsime statyti stalčių (dar žinomas kaip slaptas skyrius).

  • Iškirpkite dvi 4 x 1 colių puses, 3 x 1 x (galinis kraštas), 4 x 1 x (priekinis kraštas) ir 4 x 3 colių (platforma).
  • Klijuokite pirmąją 4 x 1 colio pusę išilgai platformos 4 colių pusės. Aš įdėjau porą sulankstytų popierių po platformos šonu, kad jis būtų šiek tiek pakeltas, tokiu būdu jis nevilktų skylės, kurią iškirpiau LS lentelėje. Nustatykite išdžiūti 30 min.
  • Panašiai klijuokite 3 x 1 colius išilgai platformos krašto. Nustatykite išdžiūti 30 min. Tada priklijuokite antrąją 4 x 1 colio pusę priešingoje pirmosios pusėje. Nustatykite išdžiūti 30 min.
  • Kol kas atidėkite priekinį kraštą. Tai bus paskutinis dalykas, priklijuotas prie stalčiaus.
  • Baigę patikrinkite, ar jis telpa į skylę, kurią dėlionėjote į LSM lentą. Jei ne, nušlifuokite skylę, kol stalčius lengvai įslys ir išstums, ir nebus jokio pasipriešinimo.

3 žingsnis: rėmo sujungimas

Rėmo sujungimas
Rėmo sujungimas
Rėmo sujungimas
Rėmo sujungimas
Rėmo sujungimas
Rėmo sujungimas

Baigę visas dalis, galime pradėti surinkti visą rėmą.

  • Klijuokite LSM lentą, kurios centre yra stiklo anga, po ½ colio iš abiejų pusių. Įsitikinkite, kad jis yra priklijuotas ½ colio atstumu nuo skylės (kaip parodyta 1 paveiksle). Nustatykite išdžiūti 30 min.
  • Klijuokite pirmąją SSM lentą taip, kad kraštas liestų ką tik priklijuotos LSM lentos vidų. (Naudokite liniuotę, kad įsitikintumėte, jog ji priklijuota tiesiai). Nustatykite išdžiūti 30 min.
  • Paimkite kitą LSM pusę ir klijuokite panašiai kaip pirmoji. Įsitikinkite, kad jis yra ½ colio atstumu nuo skylės ir kad ką tik pritvirtintas SSM yra priklijuotas prie lentos vidinės pusės. Nustatykite išdžiūti 30 min.
  • Klijuokite paskutinį SSM ant viršutinio krašto. Kadangi turite dvi LSM iš abiejų pusių, priklausomai nuo to, kaip tiesiai jas pritvirtinote, gali tekti nušlifuoti SSM šonus, kad įsitikintumėte, jog jie tinka (mano pjovimas kartais išjungtas). Nustatykite išdžiūti 30 min.
  • Išmatuokite nedidelį tarpą tarp stalčiaus apačios ir rėmo. Nupjaukite MDF medienos gabalą tokiu matavimu 4 coliais. Norite, kad šis gabalas būtų arti stalčiaus, bet jo neliestų. Jis skirtas stalčiui palaikyti su minimalia trintimi.
  • Kai viskas bus padaryta, aš purškiau rėmelį, kad visos dalys atitiktų.

4 žingsnis: veidrodžiui

Dėl veidrodžio
Dėl veidrodžio
Dėl veidrodžio
Dėl veidrodžio
Dėl veidrodžio
Dėl veidrodžio
Dėl veidrodžio
Dėl veidrodžio

Vienpusis plėvelės klijai, kuriuos nusipirkau iš „Amazon“, kainavo apie 10 USD. Yra geresnės kokybės, kuri yra šiek tiek brangesnė, jei jus domina. Mano naudojamas atspindi, bet galite pasakyti, kad tai nėra įprastas veidrodis, kurį matytumėte namuose. Brangesni jie jums suteiks tokią išvaizdą.

  • Stiklą valykite stiklo valikliu iš abiejų pusių.
  • Išvyniokite vienpusį klijų ir uždėkite stiklą ant viršaus. Iškirpkite klijus, kad kiekvienoje stiklo pusėje būtų bent ½ colio perteklius.
  • Padėkite stiklinę į šalį ir sudrėkinkite vieną jos pusę vandeniu. Tada nuplėškite plastikinį sluoksnį nuo vienpusio klijų ir nupurkškite naujai atskleistą pusę vandeniu.
  • Padėkite šlapią stiklo pusę ant šlapios klijų pusės. Leiskite sėdėti 30 min.
  • Apverskite ir nykščiu išlyginkite burbuliukus tarp klijų ir stiklo. Tada nupjaukite klijų perteklių aplink kraštus.

5 veiksmas: įdiekite „Raspbian Stretch“

Kadangi pirmą kartą gilinuosi į „Raspberry Pi“aplinką, pradėjau ieškoti instrukcijų, kaip įdiegti OS. Galiausiai „Youtube“radau paprastą „TeCoEd“vadovėlį, kuriame buvo įtrauktas „Stretch“įdiegimas į SD kortelę (su gana gražia įžanga). Čia yra nuoroda į tą vadovėlį:

Iš esmės viskas, ką jums reikia padaryti, tai:

  • Suformatuokite SD kortelę pasirinkę Diską >> Disko įrankiai >> Formatas. Atsisiųskite Raspian Stretch ZIP failą (rasite čia:
  • Perkraukite OS vaizdą į SD kortelę. Norėdami tai padaryti, „TeCoEd“naudojo „Win32 Disk Imager“. Galų gale įdiegiau „balenaEtcher“, kuris atrodė šiek tiek paprastesnis. (Čia yra „balenaEtcher“atsisiuntimo nuoroda:
  • Kai atsidursite balenaEtcher, pasirinkite „Flash From File“ir pasirinkite anksčiau atsisiųstą ZIP failą. Tada pasirinkite norimą SD kortelę (jei ji nepasirenkama automatiškai). Tada paspauskite sultingą blykstės mygtuką ir palaukite, kol įvyks magija.

Įdiegę SD kortelę, galite ją įdėti į „Raspberry Pi“ir atlikti bendrą „Pi“sąrankos procesą.

6 veiksmas: įdiekite „OpenCV“

Dabar pereikite prie labiau į veido atpažinimą orientuotų dalių. Norėdami atpažinti veidus, turime atsisiųsti „OpenCV“biblioteką, kurioje yra daugybė įrankių darbui su kompiuterio vizija.

„OpenCV“diegimas man buvo sunkiausia programinės įrangos aspekto dalis. Bet po daugelio nurodymų pagaliau radau Emmeto vadovėlį iš „PiMyLifeUp“, kuris padarė triuką, kurį rasite čia:

Aš nesiimsiu šių veiksmų, nes jums bus geriau sekti juos iš nuorodos (su pateiktais paaiškinimais ir galimybe lengviau nukopijuoti ir įklijuoti tiesiai iš svetainės).

7 veiksmas: įjunkite/išbandykite fotoaparatą

Įjunkite/išbandykite fotoaparatą
Įjunkite/išbandykite fotoaparatą
Įjunkite/išbandykite fotoaparatą
Įjunkite/išbandykite fotoaparatą

Įdiegus „OpenCV“, likusi mano kelionė buvo baigta naudojant „MJRoBot“mokymo programą „Hackster.io“, kurią rasite čia:

Prieš pradėdami norėčiau jums priminti, kad nesu pirminis šių scenarijų kūrėjas, bet galiausiai pakeičiau jų dalis.

Norėdami pradėti, turėtume išbandyti fotoaparatą, kad įsitikintume, jog galime užfiksuoti vaizdo įrašą ekrane. Praleidau apie valandą bandydamas paleisti scenarijų, pateiktą „MJRoBot“3 veiksme. Kaip ir gyvenime, mums iš tikrųjų reikia įjungti „Raspberry Pi“fotoaparatą (pasirodo, gali būti gera idėja perskaityti pateiktas instrukcijas … mmm nah). Taigi, prijungę fotoaparatą prie tinkamo prievado, atlikite šiuos veiksmus:

  • Atidarykite komandų terminalą ir įveskite sudo raspi-config
  • Pasirinkite „Įgalinti kamerą“(tai galima rasti įrenginio parinktyje)
  • Paspauskite „Enter“
  • Eikite į „Baigti“ir būsite paraginti iš naujo paleisti

Tada atlikite šiuos veiksmus:

  • Eikite į Raspberry pagrindinį meniu (viršuje kairėje)
  • Nuostatos
  • „Raspberry Pi“konfigūracija
  • Sąsajos
  • Tada fotoaparate pasirinkite „Įgalinta“
  • Tada „gerai“

Dabar turėtumėte sugebėti sėkmingai paleisti šį scenarijų iš „MJRoBot“mokymo programos, kad išbandytumėte fotoaparatą (atminkite, kad visas šis kodas ir išsamesnis aprašymas yra aukščiau pateiktoje MJRobot vadovo nuorodoje):

importuoti numpy kaip np

importuoti cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Aukštis o (tiesa): ret, frame = cap.read () frame = cv2. apversti (kadras, -1) # Apversti fotoaparatą vertikaliai pilka = cv2.cvtColor (kadras, cv2. COLOR_BGR2GRAY) cv2.imshow ('kadras', kadras) cv2.imshow ('pilka', pilka) k = cv2.waitKey (30) & 0xff, jei k == 27: # paspauskite „ESC“, kad uždarytumėte „break cap“. Release () cv2.destroyAllWindows ()

Ankstesnis kodas turėtų rodyti du langus, vieną spalvotą, o kitą pilkos spalvos. Jei pavyko taip toli, manau, kad nusipelnei gražaus sumuštinio.

8 veiksmas: duomenų ir mokymo duomenų rinkimas

Duomenų rinkimas ir mokymo duomenys
Duomenų rinkimas ir mokymo duomenys
Duomenų rinkimas ir mokymo duomenys
Duomenų rinkimas ir mokymo duomenys
Duomenų rinkimas ir mokymo duomenys
Duomenų rinkimas ir mokymo duomenys

Pateiktame vadovėlyje autorius nuodugniau išnagrinės kodo procesus, kurie netrukus bus pateikti, tačiau kadangi tai yra instrukcijos, kaip buvo sukurtas šis veidrodis, nesigilinu į istoriją ir sudėtingą mechaniką. Tačiau aš rekomenduoju jums visą savo gyvenimo mėnesį perskaityti šiuos du dalykus, nes jie gali būti naudingi jūsų protui.

Kad visa tai veiktų, reikia paleisti dar apie tris scenarijus. Pirmasis skirtas duomenims rinkti, antrasis - jų mokymui, o paskutinis - atpažinimui. Norint rinkti duomenis, reikia nufotografuoti tikras veido nuotraukas ir jas laikyti tam tikroje mokymo vietoje. Šio kodo kūrėjas padarė viską labai paprasta, todėl rekomenduoju laikytis šių nurodymų, kad išvengtumėte galvos skausmo.

Atidarykite komandų eilutę ir sukurkite naują katalogą, pavadindami jį kažkuo smagiu (aš pavadinau „FaceRec“)

mkdir FaceRec

Dabar pakeiskite katalogą į „FaceRec“ir sukurkite pakatalogį, būtinai pavadinkite jį duomenų rinkiniu

cd FaceRec

mkdir duomenų rinkinys

Kol mes tai darome, galime sukurti ir kitą pakatalogį, pavadintą treneriu

mkdir treneris

Dabar galite paleisti ir sekti pirmojo scenarijaus, kuriame bus užfiksuotos vartotojo nuotraukos, nurodymus. (Pakelkite galvą, būtinai įveskite vartotojo ID kaip 1, 2, 3 ir tt)

importuoti cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # set video width cam.set (4, 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Kiekvienam asmuo, įveskite vieną skaitinį veido ID face_id = įvestis ('\ n įveskite vartotojo ID pabaigos paspauskite ==>') print ("\ n [INFO] Inicijuojama veido fiksavimas. Pažiūrėkite į fotoaparatą ir palaukite …") # Inicijuokite individualų mėginių ėmimo veidų skaičiavimą count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # apversti vaizdo vaizdą vertikaliai pilka = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) veidai = face_detector.detectMultiScale (pilka, 1,3, 5) (x, y, w, h) veiduose: cv2. stačiakampis (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Išsaugokite užfiksuotą vaizdą į duomenų rinkinių aplanką cv2.imwrite ("duomenų rinkinys/vartotojas." + Str (face_id) + '.' + Str (count) + ".jpg", pilka [y: y +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Norėdami išeiti iš vaizdo įrašo, paspauskite „ESC“, jei k == 27: pertraukos elifų skaičius> = 30: # Paimkite 30 veido pavyzdžių ir sustabdykite vaizdo įrašą k print ("\ n [INFO] Išeinama iš programos ir išvalymo dalykų") cam.release () cv2.destroyAllWindows ()

Šiuo metu įsitikinkite, kad „Pi“įdiegėte pagalvę. Jei ne, paleiskite komandą:

pip įdiegti pagalvę

Kai tai bus baigta, galite paleisti mokymo scenarijų (antrąjį scenarijų), kuris sklandžiai suteiks jums.yaml failą, kuris bus naudojamas galutiniame scenarijuje

importuoti cv2import numpy kaip np iš PIL importo vaizdo importo os # Veido vaizdo duomenų bazės kelias = 'duomenų rinkinys' atpažinimo priemonė = cv2.face. LBPHFaceRecognizer_create () detektorius = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # funkcija, skirta gauti vaizdus ir etikečių duomenis def getImagesAndLabels (kelias): imagePaths = [os.path.join (path, f) f f os.listdir (path)] faceSamples = ids = imagePath in imagePaths: PIL_img = Image.open (imagePath).convert ('L') # konvertuoti jį į pilkos spalvos skalę img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. padalinti (".") [1]) veidai = detektorius.detectMultiScale (img_numpy) (x, y, w, h) veiduose: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Treniruoja veidus. Tai užtruks kelias sekundes. Palaukite …") veidai, ids = getImagesAndLabels (kelias) atpažinimo priemonė.train (veidai, np.array (id)) # Išsaugokite modelį į trenerį/trenerį.yml atpažinimo priemonė.write („treneris/treneris.yml“) # atpažinimo priemonė.save () dirbo „Mac“, bet ne „Pi“# Atspausdinkite apmokytų veidų skaičių ir baigkite programos spausdinimą ("\ n [INFO] {0} veidai apmokyti. Išeinama iš programos".format (len (np.unique (ids))))

Šaunu šiame scenarijų rinkinyje yra tai, kad į sistemą galima įvesti kelis veidus, o tai reiškia, kad keli asmenys gali pasiekti veidrodžio vidų, jei to pageidaujama.

Žemiau turiu atsisiųsti duomenų surinkimo scenarijų ir mokymo scenarijų.

9 žingsnis: veido atpažinimo laikas

Veido atpažinimo laikas
Veido atpažinimo laikas
Veido atpažinimo laikas
Veido atpažinimo laikas

Galiausiai galime paleisti atpažinimo scenarijų. Prie šio scenarijaus buvo pridėta daugiau kodo, kad variklio procesas veiktų, todėl šiek tiek išsamiau paaiškinsiu šias dalis. Aš jį suskaidysiu į skyrius, bet visą scenarijų įdėsiu į veiksmo pabaigą, jei to siekiate.

Pirmiausia importuosime visus modulius, kurių mums prireiks, ir tada nustatysime GPIO režimą į GPIO. BCM

importuoti numpy kaip np

importuoti os importavimo laiką importuoti RPi. GPIO kaip GPIO GPIO.setwarnings (klaidinga) GPIO.setmode (GPIO. BCM)

Šis kitas sąrašas, pavadintas „ControlPin“, yra skaičių masyvas, vaizduojantis išvesties kaiščius, kurie bus naudojami mūsų žingsniniam varikliui.

„ControlPin“= [14, 15, 18, 23]

For-loop nustato šiuos kaiščius kaip išėjimus ir įsitikina, kad jie yra išjungti. Aš vis dar turiu tam tikrą kodą, kad stalčius būtų uždarytas paspaudus mygtuką, bet nusprendžiau naudoti laikmatį.

GPIO nustatymas („ControlPin “, „GPIO. OUT“)

GPIO išėjimas („ControlPin “, 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN)

Kiti du kintamieji yra sekos, kurias naudosime varikliui valdyti. Šią informaciją sužinojau iš nuostabaus Gaveno MacDonaldo vaizdo įrašo, kurį labai rekomenduoju pažiūrėti, nes jis gilinasi ne tik į kodą, bet ir į tikrąjį variklį (rasite čia: https://www.youtube.com/embed/Dc16mKFA7Fo). Iš esmės kiekviena seka bus kartojama naudojant būsimas „openComp“ir „closeComp“funkcijas naudojant įterptąsias kilpas. Jei atidžiai pažiūrėsite, seq2 yra visiškai priešinga seq1. Taip, jūs atspėjote. Vienas skirtas varikliui judėti į priekį, kitas - atbuline eiga.

1 eilutė =

seq2 =

Pradėdami nuo mūsų „openComp“funkcijos, sukuriame for-loop, kuris kartosis 1024 kartus. Remiantis „MacDonald's“vaizdo įrašu 512, variklis būtų visiškai sukamas, ir aš pastebėjau, kad maždaug du apsisukimai buvo geras ilgis, tačiau tai galima reguliuoti priklausomai nuo asmens dydžio. Kitas ciklas susideda iš 8 iteracijų, kad būtų atsižvelgta į 8 masyvus, esančius 1 ir 2 eilutėse. Ir galiausiai, paskutinis ciklas kartojasi keturis kartus keturiems elementams, esantiems kiekvienoje iš šių masyvų, taip pat 4 GPIO kaiščiams, prie kurių prijungtas mūsų variklis. Žemiau esanti eilutė pasirenka GPIO kaištį, tada įjungia arba išjungia, priklausomai nuo to, kokia iteracija įjungta. Eilutė po to suteikia tam tikrą buferio laiką, kad mūsų variklis apskritai nesisuktų. Kai variklis sukasi, norėdamas išstumti stalčių, jis užmiega 5 sekundes, prieš pradėdamas judėti. Šį laiką galite pakoreguoti čia arba galite įjungti komentuojamą kodą, kuris leidžia naudoti mygtuką, kad būtų persiųstas scenarijus, o ne laikmatis.

i diapazone (1024):

pusiau žingsniui diapazone (8): kaiščiui diapazone (4): GPIO.output („ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' ', o tiesa: jei GPIO.input (2) == GPIO. LOW: pertrauka; "" time.sleep (5)

„CloseComp“funkcija veikia panašiai. Kai variklis juda atgal, pradedu nusistatyti paskutinius GPIO kaiščius, kad įsitikintume, jog nešvaistome jokios energijos, ir prieš pradėdamas dirbti, pridėsiu dar tris sekundes.

i diapazone (1024):

pusiau žingsniui diapazone (8): kaiščiui diapazone (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)

Didžioji dalis kitos dalies naudojama fotoaparatui nustatyti ir veido atpažinimui pradėti. Vėlgi, „MKRoBot“instrukcijos labiau susijusios su dalimis, bet dabar aš tik parodau veidrodžiui naudojamas dalis.

Pirmiausia pakeičiau sąrašų pavadinimus, kad mano vardas būtų indekse, kurį priskyriau rinkdamas duomenis (mano atveju 1). Tada likusias reikšmes nustatiau į „Nėra“, nes duomenų rinkinyje nebeliko veidų.

vardai = ['Nėra', 'Danielis', 'Nėra', 'Nėra', 'Nėra', 'Nėra']

Paskutinės mūsų kodo eilutės yra įdiegtos „thicc for-loop“. Sukūriau kintamąjį, kad patikimumas būtų išsaugotas kaip sveikasis skaičius (intConfidence), kol kintamasis pasitikėjimas nebus paverstas eilute. Tada naudoju teiginį „if-“, norėdamas patikrinti, ar pasitikėjimas didesnis nei 30 ir ar id (kurį asmenį aptinka kompiuteris, šiuo atveju „Daniel“) yra lygus mano vardui. Tai patvirtinus, iškviečiama funkcija „openComp“, kuri (kaip paaiškinta anksčiau) perkelia variklį, išsijungia po 5 sekundžių, o po to pereina prie „closeComp“, kuri variklį nukreipia priešinga kryptimi ir prieš pradėdama naudoti „thicc“kilpą, atlieka tam tikrą valymą.

jei intConfidence> 30 ir id == 'Daniel':

openComp () closeComp ()

Klaida, kurią radau čia, yra ta, kad kartais, kai grįžta „closeComp“, kodas tęsiasi, tačiau nustatyta, kad sąlyginis if-teiginys vėl yra teisingas, tarsi jis skaitytų vaizdo įrašą, kuris vis dar yra buferyje. Nors tai neįvyksta kiekvieną kartą, kol dar nerandu būdo užtikrinti, kad tai niekada neįvyktų, todėl jei kas nors turi idėjų, praneškite man komentaruose.

Čia yra visas scenarijus vienoje vietoje (o žemiau galite atsisiųsti):

importuoti cv2

importuoti numpy kaip np importuoti os importavimo laiką importuoti RPi. GPIO kaip GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] i diapazone (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

10 žingsnis: Pi montavimas ir variklio prijungimas

Pi montavimas ir variklio prijungimas
Pi montavimas ir variklio prijungimas
Pi montavimas ir variklio prijungimas
Pi montavimas ir variklio prijungimas
Pi montavimas ir variklio prijungimas
Pi montavimas ir variklio prijungimas

„Raspberry Pi“pritvirtinimas prie rėmo buvo gana paprastas. Aš suprojektavau nedidelę 90 laipsnių alkūnę, kurios vienas veidas turėjo skylę, o kita pusė buvo visiškai plokščia. Po 3D spausdinimo du iš jų gali būti pritvirtinti varžtais prie „Raspberry Pi“jo tvirtinimo angų (aš naudoju dvi skyles abiejose GPIO kaiščių pusėse).

Tada aš pradėjau naudoti super klijus priešinguose 3D atspausdintų alkūnių veiduose, kad klijuočiau Pi tiesiai virš stalčiaus ant rėmo. Po to, kai klijai išdžiūvo, galėjau lengvai ir patogiai nuimti arba pakeisti Pi į vietą tik dviem varžtais. Aš turiu.stl alkūnę, susietą žemiau.

Dabar tiesiog prijunkite variklio tvarkyklę prie PI, naudodami IN1, IN2, IN3, IN4, atitinkamai prijungdami prie GPIO 14, 15, 18, 23. Galiausiai prijunkite valdiklio plokštės 5v ir įžeminimo kaiščius prie Pi 5V išėjimo ir įžeminimo kaiščių.

Čia yra nuoroda į „Pi's Pinout“, kur rasite nuorodą:

11 veiksmas: fotoaparato montavimas

Fotoaparato montavimas
Fotoaparato montavimas
Fotoaparato montavimas
Fotoaparato montavimas
Fotoaparato montavimas
Fotoaparato montavimas

Fotoaparato montavimas buvo šiek tiek mažiau tvirtas nei „Pi“, tačiau metodas padarė darbą. Suprojektavęs ir atspausdinęs ploną siją su 2 skylutėmis kiekviename gale, aš pritvirtinau siją prie „Rasberry Pi“per jos tvirtinimo angą. Tada tiesiog pritvirtinkite fotoaparatą prie kito sijos galo kitu varžtu. Ta-da! Atrodo gražiai musė.

12 veiksmas: stalčių judėjimo mechanizmo sukūrimas ir montavimas

Stalčių judėjimo mechanizmo sukūrimas ir montavimas
Stalčių judėjimo mechanizmo sukūrimas ir montavimas
Stalčių judėjimo mechanizmo sukūrimas ir montavimas
Stalčių judėjimo mechanizmo sukūrimas ir montavimas
Stalčių judėjimo mechanizmo sukūrimas ir montavimas
Stalčių judėjimo mechanizmo sukūrimas ir montavimas

Šis žingsnis buvo lengvas dėka visada geranoriškų kūrėjų bendruomenės dovanų. Po greitos „Thingiverse“paieškos man pavyko rasti linijinę pavarą, kurią sukūrė „TucksProjects“(rasti čia: https://www.thingiverse.com/thing:2987762). Liko tik užspausti SD kortelę ir leisti spausdintuvui atlikti darbą.

Galiausiai nuėjau į „Fusion 360“ir redagavau paskatinimą, nes mano variklio velenas buvo per didelis tam, kurį pateikė „TucksProjects“. Žemiau turiu.stl tam. Po to, kai spausdinimas buvo atliktas, mums tereikia jį surinkti uždedant atramą ant variklio veleno, tada pritvirtinant variklio ir korpuso šonus 2 varžtais (prieš uždarydami būtinai įdėkite stovą tarp jų). Galų gale turėjau nupjauti colį nuo stovo, kad jis tilptų tarp stalčiaus ir rėmo.

Dabar lieka tik pritvirtinti mechanizmą prie rėmo ir stalčiaus. „KAIP GALITE DARYTI?“tu klausi… taip, pasakyk su manimi: „Super Glue“. Kaip parodyta aukščiau esančiose nuotraukose, tiesiog padėkite mechanizmą prie rėmo apačios ir stumkite jį į medžio gabalą, ant kurio stumdomas stalčius. Čia labai svarbu stengtis, kad stovas/mechanizmas būtų kuo lygiagretesnis rėmui, kad mechanizmas judėdamas stumtų stalčių tiesiai, o ne kampu. Kai klijai išdžiūvo, padėkite dar šiek tiek klijų ant stovo krašto ir perkelkite stalčių į vietą ir leiskite jam išdžiūti. Baigę turime tvirtą mechanizmą, kuriuo galime įstumti ir ištraukti slaptą stalčių.

13 veiksmas: kartono pridėjimas už veidrodžio

Kartono pridėjimas už veidrodžio
Kartono pridėjimas už veidrodžio
Kartono pridėjimas už veidrodžio
Kartono pridėjimas už veidrodžio
Kartono pridėjimas už veidrodžio
Kartono pridėjimas už veidrodžio

Kad ši dvipusė plėvelė atrodytų labiau veidrodinė, supratau, kad mūsų tikslui gerai tinka uždėti kartoną už stiklo. Kartonas yra tas, kuris buvo pateiktas kartu su rėmeliu, bet bet koks gabalas, supjaustytas, tinka. Tai taip pat užtikrina, kad fotoaparato šviesos diodas, variklio valdiklis ar kitoje veidrodžio pusėje esantis „Pi“pasirodys šviesa. Kai viskas yra savo vietoje, pieštuku pažymėkite, kur kamera yra ant kartono. Tada skustuvu iškirpkite stačiakampį, kad fotoaparatas galėtų pro jį žvilgtelėti.

14 žingsnis: Paskutinio kūrinio uždėjimas

Galutinio kūrinio uždėjimas
Galutinio kūrinio uždėjimas
Galutinio kūrinio uždėjimas
Galutinio kūrinio uždėjimas

Paskutinis dalykas, kurį reikia padaryti, yra uždėti priekinę stalčiaus dalį, kuri buvo atidėta anksčiau. Judinkite variklį taip, kad stalčius išsikištų. Tada priklijuokite priekinę dalį taip, kad stalčiaus dalis būtų centre (iš visų pusių turėtų būti šiek tiek pakabinimo. Tada galite tiesiog pakabinti ant sienos.

15 žingsnis: finalas

Finalas
Finalas
Finalas
Finalas

Štai ir turi! Yra keletas patobulinimų, kuriuos galima padaryti, pavyzdžiui, pridėti tą mygtuką, nusipirkti geresnę dvipusę plėvelę ir ištaisyti šią klaidą kode, bet iš esmės viskas bus padaryta: atrodo kaip veidrodis, jis atpažįsta iš anksto nustatytą vartotojo veidą ir jis atveria tą mielą mažą stalčių. Kaip visada, norėčiau išgirsti jūsų mintis, klausimus ir atsiminimus komentaruose žemiau.

Bendras įvertinimas: 10/10

Komentarai: #Ar nebandyčiau vėl … nebent galėčiau sekti tai, kas nurodyta;)

Slaptų skyrių iššūkis
Slaptų skyrių iššūkis
Slaptų skyrių iššūkis
Slaptų skyrių iššūkis

Didysis prizas slapto skyriaus iššūkyje

Rekomenduojamas: