Mundarija:

Yashirin bo'linma bilan yuzni aniqlash oynasi: 15 qadam (rasmlar bilan)
Yashirin bo'linma bilan yuzni aniqlash oynasi: 15 qadam (rasmlar bilan)

Video: Yashirin bo'linma bilan yuzni aniqlash oynasi: 15 qadam (rasmlar bilan)

Video: Yashirin bo'linma bilan yuzni aniqlash oynasi: 15 qadam (rasmlar bilan)
Video: Siz chiroylimisiz yoki hunukmisiz Ushbu test aytadii 2024, Iyul
Anonim
Yashirin bo'limi bilan yuzni aniqlash oynasi
Yashirin bo'limi bilan yuzni aniqlash oynasi
Yashirin bo'limi bilan yuzni aniqlash oynasi
Yashirin bo'limi bilan yuzni aniqlash oynasi
Yashirin bo'limi bilan yuzni aniqlash oynasi
Yashirin bo'limi bilan yuzni aniqlash oynasi

Menga hikoyalar, filmlar va boshqalarda ishlatiladigan doimiy ijodiy maxfiy bo'linmalar qiziqib kelgan. Shunday qilib, "Yashirin kupe" tanlovini ko'rganimda, men o'zim bu g'oyani sinab ko'rishga qaror qildim va kerakli odam qarasa, maxfiy tortmachani ochadigan oddiy ko'rinadigan oynani yasashga qaror qildim.

Raspberry Pi, python dasturlash va 8-sinf do'konlari haqidagi ba'zi bilimlardan foydalangan holda, biz faqat to'g'ri foydalanuvchi kira oladigan narsalarni ko'z oldida yashirish uchun bu jirkanch qurilmani yaratishimiz mumkin.

Men o'z ma'lumotim va manbalarimni olgan odamlarga/platformalarga alohida minnatdorchilik bildirmoqchiman:

TeCoEd - Youtube kanali

PiMyLifeUp -dan Emmet

Hackster.io saytidagi MJRoBot (profil)

Gaven MacDonald - Youtube kanali

Tucker Shannon Thingiverse -da (profil)

Ta'minotlar

Ramka materiallari:

  • Yog'och taxta (bu taxtaning o'lchamlari 42 dyuymdan 7,5 dyuymga 5/16 dyuymga teng)
  • Qalamli rasm ramkasi (shisha bilan)
  • Bo'yoq spreyi
  • Bir tomonlama reflektiv yopishtiruvchi
  • Shisha tozalovchi va latta
  • MDF yog'och

Yuzni aniqlash uchun materiallar:

  • Raspberry Pi (men Pi 3 B+ dan foydalanganman, lekin boshqa variantlar ham bor)
  • Kamera moduli
  • Bosqichli motor

Asboblar:

  • Stol arra
  • Jig arra
  • Zımpara yog'och
  • GlueTape
  • O'lchash
  • Qaychi
  • Spray shishasi
  • 3D printer
  • Super elim

1 -qadam: quti ramkasi uchun kesmalar

Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar
Quti ramkasi uchun kesmalar

Men ikkinchi qo'l do'kondan rasm ramkasini sotib oldim. Faqat ogohlantirish, ramkani tashkil etuvchi taxtalarning kengligi kamida 1 1/2 ekanligiga ishonch hosil qiling. Shunday qilib, siz boshqa yog'och taxtalarni ishlash uchun etarli joy bilan yopishtirishingiz mumkin. Bundan tashqari, oynani tekshiring. Men tasodifan muzqaymoq sotib oldim va shaffof oynaga boshqa ramka sotib olishga majbur bo'ldim.

  • Ramkani portret yo'nalishda joylashtiring. Yuqoridan va pastdan qo'shimcha "dyuym" bilan ramkadagi shisha teshik tomonining uzun qirralarini (LS) o'lchang. (ya'ni, shisha tuynuk o'lchovining uzun tomoniga bir dyuym qo'shing. Buni yozing va LSM (Long Side Measurement) belgisini qo'ying.
  • Xuddi shunday, teshikning yuqori qismini o'lchab, qo'shimcha 1 "qo'shing. Buni yozing va SSM (Qisqa tomon o'lchovi) belgisini qo'ying.
  • Taxtani oling va stol arra bilan ikkita LSM x 2 dyuym va ikkita SSM x 2 dyuymni kesib oling.
  • LSM kesmalaridan birini oling va 2 dyuymli x1 dyuymli pastdan 1 dyuym va ½ dyuymni chap va o'ng tomondan o'lchang (3 -rasmda ko'rsatilganidek).
  • Teshikni kesish uchun jigsawdan foydalaning. Keyin qirralarni silliqlash uchun zımpara qog'ozidan foydalaning.

2 -qadam: tortmasining kesilishi

Shkaf uchun kesmalar
Shkaf uchun kesmalar
Shkaf uchun kesmalar
Shkaf uchun kesmalar
Shkaf uchun kesmalar
Shkaf uchun kesmalar
Shkaf uchun kesmalar
Shkaf uchun kesmalar

Endi biz tortmachani (maxfiy bo'linma) qurishni boshlaymiz.

  • 4 dyuymli x 2 dyuymli ikkita tomonni, 3 dyuymli x 1 dyuymli (orqa chekka), 4 dyuymli x 1 dyuymli (old chekkasi) va 4 dyuymli x 3 dyuymli (platforma) kesib oling.
  • Birinchi 4 dyuymli x 1 dyuymli tomonni platformaning 4 dyuymli tomoniga yopishtiring. Men bir nechta buklangan qog'ozlarni platformaning yoniga qo'ydim, shunda u biroz ko'tarildi, shuning uchun u LS taxtasida kesib o'tgan teshikka sudrab chiqmasdi. 30 daqiqaga quriting.
  • Xuddi shunday, 3 dyuymli x 1 dyuymni platformaning 3 dyuymli chetiga yopishtiring. 30 daqiqaga quriting. Keyin ikkinchi 4 dyuymli x 1 dyuymni birinchisining qarama -qarshi tomoniga yopishtiring. 30 daqiqaga quriting.
  • Hozircha old chetini chetga surib qo'ying. Bu tortmasiga yopishtirilgan oxirgi narsa bo'ladi.
  • Ish tugagach, u siz LSM taxtasiga joylashtirilgan teshikka mos keladimi -yo'qligini tekshirib ko'ring. Agar shunday bo'lmasa, tortma osongina ichkariga va tashqariga kirguncha teshikni qumlang va hech qanday tortish yo'q.

3 -qadam: ramkani birlashtirish

Ramkani birlashtirish
Ramkani birlashtirish
Ramkani birlashtirish
Ramkani birlashtirish
Ramkani birlashtirish
Ramkani birlashtirish

Barcha qismlar tayyor bo'lgach, biz ramkaning to'liq yig'ilishini boshlashimiz mumkin.

  • LSM taxtasini har tomonida ½ dyuymli shisha teshik bilan o'rtada yopishtiring. U teshikdan away”masofada yopishtirilganligiga ishonch hosil qiling (1 -rasmda ko'rsatilganidek). 30 daqiqaga quriting.
  • Birinchi SSM taxtasini chetiga yopishtirilgan LSM taxtasining ichki qismiga tegib yopishtiring. (To'g'ri yopishtirilganligiga ishonch hosil qilish uchun o'lchagichdan foydalaning). 30 daqiqaga quriting.
  • Boshqa LSM tomonini oling va birinchisiga o'xshash yopishtiring. U teshikdan ½ "masofada joylashganligiga va yaqinda o'rnatilgan SSM taxtaning ichki tomoniga yopishtirilganligiga ishonch hosil qiling. 30 daqiqaga quriting.
  • Oxirgi SSMni yuqori chetiga yopishtiring. Ikkala tomonda ikkita LSM mavjud bo'lgani uchun, ularni qanchalik to'g'ri biriktirganingizga qarab, SSMning yon tomonlarini mos kelishiga ishonch hosil qilish uchun zımparalashingiz kerak bo'lishi mumkin (ba'zida kesishim o'chadi). 30 daqiqaga quriting.
  • Sandiqning pastki qismi bilan ramka orasidagi kichik bo'shliqni o'lchab ko'ring. MDF yog'och bo'lagini bu o'lchov bilan 4 dyuymga kesib oling. Siz bu bo'lakni tortmasiga yaqin qilmoqchisiz, lekin unga tegmang. Bu tortmasining ishqalanishi minimal bo'lishi uchun mo'ljallangan.
  • Hammasi tugagach, men ramkani bo'yab qo'ydim, shunda hamma qismlar mos tushdi.

4 -qadam: Oyna uchun

Oyna uchun
Oyna uchun
Oyna uchun
Oyna uchun
Oyna uchun
Oyna uchun
Oyna uchun
Oyna uchun

Men Amazondan sotib olgan bir tomonlama kino yopishtiruvchi 10 dollar atrofida edi. Agar sizni qiziqtirsa, biroz qimmatroq bo'lgan, sifatli bo'lganlari bor. Men foydalanadigan oynani aks ettiradi, lekin siz ayta olasizki, bu siz uyda ko'radigan oddiy oyna emas. Qimmatroqlari sizga shunday ko'rinish beradi.

  • Stakanni ikki tomondan shisha tozalagich bilan tozalang.
  • Bir tomonlama yopishqoqni oching va ustiga stakan qo'ying. Stakanning har ikki tomonida kamida ½”ortiqcha bo'lishi uchun yopishqoqni kesib oling.
  • Stakanni chetga surib, uning bir tomonini suv bilan namlang. Keyin plastik qoplamani bir tomonlama yopishqoqdan tozalang va yangi ochilgan tomoniga suv seping.
  • Stakanning nam tomonini yopishtiruvchi ho'l tomonga qo'ying. 30 daqiqa o'tirishga ruxsat bering.
  • Oynani ag'daring va bosh barmog'ingiz bilan yopishtiruvchi va shisha orasidagi pufakchalarni tekislang. Keyin ortiqcha yopishqoqni chetidan kesib oling.

5 -qadam: Raspbian Stretch -ni o'rnating

Men Raspberry Pi muhitiga birinchi marta kirganimda, OSni o'rnatish bo'yicha ko'rsatmalarni qidira boshladim. Oxir -oqibat, Youtube -da TeCoEd tomonidan to'g'ridan -to'g'ri qo'llanmani topdim, u Stretch -ni SD -kartaga o'rnatish jarayonidan o'tdi (juda yoqimli kirish bilan). Bu o'quv qo'llanmasining havolasi:

Umuman olganda, sizga kerak bo'lgan narsa:

  • SD -kartani formatlash uchun Diskni >> Disk asboblari >> Format -ni tanlang. Raspian Stretch uchun ZIP faylini yuklab oling (bu erda:
  • OS tasvirini SD -kartaga o'chiring. Buni bajarish uchun TeCoEd Win32 Disk Imager dasturidan foydalangan. Men balenaEtcher -ni o'rnatishni tugatdim, bu biroz sodda edi. (Bu erda balenaEtcher -ni yuklab olish havolasi:
  • BalenaEtcher -ga kirgandan so'ng, "Fayldan Flash" -ni tanlang va oldin yuklangan ZIP -faylni tanlang. Keyin kerakli SD -kartani tanlang (agar avtomatik ravishda tanlanmasa). Keyin suvli flesh tugmachasini bosing va sehr sodir bo'lishini kuting.

SD -kartaga o'rnatilgandan so'ng siz uni Raspberry Pi -ga kiritishingiz va umumiy Pi o'rnatish jarayonidan o'tishingiz mumkin.

6 -qadam: OpenCV -ni o'rnating

Endi yuzni tanishga yo'naltirilgan ko'proq qismlarga. Yuzlarni tanib olish uchun biz kompyuter ko'rish bilan ishlash uchun ko'plab vositalarni o'z ichiga olgan OpenCV kutubxonasini yuklab olishimiz kerak.

OpenCV -ni o'rnatish men uchun dasturiy ta'minotning eng og'ir qismi edi. Ammo ko'p sonli ko'rsatmalarni bajarganimdan so'ng, men nihoyat PiMyLifeUp-dan Emmetning qo'llanmasini topdim, u bu erda hiyla ishlatdi:

Men bu qadamlarni bosib o'tmayman, chunki siz ularni havoladan kuzatib borishingiz yaxshiroq bo'ladi (berilgan tushuntirishlar va to'g'ridan -to'g'ri saytdan nusxa ko'chirish va joylashtirish imkoniyati bilan).

7 -qadam: Kamerani yoqish/sinovdan o'tkazish

Kamerani yoqish/sinovdan o'tkazish
Kamerani yoqish/sinovdan o'tkazish
Kamerani yoqish/sinovdan o'tkazish
Kamerani yoqish/sinovdan o'tkazish

OpenCV-ni o'rnatganimdan so'ng, qolgan safarimni Hackster.io-dagi MJRoBot qo'llanmasi yordamida yakunladim:

Ishni boshlashdan oldin shuni eslatib o'tmoqchimanki, men bu skriptlarning asl muallifi emasman, lekin oxir -oqibat ularning qismlarini o'zgartirganman.

Ishni boshlash uchun biz kamerani sinab ko'rishimiz kerak, shuning uchun biz ekranda video yozishimiz mumkin. Men MJRoBot -ning 3 -bosqichida berilgan skriptni ishga tushirishga bir soatcha vaqt sarfladim. Hayot xohlaganidek, biz Raspberry Pi kamerasini yoqishimiz kerak (berilgan ko'rsatmalarni o'qish yaxshi bo'lar edi … mmm nah). Shunday qilib, kamerani to'g'ri portga ulaganingizdan so'ng, quyidagi amallarni bajaring.

  • Buyruq terminalini oching va sudo raspi-config yozing
  • "Kamerani yoqish" -ni tanlang (bu qurilmalar bo'limida bo'lishi mumkin)
  • "Kirish" ni bosing
  • "Finish" ga o'ting va sizdan qayta yuklash so'raladi

Keyin quyidagi bosqichlarni bajaring:

  • Malinaning asosiy menyusiga o'ting (yuqori chapda)
  • Tanlovlar
  • Raspberry Pi konfiguratsiyasi
  • Interfeyslar
  • Keyin Kamerada "Yoqilgan" -ni tanlang.
  • Keyin "OK"

Endi siz ushbu skriptni kamerani sinab ko'rish uchun MJRoBot qo'llanmasidan muvaffaqiyatli ishga tushirishingiz kerak (esda tutingki, bu kod va batafsilroq tavsif MJRobot qo'llanmasining yuqoridagi havolasida keltirilgan):

numpy ni np sifatida import qilish

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. teskari aylantirish (ramka, -1) # Kamerani vertikal ravishda kulrang = cv2.cvtColor (ramka, cv2. COLOR_BGR2GRAY) cv2.imshow ("ramka", ramka) cv2.imshow ("kulrang", kulrang) k = cv2.waitKey (30)) Va 0xff agar k == 27 bo'lsa: # uzilishdan chiqish uchun "ESC" tugmasini bosing. Release () cv2.destroyAllWindows ()

Oldingi kod ikkita oynani ko'rsatishi kerak: biri rangli, ikkinchisi kulrang. Agar siz bu erga etib kelgan bo'lsangiz, menimcha, siz chiroyli sendvichga loyiqsiz.

8 -qadam: Ma'lumot yig'ish va o'quv ma'lumotlari

Ma'lumot yig'ish va o'quv ma'lumotlari
Ma'lumot yig'ish va o'quv ma'lumotlari
Ma'lumot yig'ish va o'quv ma'lumotlari
Ma'lumot yig'ish va o'quv ma'lumotlari
Ma'lumot yig'ish va o'quv ma'lumotlari
Ma'lumot yig'ish va o'quv ma'lumotlari

Taqdim etilgan o'quv qo'llanmada muallif yaqinda taqdim etiladigan kod jarayonlari haqida ancha chuqurroq ma'lumot beradi, lekin bu oyna qanday yasalgani haqida ko'rsatma bo'lgani uchun men na tarixni, na murakkab mexanikani o'rganmayman. Men sizga umringizning bir oyini aynan shu ikki narsa haqida o'qishni maslahat beraman, chunki ular sizning ongingizga yaxshi xizmat qiladi.

Hammasini ishga tushirishimiz uchun yana uchta skriptni ishga tushirishimiz kerak. Birinchisi, ma'lumotlarni yig'ish uchun, ikkinchisi - o'rgatish uchun, ikkinchisi - aslida tanib olish uchun. Ma'lumot yig'ish yuzning haqiqiy rasmlarini olish va mashg'ulot uchun ma'lum bir joyda saqlashni talab qiladi. Ushbu kodni yaratuvchisi bularning barchasini bajarishni juda oson qildi, shuning uchun men bosh og'rig'idan qochish uchun ushbu ko'rsatmalarga amal qilishni maslahat beraman.

Buyruqlar satrini oching va yangi katalogni qiziqarli deb nomlang (men FaceRec deb nomladim)

mkdir FaceRec

Endi, katalogni FaceRec -ga o'zgartiring va ma'lumotlar katalogiga nom berishni unutmang

CD FaceRec

mkdir ma'lumotlar bazasi

Biz bu erda bo'lganimizda, biz boshqa pastki katalogni ham murabbiy deb nomlashimiz mumkin

mkdir murabbiy

Endi siz foydalanuvchining rasmlarini oladigan birinchi skript ko'rsatmalariga amal qilishingiz va bajarishingiz mumkin. (Faqat ogohlantiring, foydalanuvchi identifikatorini 1, 2, 3 va hokazo qilib kiriting)

cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # video kengligi sozlangan cam.set (4, 480) # video balandligi sozlangan odam, bitta raqamli yuz identifikatorini kiriting face_id = kiritish ('\ n foydalanuvchi identifikatorining oxirigacha kiriting ==>') chop etish ("\ n [INFO] yuzni suratga olish boshlanmoqda. Kameraga qarang va kuting …") # Shaxsiy namuna olish yuzini boshlang count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # video tasvirni vertikal ravishda kulrang = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlar = face_detector.detectMultiScale (kulrang, 1.3, 5) (x, y, w, h) yuzlar uchun: cv2. to'rtburchak (img, (x, y), (x+w, y+h), (255, 0, 0), 2) hisoblash + = 1 # Olingan tasvirni cv2.imwrite ma'lumotlar to'plami papkasida saqlang ("ma'lumotlar to'plami/Foydalanuvchi." + Str (face_id) + '.' + Str (hisoblash) + ".jpg", kulrang [y: y +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # "ESC" tugmachasini bosing, agar k == 27: break elif count> = 30: # 30 ta yuz namunasini oling va videotasvirni to'xtating k print ("\ n [INFO] Dasturdan chiqish va tozalash ishlari") cam.release () cv2.destroyAllWindows ()

Bu vaqtda siz Pi -ga yostiq o'rnatganingizga ishonch hosil qiling. Agar yo'q bo'lsa, buyruqni bajaring:

yostiqni o'rnatish

Bu tugallangach, siz oxirgi skriptda ishlatiladigan.yaml faylini uzluksiz ta'minlaydigan o'quv skriptini (ikkinchi skript) ishga tushirishingiz mumkin

cv2import numpy -ni PIL -dan np -ga import qilish Rasmni import qilish os # Yuz tasvirining ma'lumotlar bazasi yo'li = 'ma'lumotlar bazasi' = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); getImagesAndLabels (yo'l) tasvir va yorliq ma'lumotlarini olish uchun # funktsiyasi: imagePaths = [os.path.join (yo'l, f) uchun f uchun os.listdir (yo'l)] faceSamples = idP = image [ImagePaths] uchun: PIL_img = Image.open (imagePath).convert ('L') # uni kul rangga aylantirish img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. split (".") [1]) yuzlar = detector.detectMultiScale (img_numpy) yuzlarida (x, y, w, h): faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Mashg'ulot yuzlari. Bir necha soniya kerak bo'ladi. Kutib turing …") yuzlar, ids = getImagesAndLabels (yo'l) tanib oluvchi.train (yuzlar, np.array (ids)) # Modelni murabbiy/trener.yml tanib oluvchisiga saqlang.write ('trainer/trainer.yml') # tanınuvchi.save () Macda ishlagan, lekin Pi # da o'qitilmagan yuzlar sonini chop eting va dasturni tugatishni tugating. ("\ n [INFO] {0} yuzlar o'rgatilgan. Dasturdan chiqmoqda". format (len (np.unique (ids)))))

Bu skriptlar to'plamining ajoyib tomoni shundaki, tizimga bir nechta yuzlarni kiritish mumkin, ya'ni agar xohlasangiz, bir nechta odam oynaning ichki qismiga kira oladi.

Pastda menda Data Capture skriptlari va o'quv skriptlari bor.

9 -qadam: yuzni aniqlash vaqti

Yuzni aniqlash vaqti
Yuzni aniqlash vaqti
Yuzni aniqlash vaqti
Yuzni aniqlash vaqti

Nihoyat, biz tanuvchi skriptni ishga tushirishimiz mumkin. Dvigatel jarayonining funktsional bo'lishi uchun ushbu skriptga ko'proq kod qo'shildi, shuning uchun men bu qismlarni batafsilroq tushuntiraman. Men uni bo'limlarga ajrataman, lekin agar siz shunday qilsangiz, butun skriptni qadam oxiriga qo'yaman.

Biz o'zimizga kerak bo'lgan barcha modullarni import qilishdan boshlaymiz va keyin GPIO rejimini GPIO. BCM ga o'rnatamiz

numpy ni np sifatida import qilish

import os import vaqti import RPi. GPIO GPIO sifatida GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM)

ControlPin deb nomlangan keyingi ro'yxat - bu bizning qadam dvigatelimiz uchun ishlatiladigan chiqish pimlarini ifodalovchi raqamlar to'plami.

ControlPin = [14, 15, 18, 23]

For-loop bu pinlarni Chiqish sifatida o'rnatadi va keyin ular o'chirilganligiga ishonch hosil qiladi. Menda tortmachani tugmachani bosib yopish uchun hali ham ba'zi kodlar bor, lekin men uning o'rniga taymerdan foydalanishga qaror qildim.

GPIO. sozlash (ControlPin , GPIO. OUT)

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

Keyingi ikkita o'zgaruvchi - bu dvigatelni boshqarish uchun ishlatiladigan ketma -ketliklar. Men bu ma'lumotni Gaven MakDonaldning ajoyib videotasviridan bilib oldim, uni ko'rib chiqishni tavsiya qilaman, chunki u nafaqat kodni, balki haqiqiy motorni ham chuqur o'rganadi (bu erda: https://www.youtube.com/embed/Dc16mKFA7Fo). Aslida, har bir ketma-ketlik OpenComp va closeComp funktsiyalarida joylashtirilgan for-looplar yordamida takrorlanadi. Agar siz diqqat bilan qarasangiz, seq2 faqat seq1 -ning aksi. Ha, siz taxmin qildingiz. Ulardan biri dvigatelni oldinga siljitish uchun, ikkinchisi - teskari.

seq1 =

seq2 =

OpenComp funktsiyasidan boshlab, biz 1024 marta takrorlanadigan for-loop yaratamiz. MacDonald's video 512 -ga ko'ra, takrorlanishlar dvigatelning to'liq aylanishini ta'minlaydi va men shuni bildimki, taxminan ikki marta aylanish yaxshi uzunlik edi, lekin uni odamning o'lchamiga qarab sozlash mumkin. Keyingi for-loop seq1 va seq2 da topilgan 8 ta massivni hisobga olish uchun 8 ta takrorlashdan iborat. Va nihoyat, oxirgi halqa bu massivlarning har birida topilgan to'rtta element uchun, shuningdek, dvigatelimiz ulangan 4 GPIO pinlari uchun to'rt marta takrorlanadi. Bu erdagi chiziq GPIO pinini tanlaydi va qaysi iteratsiya yoqilganiga qarab uni yoqadi yoki o'chiradi. Keyingi chiziq bufer vaqtini beradi, chunki bizning dvigatelimiz umuman aylanmaydi. Dvigatel tortmachani tashqariga chiqarish uchun aylangach, u 5 soniya uxlab qoladi. Bu vaqtni bu erda sozlash mumkin yoki siz taymerni emas, skriptni oldinga siljitish uchun tugmani ishlatishga imkon beradigan sharhlangan kodni yoqishingiz mumkin.

i uchun (1024):

yarim qadam uchun (8): pin oralig'ida (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'while True: if GPIO.input (2) == GPIO. LOW: break; '' 'time.sleep (5)

CloseComp funktsiyasi xuddi shunday ishlaydi. Dvigatel orqaga qaytganidan so'ng, biz hech qanday kuch sarflamasligimizga ishonch hosil qilish uchun oxirgi GPIO pinlarini past darajaga qo'yishni davom ettiramiz va keyin yana uch soniya vaqt qo'shamiz.

i uchun (1024):

yarim qadam uchun (8): pin oralig'ida (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)

Keyingi qismning asosiy qismi kamerani sozlash va yuzni aniqlashni boshlash uchun ishlatiladi. Shunga qaramay, MKRoBot ko'rsatmalari ko'proq qismlarga kiradi, lekin hozircha men faqat oynaga ishlatilgan qismlarni ko'rsataman.

Birinchidan, men ro'yxat nomlarini o'zgartirdim, shunda mening ismim ma'lumotlarni to'plashda men belgilagan indeksda edi (mening holatimda 1). Va keyin men qolgan qiymatlarni "Yo'q" ga qo'ydim, chunki menda ma'lumotlar to'plamida boshqa yuzlar yo'q edi.

ismlar = ['Hech kim', 'Doniyor', 'Hech kim', 'Hech kim', 'Hech kim', 'Hech kim']

Bizning oxirgi bir necha kod satrlari thicc for-loopda amalga oshiriladi. Ishonchni butun son sifatida saqlash uchun o'zgaruvchini yaratdim (intConfidence), o'zgarmaydigan ishonchni mag'lubiyatga aylantirilishidan oldin. Keyin men if-ifodasidan foydalanib, ishonchning 30 dan katta ekanligini va identifikator (kompyuter qaysi shaxs aniqlayotganini, bu holda "Doniyor") mening ismimga tengligini tekshiraman. Bu tasdiqlanganidan keyin openComp funktsiyasi chaqiriladi, u (avval aytib o'tilganidek) dvigatelni harakatga keltiradi, 5 soniyadan keyin ishga tushadi va keyin yopilish qismiga o'tadi, bu esa motorni teskari yo'nalishda harakatlantiradi va pastadir bilan ishlashdan oldin tozalashni amalga oshiradi.

agar intConfidence> 30 va id == 'Daniel' bo'lsa:

openComp () closeComp ()

Bu erda topilgan xato shundaki, ba'zida closeComp qaytgandan so'ng, kod davom etaveradi, lekin shartli if-iborasi buferda bo'lgan video tasmasini o'qiyotgandek yana to'g'ri bo'ladi. Garchi bu har doim ham ro'y bermasa ham, men hech qachon bunday bo'lmasligiga ishonch hosil qilishning yo'lini topmaganman, shuning uchun kimdir qandaydir fikrga ega bo'lsa, izohlarda menga xabar bering.

Mana, butun skript bir joyda (va uning ostida yuklab olish mumkin):

cv2 import qilish

import raqami np sifatida import qilish yoki import qilish vaqti RPi. GPIO ni GPIO sifatida qabul qilish GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] i uchun diapazonda (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.utput (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

10 -qadam: Pi -ni o'rnatish va dvigatelni ulash

Pi o'rnatish va dvigatelni ulash
Pi o'rnatish va dvigatelni ulash
Pi o'rnatish va dvigatelni ulash
Pi o'rnatish va dvigatelni ulash
Pi o'rnatish va dvigatelni ulash
Pi o'rnatish va dvigatelni ulash

Raspberry Pi -ni ramkaga o'rnatish juda oddiy edi. Men 90 graduslik kichkina tirsak yasadim, uning bir yuzida teshik, ikkinchi tomoni esa butunlay tekis. 3D chop etilgandan so'ng, ularning ikkitasini Raspberry Pi -ga o'rnatish teshiklariga vintlar bilan ulash mumkin (men GPIO pinlarining har ikki tomonidagi ikkita teshikdan foydalanganman).

Keyin men 3D bosilgan tirsaklarning qarama -qarshi yuzlarida super yopishtiruvchi vositani ishlatib, Pi ustidagi tortmasining tepasida yopishtirdim. Yelimni quritgandan so'ng, men ikkita vint yordamida Pi -ni oddiy va qulay tarzda olib tashladim yoki o'zgartira oldim. Menda pastda bog'langan tirsak uchun.stl bor.

Dvigatel drayverini mos ravishda GPI 14, 15, 18, 23 ga mos keladigan IN1, IN2, IN3, IN4 bilan PI ga ulang. Nihoyat, nazorat kartasining 5v va topraklama pimlarini 5v chiqish va topraklama pinlariga ulang.

Bu erda ba'zi ma'lumot olish uchun Pi's Pinout havolasi:

11 -qadam: kamerani o'rnatish

Kamerani o'rnatish
Kamerani o'rnatish
Kamerani o'rnatish
Kamerani o'rnatish
Kamerani o'rnatish
Kamerani o'rnatish

Kamerani o'rnatish Pi -ga qaraganda bir oz kuchliroq edi, lekin bu usul ishni tugatdi. Har bir uchida 2 teshikli ingichka nurni loyihalash va chop etgandan so'ng, uni Rasberry Pi -ga o'rnatish teshigi orqali bog'ladim. Keyin kamerani boshqa vint bilan nurning qarama -qarshi uchiga mahkamlang. Ta-da! Ajoyib pashshaga o'xshaydi.

12-qadam: tortma-harakat mexanizmini yaratish va o'rnatish

Shkaf-harakatlanuvchi mexanizmni yaratish va o'rnatish
Shkaf-harakatlanuvchi mexanizmni yaratish va o'rnatish
Shkaf-harakatlanuvchi mexanizmni yaratish va o'rnatish
Shkaf-harakatlanuvchi mexanizmni yaratish va o'rnatish
Shkaf-harakatlanuvchi mexanizmni yaratish va o'rnatish
Shkaf-harakatlanuvchi mexanizmni yaratish va o'rnatish

Ishlab chiqaruvchilar jamoasining xayrli sovg'alari tufayli bu qadam oson bo'ldi. Thingiverse -da tezkor qidiruvdan so'ng men TucksProjects tomonidan yaratilgan chiziqli aktuatorni topdim (bu erda: https://www.thingiverse.com/thing:2987762). Qolgan narsa, uni SD -kartaga urish va printerni ishlashiga ruxsat berish edi.

Men Fusion 360 -ga kirishni tugatdim va dastani tahrir qildim, chunki mening dvigatelimning o'qi TucksProjects tomonidan ishlab chiqarilganga juda katta edi. Buning uchun quyida.stl bor. Chop etish tugagandan so'ng, biz uni dvigatel miliga o'rnatish orqali yig'ishimiz kerak, so'ngra dvigatel va korpus tomonlarini 2 vint bilan mahkamlashimiz kerak (tokchani yopishdan oldin orasiga qo'yganingizga ishonch hosil qiling). Men tortma va ramka orasiga to'g'ri kelishi uchun tokchadan bir dyuym kesib olishimga to'g'ri keldi.

Endi mexanizmni ramka va tortmasiga mahkamlashgina qoldi. "Qanday qilib tIsni qilamiz?" Siz so'raysiz … ha, men bilan ayting: Super elim. Yuqoridagi rasmlarda ko'rsatilgandek, mexanizmni ramkaning pastki qismiga qo'ying va tortma siljigan yog'och bo'lagiga tepaga surib qo'ying. Bu erda siz rafni/mexanizmni iloji boricha ramkaga parallel ravishda olishga harakat qilishingiz juda muhim, chunki mexanizm harakatlanayotganda tortmasini burchakka emas, to'g'ri itaradi. Yelim quriganidan so'ng, taglikning chetiga yana bir oz elim qo'ying va tortmani joyiga qo'ying va quriting. Tugallangach, maxfiy tortmasimizni ichkariga va tashqariga surish uchun mustahkam mexanizmga ega bo'lamiz.

13 -qadam: Oyna ortiga karton qo'shish

Oyna ortiga karton qo'shish
Oyna ortiga karton qo'shish
Oyna ortiga karton qo'shish
Oyna ortiga karton qo'shish
Oyna ortiga karton qo'shish
Oyna ortiga karton qo'shish

Bu ikki tomonlama filmni oynaga o'xshatib qo'yish uchun, kartonni oynaning orqasiga joylashtirish maqsadga muvofiq ekanligini ko'rdim. Amaldagi karton - bu ramka bilan birga kelgan, lekin kesish uchun har qanday bo'lak ishlaydi. Bu, shuningdek, kameraning LEDidan, dvigatelni boshqarish moslamasidan yoki oynaning boshqa tomonida joylashgan Pi -dan yorug'lik kelmasligini ta'minlaydi. Hamma narsa joyida bo'lsa, kartonda kamera qayerda joylashganini belgilash uchun qalamdan foydalaning. Keyin to'rtburchaklar kesish uchun ustara ishlating, shunda kamera o'z joyida ko'zdan kechiriladi.

14 -qadam: Yakuniy qismni qo'yish

Yakuniy qismni qo'yish
Yakuniy qismni qo'yish
Yakuniy qismni qo'yish
Yakuniy qismni qo'yish

Oxirgi narsa - ilgari ajratilgan tortmasining old qismini qo'yish. Dvigatelni tortmasining chiqib ketishi uchun harakatlantiring. So'ngra, tortma qismi o'rtada bo'lishi uchun old qismini yopishtiring (har tomondan ozgina osilgan bo'lishi kerak. Keyin devorga osib qo'yishingiz mumkin.

15 -qadam: Final

Final
Final
Final
Final

Mana sizda! Bir nechta yaxshilanishlar bo'lishi mumkin, masalan, tugmachani qo'shish, yaxshiroq ikki tomonlama film sotib olish va koddagi xatoni tuzatish, lekin umuman olganda, bu ishni bajaradi: u oynaga o'xshaydi, u oldindan belgilanganini taniydi. Foydalanuvchining yuzi va u yoqimli kichkina tortmasini ochadi. Har doimgidek, men sizning fikrlaringizni, savollaringizni va xotiralaringizni pastdagi izohlarda eshitishni xohlardim.

Umumiy reyting: 10/10

Sharhlar: #Yana urinmayman … agar men bu ko'rsatmaga amal qilmasam;)

Maxfiy bo'lim tanlovi
Maxfiy bo'lim tanlovi
Maxfiy bo'lim tanlovi
Maxfiy bo'lim tanlovi

Maxfiy bo'linma tanlovida bosh mukofot

Tavsiya: