Talaan ng mga Nilalaman:

Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento: 15 Hakbang (na may Mga Larawan)
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento: 15 Hakbang (na may Mga Larawan)

Video: Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento: 15 Hakbang (na may Mga Larawan)

Video: Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento: 15 Hakbang (na may Mga Larawan)
Video: Keeping the Heart | John Flavel | Christian Audiobook 2024, Hulyo
Anonim
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento
Mirror sa Pagkilala sa Mukha Na May Lihim na Kompartimento

Palagi akong naintriga ng mga laging malikhaing lihim na kompartimento na ginagamit sa mga kwento, pelikula, at iba pa. Kaya, nang makita ko ang Lihim na Kompartamento ng Paligsahan nagpasya akong mag-eksperimento sa ideya mismo at gumawa ng isang ordinaryong salamin na naghahanap ng isang lihim na drawer sa gilid kapag tiningnan ito ng tamang tao.

Sa pamamagitan ng paggamit ng isang Raspberry Pi, ilang kaalaman sa pag-program ng sawa, at klase sa tindahan ng ika-8 na grado, makakalikha kami ng malagkit na aparato upang itago ang mga bagay sa simpleng paningin na ang wastong gumagamit lamang ang magkakaroon ng pag-access.

Nais kong magbigay ng isang espesyal na salamat sa mga taong ito / platform kung saan nakuha ko rin ang aking impormasyon at mga mapagkukunan:

TeCoEd - Youtube Channel

Emmet mula sa PiMyLifeUp

MJRoBot sa Hackster.io (profile)

Gaven MacDonald - Youtube Channel

Tucker Shannon sa Thingiverse (profile)

Mga gamit

