Mundarija:
- Ta'minotlar
- 1 -qadam: quti ramkasi uchun kesmalar
- 2 -qadam: tortmasining kesilishi
- 3 -qadam: ramkani birlashtirish
- 4 -qadam: Oyna uchun
- 5 -qadam: Raspbian Stretch -ni o'rnating
- 6 -qadam: OpenCV -ni o'rnating
- 7 -qadam: Kamerani yoqish/sinovdan o'tkazish
- 8 -qadam: Ma'lumot yig'ish va o'quv ma'lumotlari
- 9 -qadam: yuzni aniqlash vaqti
- 10 -qadam: Pi -ni o'rnatish va dvigatelni ulash
- 11 -qadam: kamerani o'rnatish
- 12-qadam: tortma-harakat mexanizmini yaratish va o'rnatish
- 13 -qadam: Oyna ortiga karton qo'shish
- 14 -qadam: Yakuniy qismni qo'yish
- 15 -qadam: Final
Video: Yashirin bo'linma bilan yuzni aniqlash oynasi: 15 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
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
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
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
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
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
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
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
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
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 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
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
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
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
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'linma tanlovida bosh mukofot
Tavsiya:
Yuzni aniqlash va aniqlash - OpenCV Python va Arduino yordamida Arduino Face ID: 6 qadam
Yuzni aniqlash va aniqlash | OpenCV Python va Arduino yordamida Arduino Face ID: yuzni aniqlash AKA yuz identifikatori hozirgi vaqtda mobil telefonlarning eng muhim xususiyatlaridan biridir. Shunday qilib, menda "Arduino loyihasi uchun yuz identifikatori bo'lishi mumkinmi?" Degan savol bor edi. va javob ha … Mening sayohatim quyidagicha boshlandi: 1 -qadam: Bizga kirish
Yuzni kuzatish va tabassum Halloween robotlarini aniqlash: 8 qadam (rasmlar bilan)
Yuzni kuzatish va tabassum Halloween robotlarini aniqlaydi: Xellouin keladi! Biz ajoyib narsa qurishga qaror qildik. Ghosty va Skully robotlari bilan tanishing. Ular sizning yuzingizga ergashishi mumkin va siz qachon kulayotganingizni bilishadi! Bu loyiha iPhone -ni o'zgartiradigan iRobbie ilovasidan foydalanishning yana bir misolidir
Raspberry Pi bilan muzlatgich uchun yuzni aniqlash tizimi: 7 qadam (rasmlar bilan)
Raspberry Pi bilan muzlatgich uchun yuzni aniqlash xavfsizligi tizimi: Internetni ko'zdan kechirish shuni ko'rsatdiki, xavfsizlik tizimlarining narxi 150 dollardan 600 dollargacha va undan yuqori, lekin hamma echimlar (hatto juda qimmatlari ham) boshqalari bilan birlashtirilishi mumkin emas. uyingizda aqlli asboblar! Masalan, siz o'rnatolmaysiz
Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha: 8 qadam (rasmlar bilan)
Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha: OpenCV-ni o'rganish bo'yicha oxirgi darsimda biz Vizyonning avtomatik kuzatilishini o'rgandik. Endi biz PiCam-dan foydalanib, yuzlarni real vaqtda taniy olamiz, quyida ko'rib turganingizdek: Ushbu loyiha "Ochiq manbali kompyuter ko'rish kutubxonasi" yordamida amalga oshirildi
Yuzni aniqlash+tanib olish: 8 qadam (rasmlar bilan)
Yuzni aniqlash+tanib olish: Bu kameradan OpenCV yordamida yuzni aniqlash va tanib olishning oddiy namunasidir. ESLATMA: Men bu loyihani sensorlar musobaqasi uchun tayyorladim va kamerani sezish sensori sifatida ishlatdim, shuning uchun bizning maqsadimiz, bu sessiyada, 1. Anaconda -ni o'rnating