Mga Pantustos sa Frame:

  • Wood Plank (Ang mga sukat ng board na ito ay 42 "by 7.5" by 5/16 ")
  • Pencil Larawan Frame (na may salamin)
  • Pag-spray ng Pinta
  • One Way Reflective Adhesive
  • Paglilinis ng Salamin at Bahi
  • MDF Wood

Mga Kagamitan sa Pagkilala sa Mukha:

  • Raspberry Pi (Ginamit ko ang Pi 3 B + ngunit may iba pang mga pagpipilian)
  • Modyul ng Camera
  • Stepper Motor

Mga tool:

  • Saw Saw
  • Jig Saw
  • SandpaperWood
  • GlueTape
  • Sukatin
  • Gunting
  • Bote ng spray
  • 3d printer
  • Super Pandikit

Hakbang 1: Pinuputol para sa Box Frame

Pinuputol para sa Box Frame
Pinuputol para sa Box Frame
Pinuputol para sa Box Frame
Pinuputol para sa Box Frame
Pinuputol para sa Box Frame
Pinuputol para sa Box Frame
Pinuputol para sa Box Frame
Pinuputol para sa Box Frame

Bumili ako ng isang frame ng larawan mula sa pangalawang-kamay na tindahan. Babala lamang, siguraduhin na ang mga tabla na bumubuo sa frame ay hindi bababa sa 1 1/2 ang lapad. Ito ay upang madikit mo ang iba pang mga board ng kahoy dito na may sapat na puwang upang gumana. Gayundin, siguraduhin na ang baso sa ang frame ay ganap na malinaw. Bumili ako ng isang frost nang hindi sinasadya at pagkatapos ay bumili ng isa pang frame para lamang sa malinaw na baso. Dahil ginamit ang aking frame ang mga sukat para sa kahon ng kahon ay maaaring magkakaiba.

  • Itabi ang frame sa orientation ng larawan. Sukatin ang mahabang gilid (LS) ng gilid ng butas ng salamin sa frame na may karagdagang ½”sa parehong tuktok at ibaba. (ibig sabihin magdagdag ng isang pulgada sa mahabang bahagi ng pagsukat ng butas ng salamin. Itala ito at lagyan ng label ang LSM (Long Side Measurement).
  • Katulad nito, sukatin ang tuktok na bahagi ng butas at magdagdag ng isang karagdagang 1”. Itala ito at lagyan ng label ang SSM (Maikling Sukat sa Gilid).
  • Kunin ang iyong board at gamit ang isang table saw, gupitin ang dalawang LSM x 2”at dalawang SSM x 2”.
  • Dalhin ang isa sa mga pagbawas ng LSM at sukatin ang isang 2 "x1" na rektanggulo na 1 "mula sa ibaba at ½" mula sa kaliwa at kanang bahagi (tulad ng ipinakita sa larawan 3).
  • Gumamit ng isang lagari upang gupitin ang butas. Pagkatapos ay gamitin ang papel de liha upang buhangin ang mga gilid.

Hakbang 2: Pinuputol para sa Drawer

Pinuputol para sa Drawer
Pinuputol para sa Drawer
Pinuputol para sa Drawer
Pinuputol para sa Drawer
Pinuputol para sa Drawer
Pinuputol para sa Drawer
Pinuputol para sa Drawer
Pinuputol para sa Drawer

Magsisimula na kaming magtayo ng drawer (a.k.a Lihim na Kompartimento).

  • Gupitin ang dalawang panig na 4 "x 1", isang 3 ⅜ "x 1" (likod na gilid), isang 4 "x 1" (front edge), at isang 4 "x 3" (platform).
  • Kola ang unang 4 "x 1" na bahagi kasama ang 4 "na bahagi ng platform. Inilagay ko ang isang pares na nakatiklop na mga papel sa ilalim ng platform side kaya't ito ay nakataas ng bahagya, sa ganitong paraan hindi ito mag-drag sa butas na pinutol ko sa LS plank. Itakda upang matuyo ng 30 minuto.
  • Katulad nito, kola ang 3 ⅜”x 1” kasama ang 3 ⅜”na gilid ng platform. Itakda upang matuyo ng 30 minuto. Pagkatapos ay kola ang pangalawang 4 "x 1" na bahagi sa tapat ng una. Itakda upang matuyo ng 30 minuto.
  • Itabi ang harap na gilid sa ngayon. Ito ang magiging huling bagay na nakadikit sa drawer.
  • Kapag natapos, suriin upang makita kung umaangkop ito sa butas na iyong na-jigsaw sa LSM plank. Kung hindi, buhangin ang butas hanggang sa madaling gumuhit ang drawer papasok at palabas, at walang drag.

Hakbang 3: Pagsasama-sama ng Frame

Pagsasama-sama ng Frame
Pagsasama-sama ng Frame
Pagsasama-sama ng Frame
Pagsasama-sama ng Frame
Pagsasama-sama ng Frame
Pagsasama-sama ng Frame

Sa lahat ng mga bahagi na kumpleto maaari naming simulan upang tipunin ang kabuuan ng frame.

  • Kola ang LSM plank na nakasentro sa butas ng salamin na may isang ½”sa bawat panig. Tiyaking nakadikit ito ng ½”ang layo mula sa butas (tulad ng ipinakita sa larawan 1). Itakda upang matuyo ng 30 minuto.
  • Kola ang unang plank ng SSM na may gilid na dumampi sa loob ng LSM plank na nakadikit lamang. (Gumamit ng pinuno upang matiyak na nakadikit ito sa tuwid). Itakda upang matuyo ng 30 minuto.
  • Kunin ang iba pang panig ng LSM at ipako ang katulad sa una. Siguraduhin na ito ay ½”ang layo mula sa butas at ang SSM na naka-attach lamang ay nakadikit sa loob ng tabla. Itakda upang matuyo ng 30 minuto.
  • Kola ang huling SSM sa tuktok na gilid. Dahil mayroon kang dalawang LSM sa magkabilang panig, nakasalalay sa kung gaano ka derekta ang mga ito, maaaring kailanganin mong buhangin ang mga gilid ng SSM pababa upang matiyak na umaangkop ito (kung minsan ay papatay ang aking pagputol). Itakda upang matuyo ng 30 minuto.
  • Sukatin ang maliit na puwang sa pagitan ng ilalim ng drawer at ng frame. Gupitin ang isang piraso ng kahoy na MDF na may pagsukat na ito, sa pamamagitan ng 4 ". Nais mong gawin ang piraso na ito malapit sa drawer ngunit hindi ito hinawakan. Inaasahan nitong suportahan ang drawer na may kaunting pagkikiskisan.
  • Kapag natapos na, nag-spray ako ng pinturang frame upang magkatugma ang lahat ng mga piraso.

Hakbang 4: Para sa Salamin

Para sa Salamin
Para sa Salamin
Para sa Salamin
Para sa Salamin
Para sa Salamin
Para sa Salamin
Para sa Salamin
Para sa Salamin

Ang one-way film adhesive na binili ko sa Amazon ay humigit-kumulang na $ 10. May mga mas mahusay na kalidad na medyo mas mahal kung interesado ka. Sumasalamin ang isang ginamit ko ngunit masasabi mo ito ay hindi isang regular na salamin na makikita mo sa isang bahay. Ang mas mahal ay makukuha sa iyo ang hitsura na iyon.

  • Linisin ang baso na may mas malinis na salamin sa magkabilang panig.
  • Alisin ang takbo ng malagkit na malagkit at ilagay ang baso sa itaas. Gupitin ang malagkit upang mayroong hindi bababa sa ½”labis sa bawat panig ng baso.
  • Itabi ang baso at basa ang isang gilid nito ng tubig. Pagkatapos alisan ng balat ang plastic coat ng one-way adhesive at iwisik ang bagong nakalantad na bahagi sa tubig.
  • Ilagay ang basang bahagi ng baso sa basang bahagi ng malagkit. Hayaang umupo ng 30 minuto.
  • I-flip at gamitin ang iyong hinlalaki upang patagin ang anumang mga bula sa pagitan ng malagkit at baso. Pagkatapos ay i-cut ang labis na malagkit mula sa paligid ng mga gilid.

Hakbang 5: I-install ang Raspbian Stretch

Ito ang aking unang pagkakataon sa pagtuklas sa kapaligiran ng Raspberry Pi nagsimula akong maghanap ng mga tagubilin sa kung paano mai-install ang OS. Natagpuan ko kalaunan ang isang direktang tutorial sa Youtube ng TeCoEd na dumaan sa proseso ng pag-install ng Stretch sa SD card (na may isang kaibig-ibig ding pagpapakilala rin). Narito ang link sa tutorial na iyon:

Sa esensya, ang kailangan mo lang gawin ay:

  • I-format ang SD card sa pamamagitan ng pagpili ng iyong Drive >> Mga Tool sa Drive >> Format. I-download ang ZIP file para sa Raspian Stretch (matatagpuan dito:
  • I-flash ang imahe ng OS sa SD Card. Ginamit ng TeCoEd ang Win32 Disk Imager upang makumpleto ito. Natapos ako sa pag-install ng balenaEtcher na tila medyo prangka. (Narito ang link sa pag-download para sa balenaEtcher:
  • Kapag nasa balenaEtcher piliin ang "Flash Mula sa File" at piliin ang dating na-download na ZIP file. Susunod, piliin ang nais na SD card (kung hindi awtomatikong napili). Pagkatapos ay pindutin ang makatas na flash button at hintaying maganap ang mahika.

Kapag na-install sa SD card maaari mo itong ipasok sa Raspberry Pi at dumaan sa proseso ng generic na pag-setup ng Pi.

Hakbang 6: I-install ang OpenCV

Ngayon sa mas maraming mga Bahagi ng Pagkilala sa Mukha. Upang makilala ang mga mukha, dapat naming i-download ang OpenCV library na naglalaman ng maraming bilang ng mga tool upang gumana sa paningin ng computer.

Ang pag-install ng OpenCV ay ang pinaka mahirap na bahagi ng aspeto ng software para sa akin. Ngunit pagkatapos ng pagsunod sa maraming mga tagubilin sa wakas ay nakakita ako ng isang tutorial ni Emmet mula sa PiMyLifeUp na gumawa ng trick na matatagpuan dito:

Hindi ako lalakad sa mga hakbang na ito dahil mas magiging angkop ka sa pagsunod sa mga ito mula sa link (na may mga ibinigay na paliwanag at kakayahang kopyahin at i-paste nang direkta mula sa site nang mas madali).

Hakbang 7: Paganahin / Subukan ang Camera

Paganahin / Subukan ang Camera
Paganahin / Subukan ang Camera
Paganahin / Subukan ang Camera
Paganahin / Subukan ang Camera

Matapos ma-install ang OpenCV ang natitirang bahagi ng aking paglalakbay ay nakumpleto gamit ang isang tutorial ng MJRoBot sa Hackster.io na matatagpuan dito:

Bago kami magsimula nais kong ipaalala sa iyo na hindi ako ang orihinal na tagalikha ng mga script na ito ngunit nagtapos sa pagbabago ng mga bahagi ng mga ito.

Upang magsimula dapat nating subukan ang camera upang matiyak na makakakuha tayo ng video sa screen. Gumugol ako ng halos isang oras na sinusubukang patakbuhin ang script na ibinigay sa Hakbang 3 ng MJRoBot. Tulad ng pag-aari ng buhay talagang kailangan natin upang paganahin ang camera sa Raspberry Pi (lumalabas na maaaring isang magandang ideya na basahin ang mga ibinigay na tagubilin … mmm nah). Kaya pagkatapos ng pagkonekta sa Camera sa tamang port sundin ang mga hakbang na ito:

  • Magbukas ng isang terminal ng utos at i-type ang sudo raspi-config
  • Piliin ang "Paganahin ang Camera" (maaari itong makita sa ilalim ng isang pagpipilian ng mga aparato)
  • Pindutin ang "Enter"
  • Pumunta sa "Tapusin" At sasabihan ka na muling i-reboot

Sundin ang mga hakbang na ito:

  • Pumunta sa Pangunahing Menu ng Raspberry (Kaliwa sa itaas)
  • Mga Kagustuhan
  • Pag-configure ng Raspberry Pi
  • Mga interface
  • Pagkatapos sa Camera, piliin ang "Pinagana"
  • Pagkatapos "OK"

Ngayon ay dapat mong matagumpay na patakbuhin ang script na ito mula sa tutorial ng MJRoBot upang subukan ang camera (tandaan na ang lahat ng code na ito kasama ang isang mas malalim na paglalarawan ay matatagpuan sa ibinigay na link sa itaas sa tutorial ng MJRobot):

i-import ang numpy bilang np

import cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Taas habang (True): ret, frame = cap.read () frame = cv2. flip (frame, -1) # Flip camera vertically grey = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('frame', frame) cv2.imshow ('grey', grey) k = cv2.waitKey (30) & 0xff kung k == 27: # pindutin ang 'ESC' upang tumigil sa break cap.release () cv2.destroyAllWindows ()

Ang nakaraang code ay dapat magpakita ng dalawang bintana, isa sa kulay at isa pa sa greyscale. Kung nagawa mo ito hanggang sa tingin ko karapat-dapat ka sa isang magandang sandwich.

Hakbang 8: Pagkolekta ng Data at Data ng Pagsasanay

Pagkolekta ng Data at Data ng Pagsasanay
Pagkolekta ng Data at Data ng Pagsasanay
Pagkolekta ng Data at Data ng Pagsasanay
Pagkolekta ng Data at Data ng Pagsasanay
Pagkolekta ng Data at Data ng Pagsasanay
Pagkolekta ng Data at Data ng Pagsasanay

Sa ibinigay na tutorial ang may-akda ay lalalim pa sa lalim tungkol sa mga proseso ng code na ibibigay sa lalong madaling panahon, ngunit dahil ito ang mga tagubilin sa kung paano ginawa ang salamin na ito hindi ako lalalim sa kasaysayan o sa mga kumplikadong mekaniko. Gayunpaman inirerekumenda ko sa iyo na kumuha ng isang buwan ng iyong buhay sa pagbabasa tungkol sa dalawang bagay na ito dahil maihahatid nila ang iyong isip nang maayos.

Mayroong halos tatlong iba pang mga script na tatakbo bago namin makuha ang lahat ng ito gumagana. Ang una ay para sa pagkolekta ng data, ang pangalawa ay para sa pagsasanay nito at ang huli ay para sa pagkilala. Ang pagkolekta ng data ay nangangailangan ng aktwal na mga larawan ng mukha na makukuha at maiimbak sa isang tukoy na lugar para sa pagsasanay. Ginawa ng tagalikha ng code na ito na napakasimple upang magawa ang lahat ng ito kaya inirerekumenda kong sundin ang mga tagubiling ito upang maiwasan ang sakit ng ulo.

Magbukas ng isang linya ng utos at gumawa ng isang bagong direktoryo na pinangalanan itong isang bagay na masaya (Tinawag ko ang aking FaceRec)

mkdir FaceRec

Ngayon, palitan ang direktoryo sa FaceRec at gumawa ng isang subdirectory na siguraduhing pangalanan ito ng dataset

cd FaceRec

mkdir dataset

Habang nasa amin ito, maaari rin naming gawin ang iba pang subdirectory na pinangalanang tagapagsanay

mkdir trainer

Ngayon ay maaari mong patakbuhin at sundin ang mga direksyon ng unang script na kukuha ng mga larawan ng isang gumagamit. (Isang ulo lang, siguraduhing ipasok ang user id bilang alinman sa 1, 2, 3 atbp.)

i-import ang cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # itakda ang lapad ng video cam.set (4, 480) # itakda ang taas ng video face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Para sa bawat isa tao, ipasok ang isang numerong mukha id face_id = input ('\ n ipasok ang user id end press ==>') i-print ("\ n [INFO] Pinasimulan ang pagkuha ng mukha. Tingnan ang camera at maghintay…") # Pinasimulan ang indibidwal na bilang ng sample ng mukha count = 0 habang (True): ret, img = cam.read () img = cv2.flip (img, -1) # flip video image vertically grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) mga mukha = face_detector.detectMultiScale (grey, 1.3, 5) para sa (x, y, w, h) sa mga mukha: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) count + = 1 # I-save ang nakunan ng imahe sa folder ng mga folder na cv2.imwrite ("dataset / Gumagamit." + Str (face_id) + '.' + Str (count) + ".jpg", kulay abong [y: y + h, x: x + w]) cv2.imshow ('imahe', img) k = cv2.waitKey (100) & 0xff # Pindutin ang 'ESC' para sa paglabas ng video kung k == 27: basahin ang bilang ng elif> = 30: # Kumuha ng 30 sample ng mukha at ihinto ang video brea k print ("\ n [INFO] Lumalabas na Program at mga bagay sa paglilinis") cam.release () cv2.destroyAllWindows ()

Sa puntong ito siguraduhing naka-install ka ng unan sa Pi. Kung hindi, patakbuhin ang utos:

pip install unan

Matapos makumpleto iyon maaari mong patakbuhin ang script ng pagsasanay (pangalawang script) na walang putol na magbibigay sa iyo ng isang.yaml file na gagamitin sa huling script

i-import ang cv2import numpy bilang np mula sa PIL import I-import ang imahe ng os # Path para sa path ng imahe ng imahe ng mukha = 'dataset' na kinikilala = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # pagpapaandar upang makuha ang mga imahe at data ng label def getImagesAndLabels (path): imagePaths = [os.path.join (path, f) para sa f in os.listdir (path)] faceSamples = ids = para sa imagePath sa imagePaths: PIL_img = Image.open (imagePath).convert ('L') # i-convert ito sa grayscale img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [- 1]. hatiin (".") [1]) mga mukha = detector.detectMultiScale (img_numpy) para sa (x, y, w, h) sa mga mukha: faceSamples.append (img_numpy [y: y + h, x: x + w]) ids.append (id) ibalik ang faceSamples, ids print ("\ n [INFO] Mga mukha sa pagsasanay. Magtatagal ng ilang segundo. Maghintay…") mga mukha, ids = getImagesAndLabels (path) na makilala.train (mukha, np.array (ids)) # I-save ang modelo sa trainer / trainer.yml recognitor.write ('trainer / trainer.yml') # recognizer.save () nagtrabaho sa Mac, ngunit hindi sa Pi # I-print ang bilang ng mga mukha na sinanay at tapusin ang pag-print ng programa ("\ n [INFO] {0} nakaharap sa pagsasanay. Lumalabas na Programa".format (len (np.unique (ids))))

Ano ang cool tungkol sa hanay ng mga script na ito na ang maraming mga mukha ay maaaring ipinasok sa system na nangangahulugang maraming mga indibidwal ang maaaring ma-access sa loob ng salamin kung nais ito.

Sa ibaba sa ibaba mayroon akong magagamit na script ng Data Capture at script ng Pagsasanay upang ma-download.

Hakbang 9: Oras ng Pagkilala sa Mukha

Oras ng Pagkilala sa Mukha
Oras ng Pagkilala sa Mukha
Oras ng Pagkilala sa Mukha
Oras ng Pagkilala sa Mukha

Panghuli, maaari naming patakbuhin ang script ng pagkilala. Marami pang code ang naidagdag sa script na ito upang magawa ang proseso ng motor upang maipaliwanag ko nang kaunti ang mga bahagi na iyon. Hahatiin ko ito sa mga seksyon ngunit ilalagay ko ang buong script sa dulo ng hakbang kung iyon ang hinahabol mo.

Magsisimula kami sa pamamagitan ng pag-import ng lahat ng mga module na kakailanganin namin at pagkatapos ay itakda ang mode na GPIO sa GPIO. BCM

i-import ang numpy bilang np

i-import ang os na oras ng pag-import ng RPi. GPIO bilang GPIO GPIO.setwarnings (Maling) GPIO.setmode (GPIO. BCM)

Ang susunod na listahan na pinangalanang ControlPin ay isang hanay ng mga numero na kumakatawan sa mga output pin na gagamitin para sa aming stepper motor.

ControlPin = [14, 15, 18, 23]

Itinatakda ng for-loop ang mga pin na ito bilang Mga Output at pagkatapos ay tinitiyak na naka-off ang mga ito. Mayroon pa akong ilang code dito upang hayaang isara ang drawer sa pamamagitan ng pagpindot ng isang pindutan ngunit nagpasya akong gumamit na lamang ng isang timer.

GPIO.setup (ControlPin , GPIO. OUT)

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

Ang susunod na dalawang variable ay mga pagkakasunud-sunod na gagamitin namin upang magmaneho ng motor. Nalaman ko ang impormasyong ito mula sa isang kahanga-hangang video ni Gaven MacDonald na inirerekumenda kong panoorin habang siya ay lalalim sa hindi lamang ang code ngunit ang aktwal na motor (matatagpuan dito: https://www.youtube.com/embed/Dc16mKFA7Fo). Sa esensya, ang bawat pagkakasunud-sunod ay mai-i-itate sa pamamagitan ng paggamit ng mga naka-pugad na mga loop para sa paparating na mga function ng openComp at closeComp. Kung titingnan mong mabuti ang seq2 ay eksaktong eksaktong kabaligtaran ng seq1. Yup, nahulaan mo ito. Ang isa ay para sa paglipat ng motor pasulong at ang isa ay para sa baligtad.

seq1 =

seq2 =

Simula sa aming pag-andar ng openComp gumagawa kami ng isang for-loop na paulit-ulit na 1024 beses. Ayon sa video ng MacDonald na 512 na mga pag-ulit ay magbibigay ng isang buong pag-ikot ng motor at nalaman ko na ang tungkol sa dalawang pag-ikot ay isang magandang haba ngunit maaari itong maiakma depende sa sukat ng isang indibidwal. Ang susunod na for-loop ay binubuo ng 8 pag-ulit upang mai-account ang 8 arrays na matatagpuan sa seq1 at seq2. At sa wakas, ang huling for-loop ay umuulit ng apat na beses para sa apat na item na matatagpuan sa bawat isa sa mga array na ito pati na rin ang 4 na mga pin ng GPIO na nakakonekta sa aming motor. Pinipili ng linya sa ilalim dito ang pin ng GPIO at pagkatapos ay i-on o i-off ito depende sa kung aling pag-ulit ito nakalagay. Ang linya pagkatapos ay nagbibigay ng ilang oras ng buffer baka hindi paikutin ang aming motor. Matapos paikutin ang motor upang ilipat ang drawer ay natutulog ito ng 5 segundo bago magpatuloy. Ang oras na ito ay maaaring ayusin dito o maaari mong paganahin ang naka-comment na code na nagbibigay-daan para sa paggamit ng isang push-button upang ipasa ang script sa halip na isang timer.

para sa saklaw ko (1024):

para sa kalahating hakbang sa saklaw (8): para sa pin sa saklaw (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) oras. pagtulog (.001) "" habang Totoo: kung GPIO.input (2) == GPIO. LOW: break; "" oras. Pagtulog (5)

Gumagana ang function ng closeComp sa isang katulad na fashion. Matapos bumalik ang motor ay nagpatuloy akong itakda ang aming huling mga pin ng GPIO sa mababa upang matiyak na hindi kami nag-aaksaya ng anumang lakas at pagkatapos ay nagdagdag ako ng tatlong higit pang mga segundo ng oras bago magpatuloy.

para sa saklaw ko (1024):

para sa kalahating hakbang sa saklaw (8): para sa pin sa saklaw (4): GPIO.output (ControlPin [pin], seq2 [halfstep] [pin]) oras. tulog (.001) i-print ("Isinasara ang Kompartamento") GPIO.output (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) oras.sulog (3)

Ang maramihan sa susunod na bahagi ay ginagamit upang i-set up ang camera at simulan ang pagkilala sa mukha. Muli, ang mga tagubilin ng MKRoBot ay napupunta sa mga bahagi nang higit pa ngunit sa ngayon, ipinapakita ko lamang ang mga bahagi na ginamit para sa salamin.

Una kong binago ang mga pangalan ng listahan upang ang aking pangalan ay nasa index kung saan ko ito itinalaga habang kinokolekta ang data (sa aking kaso 1). At pagkatapos ay itinakda ko ang natitirang mga halaga sa Wala dahil wala na akong mga mukha sa dataset.

names = ['Wala', 'Daniel', 'Wala', 'Wala', 'Wala', 'Wala']

Ang aming huling ilang mga linya ng code ay ipinatupad sa thicc for-loop. Lumikha ako ng variable upang maiimbak ang kumpiyansa bilang isang integer (intConfidence) bago maging variable ang kumpiyansa ng variable. Pagkatapos ay gumagamit ako ng isang if-statement upang suriin kung ang kumpiyansa ay higit sa 30 at kung ang id (kung aling tao ang nakikita ng computer, sa kasong ito, "Daniel") ay katumbas ng aking pangalan. Matapos ito ay makumpirma na ang function na openComp ay tinatawag na kung saan (tulad ng ipinaliwanag bago) ilipat ang motor, kicks out pagkatapos ng 5 segundo, at pagkatapos ay magpatuloy sa closeComp na gumagalaw ang motor sa kabaligtaran direksyon at gumawa ng ilang paglilinis bago magpatuloy sa thicc loop.

kung intConfidence> 30 at id == 'Daniel':

openComp () closeComp ()

Ang isang bug na nahanap ko dito ay kung minsan pagkatapos bumalik ang closeComp, nagpapatuloy ang code ngunit ang kondisyong if-statement ay napatunayan na totoo na parang nagbabasa ng video feed na nasa buffer pa rin. Bagaman hindi ito nangyayari sa tuwing hindi pa ako nakakahanap ng isang paraan upang matiyak na hindi ito nangyayari, kaya kung ang sinuman ay may anumang mga ideya ipaalam lamang sa akin sa mga komento.

Narito ang buong script sa lahat sa isang lugar (at sa ibaba lamang ito ay nada-download):

import cv2

import numpy as np import os import time import RPi. GPIO as GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] para sa i sa saklaw (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

Hakbang 10: Pag-mount ng Pi at Pagkonekta sa Motor

Pag-mount ng Pi at Pagkonekta sa Motor
Pag-mount ng Pi at Pagkonekta sa Motor
Pag-mount ng Pi at Pagkonekta sa Motor
Pag-mount ng Pi at Pagkonekta sa Motor
Pag-mount ng Pi at Pagkonekta sa Motor
Pag-mount ng Pi at Pagkonekta sa Motor

Ang pag-mount ng Raspberry Pi sa frame ay medyo simple. Dinisenyo ko ang isang maliit na 90-degree na siko na may isang mukha na may butas at ang kabilang panig ay ganap na patag. Pagkatapos ng pag-print ng 3D ng dalawa sa mga ito maaari silang ikabit sa mga turnilyo sa Raspberry Pi sa mga mounting hole nito (ginamit ko ang dalawang butas sa bawat panig ng mga GPIO pin).

Pagkatapos ay nagpatuloy akong gumamit ng sobrang pandikit sa tapat ng mga mukha ng naka-print na siko ng 3D upang ipako ang Pi sa itaas lamang ng drawer sa frame. Matapos matuyo ang pandikit maaari kong alisin o palitan ang Pi sa posisyon nang simple at maginhawa sa pamamagitan lamang ng dalawang mga turnilyo. Mayroon akong.stl para sa siko na naka-link sa ibaba.

Ikonekta lamang ang driver ng motor sa PI na may IN1, IN2, IN3, IN4 na kumokonekta sa GPIO 14, 15, 18, 23 ayon sa pagkakabanggit. Panghuli, ikonekta ang 5v at Ground pin ng controller board sa 5v output at Ground pin ng Pi.

Narito ang isang link sa Pin ng Pi para sa ilang sanggunian:

Hakbang 11: Pag-mount sa Camera

Pag-mount sa Camera
Pag-mount sa Camera
Pag-mount sa Camera
Pag-mount sa Camera
Pag-mount sa Camera
Pag-mount sa Camera

Ang pag-mount sa Camera ay bahagyang mas malakas kaysa sa Pi ngunit ang pamamaraan ay nakatapos ng trabaho. Matapos ang pagdidisenyo at pag-print ng isang manipis na sinag na may 2 butas sa bawat dulo ay ikinabit ko ang sinag sa Rasberry Pi sa pamamagitan ng butas nito. Pagkatapos ay ilakip lamang ang camera sa kabaligtaran na dulo ng sinag gamit ang isa pang tornilyo. Ta-da! Ito ay medyo lumipad.

Hakbang 12: Paglikha at Pag-mount ng Drawer-Moving-Mekanismo

Paglikha at Pag-mount ng Drawer-Moving-Mekanismo
Paglikha at Pag-mount ng Drawer-Moving-Mekanismo
Paglikha at Pag-mount ng Drawer-Moving-Mekanismo
Paglikha at Pag-mount ng Drawer-Moving-Mekanismo
Paglikha at Pag-mount ng Drawer-Moving-Mekanismo
Paglikha at Pag-mount ng Drawer-Moving-Mekanismo

Ang hakbang na ito ay ginawang madali salamat sa walang pag-ibig na mga regalo ng komunidad ng gumagawa. Matapos ang isang mabilis na paghahanap sa Thingiverse nakakita ako ng isang linear na actuator na nilikha ng TucksProjects (matatagpuan dito: https://www.thingiverse.com/thing: 2987762). Ang natitira lamang na gawin ay isampal ito sa isang SD card at hayaang gawin ng printer ang gawain.

Natapos ako sa pagpunta sa Fusion 360 at na-edit ang spur dahil ang poste ng aking motor ay masyadong malaki para sa ibinigay ng TucksProjects. Mayroon akong.stl para sa ibaba. Matapos ang pag-print ay tapos na, kailangan lamang naming tipunin ito sa pamamagitan ng paglalagay ng spur sa shaft ng motor, pagkatapos ay sa pamamagitan ng paglakip ng motor at enclosure ng mga gilid na may 2 mga tornilyo (siguraduhing inilalagay mo ang rak sa pagitan bago ito isara). Natapos kong mag-cut ng isang pulgada mula sa rak upang magkasya ito sa pagitan ng drawer at ng frame.

Ngayon ang natitira lamang ay ang paglakip ng mekanismo sa frame at drawer. "BuT hOW wiLL wE Do tHiS?" tinanong mo … oo, sabihin mo sa akin: Super Kola. Tulad ng ipinakita sa mga larawan sa itaas, ilagay lamang ang mekanismo laban sa ilalim ng frame at itulak ito laban sa piraso ng kahoy na slide ng drawer. Mahalaga rito na subukan mong makuha ang rak / mekanismo bilang kahanay ng frame hangga't maaari upang kapag gumagalaw ang mekanismo ay itulak nito ang drawer nang diretso at hindi sa isang anggulo. Matapos matuyo ang pandikit, maglagay ng higit pang pandikit sa gilid ng rak at ilipat ang posisyon sa drawer at hayaang matuyo ito. Kapag kumpleto na mayroon kaming isang matibay na mekanismo upang i-slide ang aming lihim na drawer papasok at palabas.

Hakbang 13: Pagdaragdag ng Cardboard sa Likod ng Mirror

Pagdaragdag ng karton sa likod ng salamin
Pagdaragdag ng karton sa likod ng salamin
Pagdaragdag ng karton sa likod ng salamin
Pagdaragdag ng karton sa likod ng salamin
Pagdaragdag ng karton sa likod ng salamin
Pagdaragdag ng karton sa likod ng salamin

Upang magawang mas katulad ng salamin ang two-way film na ito, nalaman kong nagsisilbi itong mabuti sa aming layunin na ilagay ang karton sa likod ng baso. Ang ginamit na karton ay isa na kasama ng frame ngunit gagana ang anumang piraso na hiwa upang magkasya. Tinitiyak din nito na walang ilaw mula sa LED ng camera, ang motor controller, o ang Pi ay makikita sa kabilang panig ng salamin. Gamit ang lahat ng bagay sa kanyang lugar gamitin ang isang lapis upang markahan kung saan nakaupo ang camera sa karton. Pagkatapos ay gumamit ng isang labaha upang i-cut ang isang rektanggulo upang ang camera ay maaaring silip kapag ito ay nasa lugar.

Hakbang 14: Paglalagay sa Final Piece

Paglalagay sa panghuling piraso
Paglalagay sa panghuling piraso
Paglalagay sa panghuling piraso
Paglalagay sa panghuling piraso

Ang huling bagay na dapat gawin ay ilagay sa harap na bahagi ng drawer na itinabi nang mas maaga. Igalaw ang motor upang dumidikit ang drawer. Pagkatapos ay idikit ang harap na bahagi upang ang piraso ng drawer ay nakasentro (dapat mayroong kaunting hang sa lahat ng panig. Pagkatapos ay maaari mo lamang itong i-hang sa isang pader.

Hakbang 15: Katapusan

Pangwakas
Pangwakas
Pangwakas
Pangwakas

Ayan! Mayroong maraming mga pagpapabuti na maaaring magawa tulad ng pagdaragdag ng push button, pagbili ng ilang mas mahusay na two-way film at pag-aayos ng bug sa code ngunit lahat sa lahat, natatapos ang trabaho: mukhang isang salamin, kinikilala nito ang paunang natukoy na mukha ng gumagamit at binubuksan nito ang nakatutuwa na maliit na drawer. Tulad ng dati Gusto kong marinig ang iyong mga saloobin, katanungan, at memoir sa mga komento sa ibaba.

Pangkalahatang Rating: 10/10

Mga Komento: # WouldNotTryAgain … maliban kung maaari kong sundin ang itinuturo na ito;)

Lihim na Hamon ng Kompartimento
Lihim na Hamon ng Kompartimento
Lihim na Hamon ng Kompartimento
Lihim na Hamon ng Kompartimento

Grand Prize sa Lihim na Hamon ng Kompartimento

Inirerekumendang: