Mündəricat:

Gizli bölmə ilə üz tanıma aynası: 15 addım (şəkillərlə)
Gizli bölmə ilə üz tanıma aynası: 15 addım (şəkillərlə)

Video: Gizli bölmə ilə üz tanıma aynası: 15 addım (şəkillərlə)

Video: Gizli bölmə ilə üz tanıma aynası: 15 addım (şəkillərlə)
Video: Hansı oğlanlar qızların ağlını başından alır? #ilişkiler #kadınerkekilişkileri #ilişkikoçu 2024, Iyul
Anonim
Gizli Bölmə ilə Üz Tanıma Güzgüsü
Gizli Bölmə ilə Üz Tanıma Güzgüsü
Gizli Bölmə ilə Üz Tanıma Güzgüsü
Gizli Bölmə ilə Üz Tanıma Güzgüsü
Gizli Bölmə ilə Üz Tanıma Güzgüsü
Gizli Bölmə ilə Üz Tanıma Güzgüsü

Həmişə hekayələrdə, filmlərdə və sairdə istifadə olunan yaradıcı gizli bölmələr məni maraqlandırdı. Beləliklə, Gizli Bölmə Yarışmasını gördükdə bu fikri özüm sınamağa və doğru adam baxanda gizli bir yan çekmece açan adi görünüşlü bir güzgü düzəltməyə qərar verdim.

Bir Raspberry Pi, python proqramlaşdırma və 8-ci sinif mağaza sinifindən istifadə edərək, yalnız düzgün istifadəçinin əldə edə biləcəyi obyektləri aydın şəkildə gizlətmək üçün bu spiffy cihazı yarada bilərik.

Məlumat və mənbələrimi əldə etdiyim bu insanlara/platformalara xüsusi təşəkkürümü bildirmək istəyirəm:

TeCoEd - Youtube kanalı

PiMyLifeUp -dan Emmet

Hackster.io -da MJRoBot (profil)

Gaven MacDonald - Youtube kanalı

Tucker Shannon Thingiverse -də (profil)

Təchizat

Çərçivə təchizatı:

  • Taxta taxta (Bu lövhənin ölçüləri 5/16 "ilə 42" 7,5 ")
  • Qələm Şəkil Çərçivəsi (şüşə ilə)
  • Sprey boya
  • Tek Yönlü Yansıtıcı Yapışqan
  • Şüşə təmizləyici və bez
  • MDF ağac

Üz Tanıma Təchizatları:

  • Raspberry Pi (Pi 3 B+ istifadə etdim, amma başqa variantlar var)
  • Kamera Modulu
  • Step Motor

Alətlər:

  • Masa Testeresi
  • Jig Saw
  • Zımpara ağac
  • GlueTape
  • Ölçmək
  • Qayçı
  • Sprey Şüşəsi
  • 3D printer
  • Super yapışqan

Addım 1: Qutu Çərçivəsi üçün kəsiklər

Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər
Qutu çərçivəsi üçün kəsiklər

İkinci əl mağazadan bir şəkil çərçivəsi aldım. Sadəcə bir xəbərdarlıq, çərçivəni təşkil edən taxtaların ən az 1 1/2 enində olduğundan əmin olun. Bunun sayəsində işləmək üçün kifayət qədər yer olan digər taxta lövhələri yapışdıra bilərsiniz. Ayrıca, şüşənin içəridə olduğundan əmin olun. Çərçivə tamamilə aydındır. Mən təsadüfən donmuş birini aldım və sonra yalnız şəffaf şüşə üçün başqa bir çərçivə almalı oldum. Çərçivəm istifadə edildiyindən qutu çərçivəsinin ölçüləri dəyişə bilər.

  • Çərçivəni portret istiqamətə qoyun. Çərçivədəki şüşə dəlik tərəfinin uzun tərəflərini (LS) həm yuxarı, həm də alt hissədə əlavə olaraq ölçün. (yəni şüşə dəlik ölçüsünün uzun tərəfinə bir düym əlavə edin. Bunu qeyd edin və LSM (Uzun Yan Ölçmə) yazın.
  • Eynilə, çuxurun yuxarı tərəfini ölçün və əlavə 1”əlavə edin. Bunu qeyd edin və SSM (Qısa Yan Ölçmə) yazın.
  • Lövhənizi alın və bir masa mişarı ilə iki LSM x 2 "və iki SSM x 2" kəsin.
  • LSM kəsiklərindən birini götürün və aşağıdan 1 "və sol və sağdan ½" olan 2 "x1" düzbucaqlı ölçün (şəkil 3 -də göstərildiyi kimi).
  • Deliyi kəsmək üçün bir yapboz istifadə edin. Sonra kənarları zımpara ilə zımpara ilə istifadə edin.

Addım 2: Çekmece üçün kəsiklər

Çekmece üçün kəsiklər
Çekmece üçün kəsiklər
Çekmece üçün kəsiklər
Çekmece üçün kəsiklər
Çekmece üçün kəsiklər
Çekmece üçün kəsiklər
Çekmece üçün kəsiklər
Çekmece üçün kəsiklər

İndi çekmece (gizli bölmə) qurmağa başlayacağıq.

  • İki 4”x 1” tərəfi, 3 ⅜”x 1” (arxa kənar), 4 ¼”x 1 ¼” (ön kənar) və 4”x 3 ⅜” (platforma) kəsin.
  • İlk 4 "x 1" tərəfi platformanın 4 "tərəfi boyunca yapışdırın. Platformanın altına bir neçə qatlanmış kağız qoydum ki, bir qədər qaldırılsın, beləliklə LS taxtasında kəsdiyim çuxura sürüklənməsin. 30 dəqiqə qurudun.
  • Eynilə, 3 "x 1" ölçüsünü platformanın 3 "düym kənarına yapışdırın. 30 dəqiqə qurudun. Sonra ikinci 4 "x 1" tərəfini birincinin əks tərəfinə yapışdırın. 30 dəqiqə qurudun.
  • Hələlik ön kənarını kənara qoyun. Çekmece üzərinə yapışdırılan son şey olacaq.
  • Bitirdikdə, LSM taxtasına yapışdırdığınız çuxura uyğun olub olmadığını yoxlayın. Əks təqdirdə, çekmece asanlıqla içəri girib çıxana qədər çuxuru zımpara edin və heç bir sürüklənmə yoxdur.

Addım 3: Çərçivəni bir araya gətirmək

Çərçivəni bir araya gətirmək
Çərçivəni bir araya gətirmək
Çərçivəni bir araya gətirmək
Çərçivəni bir araya gətirmək
Çərçivəni bir araya gətirmək
Çərçivəni bir araya gətirmək

Bütün hissələri tamamladıqdan sonra çərçivənin bütün hissəsini yığmağa başlaya bilərik.

  • Hər tərəfində ½”olan şüşə çuxur ilə ortalanmış LSM taxtasını yapışdırın. Delikdən ½”məsafədə yapışdırıldığından əmin olun (şəkil 1 -də göstərildiyi kimi). 30 dəqiqə qurudun.
  • İlk SSM taxtasını kənarı yeni yapışdırılmış LSM taxtanın içərisinə toxunaraq yapışdırın. (Düz bir şəkildə yapışdırıldığından əmin olmaq üçün bir hökmdar istifadə edin). 30 dəqiqə qurudun.
  • Digər LSM tərəfini götürün və birincisinə bənzər yapışdırın. Çuxurdan ½”məsafədə olduğundan və yeni bağlandığı SSM -nin taxtanın içərisinə yapışdırıldığından əmin olun. 30 dəqiqə qurudun.
  • Son SSM -ni üst kənarına yapışdırın. Hər iki tərəfdə iki LSM olduğundan, nə qədər düz bağladığınızdan asılı olaraq, uyğun olduğundan əmin olmaq üçün SSM -nin kənarlarını zımpara etməyiniz lazım ola bilər (kəsmə bəzən sönür). 30 dəqiqə qurudun.
  • Çekmecenin alt hissəsi ilə çərçivə arasındakı kiçik boşluğu ölçün. Bu ölçü ilə MDF ağacından 4 düym kəsin. Bu parçanı çekmece yaxınlaşdırmaq istəyirsiniz, ancaq ona toxunmur. Bu, sürtünməni minimum sürtünmə ilə dəstəkləmək üçündür.
  • Bütün işlər bitdikdə, bütün parçaları uyğunlaşdırmaq üçün çərçivəni boyadım.

Addım 4: Güzgü üçün

Güzgü üçün
Güzgü üçün
Güzgü üçün
Güzgü üçün
Güzgü üçün
Güzgü üçün
Güzgü üçün
Güzgü üçün

Amazon-dan aldığım bir tərəfli film yapışdırıcısı təxminən 10 dollar idi. Maraqlandığınız təqdirdə bir az daha bahalı olan daha keyfiyyətli olanlar var. İstifadə etdiyim əks etdirir, amma deyə bilərsiniz ki, bu evdə gördüyünüz adi bir güzgü deyil. Daha bahalı olanlar sizə belə bir görünüş bəxş edəcək.

  • Şüşəni hər iki tərəfdən şüşə təmizləyici ilə təmizləyin.
  • Bir tərəfli yapışdırıcıyı açın və şüşəni üstünə qoyun. Şüşənin hər tərəfində ən azı ½”artıqlıq olması üçün yapışqanı kəsin.
  • Şüşəni kənara qoyun və bir tərəfini su ilə isladın. Sonra plastik örtüyü bir tərəfli yapışqandan ayırın və yeni açılan tərəfə su tökün.
  • Şüşənin yaş tərəfini yapışqanın yaş tərəfinə qoyun. 30 dəqiqə oturun.
  • Çevirin və baş barmağınızla yapışqan və şüşə arasındakı baloncukları düzəldin. Sonra kənarlardan artıq yapışqan kəsin.

Addım 5: Raspbian Stretch quraşdırın

İlk dəfədir ki, Raspberry Pi mühitinə girirəm və OS -nin necə qurulacağına dair təlimat axtarmağa başladım. Nəhayət, Stretch -in SD karta quraşdırılması prosesindən keçən TeCoEd tərəfindən Youtube -da sadə bir dərslik tapdım (olduqca sevimli bir girişlə). Budur bu təlimatın bağlantısı:

Əslində, etməniz lazım olan hər şey:

  • Sürücü >> Sürücü Alətləri >> Formatı seçərək SD kartı format edin. Raspian Stretch üçün ZIP faylını yükləyin (burada tapa bilərsiniz:
  • OS görüntüsünü SD Karta yandırın. TeCoEd bunu başa çatdırmaq üçün Win32 Disk Imager istifadə etdi. Bir az daha sadə görünən balenaEtcher qurdum. (Budur balenaEtcher üçün yükləmə linki:
  • Bir dəfə balenaEtcher -də "Fayldan Flash" seçin və əvvəllər yüklənmiş ZIP faylını seçin. Sonra, istədiyiniz SD kartı seçin (avtomatik olaraq seçilmirsə). Sonra şirəli flaş düyməsini vurun və sehrin olmasını gözləyin.

SD karta quraşdırıldıqdan sonra onu Raspberry Pi -yə daxil edə və ümumi Pi qurma prosesindən keçə bilərsiniz.

Addım 6: OpenCV quraşdırın

İndi üz-tanıma yönümlü hissələrə keçək. Üzləri tanımaq üçün kompüter görmə qabiliyyəti ilə işləmək üçün çoxlu vasitələr olan OpenCV kitabxanasını yükləməliyik.

OpenCV qurmaq mənim üçün proqram aspektinin ən çətin hissəsi idi. Ancaq çoxsaylı təlimatları izlədikdən sonra nəhayət PiMyLifeUp-dan Emmet tərəfindən bir təlimat tapdım ki, burada hiylə işlədim:

Bu addımları keçməyəcəyəm, çünki bunları linkdən izləmək daha uyğun olacaq (verilən izahatlar və saytdan daha rahat şəkildə kopyalayıb yapışdırmaq qabiliyyəti ilə).

Addım 7: Kameranı aktiv edin/sınayın

Kameranı aktiv edin/sınayın
Kameranı aktiv edin/sınayın
Kameranı aktiv edin/sınayın
Kameranı aktiv edin/sınayın

OpenCV yüklədikdən sonra səyahətimin qalan hissəsi Hackster.io-da MJRoBot tərəfindən hazırlanmış bir təlimatla tamamlandı:

Başlamazdan əvvəl xatırlatmaq istərdim ki, mən bu skriptlərin əsl yaradıcısı deyiləm, amma sonunda onların hissələrini dəyişdirmişəm.

Başlamaq üçün kameranı sınamalıyıq ki, ekranda video çəkə bilək. Təxminən bir saat MJRoBotun Adım 3 -də verilən ssenarini işə salmağa çalışdım. Həyatın istədiyi kimi, Raspberry Pi üzərindəki kameranı işə salmalıyıq (verilən təlimatları oxumaq yaxşı bir fikir ola bilər … mmm nah). Kameranı düzgün porta bağladıqdan sonra aşağıdakı adımları yerinə yetirin:

  • Komanda terminalını açın və sudo raspi-config yazın
  • "Kameranı aktiv et" seçin (bunu bir cihaz seçimində tapa bilərsiniz)
  • "Daxil et" düyməsini basın
  • "Bitir" ə gedin və yenidən başlamanız istənəcək

Sonra bu addımları izləyin:

  • Moruqun əsas menyusuna gedin (yuxarı solda)
  • Tərcihlər
  • Raspberry Pi Konfiqurasiyası
  • İnterfeyslər
  • Sonra Kamerada "Aktiv" seçin.
  • Sonra "OK"

İndi kameranı sınamaq üçün bu skripti MJRoBot dərsliyindən uğurla işlədə bilməlisiniz (unutmayın ki, bütün bu kod və daha dərindən bir təsvir yuxarıda MJRobot təlimatına verilən linkdə tapılmışdır):

np kimi numpy idxal edin

cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set En Genişlik cap.set (4, 480) # set Height while (Doğru): ret, frame = cap.read () frame = cv2. çevir (çərçivə, -1) # Kameranı dikey olaraq çevir boz = cv2.cvtColor (çərçivə, cv2. COLOR_BGR2GRAY) cv2.imshow ('çərçivə', çərçivə) cv2.imshow ('boz', boz) k = cv2.waitKey (30) & 0xff if k == 27: # break cap -dən çıxmaq üçün 'ESC' düyməsinə basın.release () cv2.destroyAllWindows ()

Əvvəlki kodda biri rəngli, biri də boz rəngli iki pəncərə göstərilməlidir. Bu günə qədər uğur qazansan, gözəl bir sendviçə layiq olduğunu düşünürəm.

Addım 8: Məlumat və Təlim Məlumatlarının Toplanması

Məlumat və Təlim Məlumatlarının Toplanması
Məlumat və Təlim Məlumatlarının Toplanması
Məlumat və Təlim Məlumatlarının Toplanması
Məlumat və Təlim Məlumatlarının Toplanması
Məlumat və Təlim Məlumatlarının Toplanması
Məlumat və Təlim Məlumatlarının Toplanması

Təqdim olunan dərslikdə müəllif tezliklə veriləcək kodun prosesləri haqqında daha çox dərinə gedir, lakin bunlar bu güzgünün necə hazırlandığına dair təlimat olduğu üçün nə tarixə, nə də mürəkkəb mexanikaya girməyəcəyəm. Ömrünüzün bir ayını bu iki şey haqqında oxumağı məsləhət görürəm, çünki bunlar zehninizə yaxşı xidmət edə bilər.

Bütün bunların işləməsinə başlamazdan əvvəl işləməsi üçün təxminən üç skript daha var. Birincisi məlumat toplamaq üçün, ikincisi onu öyrətmək üçün və sonuncusu əslində tanınmaq üçündür. Məlumat toplamaq üçün üzün həqiqi şəkillərinin çəkilməsi və təlim üçün xüsusi bir yerdə saxlanılması tələb olunur. Bu kodun yaradıcısı bütün bunları etməyi çox asanlaşdırdı, buna görə baş ağrısından qaçmaq üçün bu təlimatları izləməyi məsləhət görürəm.

Bir əmr satırını açın və əyləncəli bir şey adlandıran yeni bir qovluq yaradın (özümə FaceRec deyirdim)

mkdir FaceRec

İndi qovluğu FaceRec olaraq dəyişdirin və bir verilənlər bazası adlandırdığınızdan əmin olun

cd FaceRec

mkdir verilənlər bazası

Hazır olduğumuz müddətdə digər alt dizini də məşqçi edə bilərik

mkdir məşqçi

İndi istifadəçinin şəkillərini çəkəcək ilk skriptin göstərişlərini işlədə və izləyə bilərsiniz. (Yalnız bir xəbərdarlıq, istifadəçi kimliyini 1, 2, 3 və s. Daxil etdiyinizə əmin olun.)

cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # video genişliyi cam.set (4, 480) # video yüksəkliyini təyin face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Hər biri üçün şəxs, bir ədəd rəqəm üzü daxil edin face_id = giriş ('\ n istifadəçi id nömrəsini daxil edin ==>') yazdırın ("\ n [BİLGİ] Üz tutma işə salınır. Kameraya baxın və gözləyin…") # Fərdi nümunə götürmə üz sayını başladın count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # video görüntüsünü dikey olaraq çevir boz = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) üzlər = face_detector.detectMultiScale (boz, 1.3, 5) (x, y, w, h) üzlərində: cv2. dikdörtgen (img, (x, y), (x+w, y+h), (255, 0, 0), 2) say + = 1 # Çəkilən görüntünü cv2.imwrite ("verilənlər bazası/İstifadəçi." + Str (face_id) + '.' + Str (say) + ".jpg", boz [y: y +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # k == 27: break elif count> = 30 olduqda videodan çıxmaq üçün 'ESC' düyməsini basın.: # 30 üz nümunəsi alın və video brea dayandırın k print ("\ n [INFO] Proqramdan çıxmaq və təmizləmə işləri") cam.release () cv2.destroyAllWindows ()

Bu nöqtədə Pi üzərində yastıq quraşdırdığınızdan əmin olun. Əks təqdirdə, əmri işlədin:

yastığı quraşdırın

Tamamlandıqdan sonra, son skriptdə istifadə ediləcək.yaml faylı ilə təmin edəcək təlim skriptini (ikinci skript) işlədə bilərsiniz

cv2import numpy -ni nil olaraq PIL -dən idxal edin Şəkil idxal os # Yol görüntüsü verilənlər bazası yolu = 'veri' tanıyıcısı = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); şəkilləri və etiket məlumatlarını əldə etmək üçün # funksiyası getImagesAndLabels (yol): imagePaths = [os.path.join (yol, f) in f in os.listdir (yol)] faceSamples = idP = imagePath üçün imagePath üçün: PIL_img = Image.open (imagePath).convert ('L') # boz rəngə çevirin img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. split (".") [1]) üz = detector.detectMultiScale (img_numpy) (x, y, w, h) üçün: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Təlim üzləri. Bir neçə saniyə çəkəcək. Gözləyin…") üzlər, ids = getImagesAndLabels (yol) tanıyıcı.train (üzlər, np.array (ids)) # Modeli təlimçi/təlimçi.yml tanıyıcıya yazın. yazın ('məşqçi/məşqçi.yml') # tanıyıcı.save () Mac -da çalışdı, amma Pi -də deyil ("\ n [INFO] {0} üzləri təlim keçdi. Proqramdan çıxılır". format (len (np.unique (ids)))))

Bu skript dəstinin ən gözəl tərəfi odur ki, sistemə birdən çox şəxs daxil edilə bilər, yəni birdən çox insanın istədiyi təqdirdə güzgü içərisinə daxil ola bilər.

Aşağıda Data Capture skriptini və Təlim skriptini yükləyə bilərəm.

Addım 9: Üz Tanıma Zamanı

Üz Tanıma Zamanı
Üz Tanıma Zamanı
Üz Tanıma Zamanı
Üz Tanıma Zamanı

Nəhayət, tanıma skriptini işlədə bilərik. Motor prosesinin işləməsini təmin etmək üçün bu skriptə daha çox kod əlavə edildi, buna görə də bu hissələri bir az daha ətraflı izah edəcəyəm. Bunu hissələrə ayıracağam, amma ardınca getdiyiniz təqdirdə bütün ssenarini addımın sonuna qoyacağam.

Ehtiyac duyduğumuz bütün modulları idxal edərək və sonra GPIO rejimini GPIO. BCM olaraq təyin edərək başlayacağıq

np kimi numpy idxal edin

idxal os idxal vaxtı RPi. GPIO -nu GPIO olaraq daxil edin GPIO.setwarnings (Yanlış) GPIO.setmode (GPIO. BCM)

ControlPin adlı bu növbəti siyahı, step motorumuz üçün istifadə ediləcək çıxış pinlərini təmsil edən bir sıra ədədlərdir.

ControlPin = [14, 15, 18, 23]

For-loop bu pinləri Çıxış olaraq təyin edir və sonra söndürüldüyünə əmin olur. Çekmeceyi bir düyməyə basmaqla bağlamaq üçün burada hələ də kodum var, amma bunun əvəzinə taymerdən istifadə etmək qərarına gəldim.

GPIO.setup (ControlPin , GPIO. OUT)

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

Növbəti iki dəyişən motoru idarə etmək üçün istifadə edəcəyimiz ardıcıllıqlardır. Bu məlumatı Gaven MacDonald tərəfindən yalnız kodu deyil, həm də əsl motoru dərindən araşdırdıqda izləməyi tövsiyə etdiyim gözəl bir videodan öyrəndim (burada tapa bilərsiniz: https://www.youtube.com/embed/Dc16mKFA7Fo). Əslində, hər bir ardıcıllıq, qarşıdakı openComp və closeComp funksiyalarında yuvalanmış for-loops istifadə edərək təkrarlanacaq. Diqqətlə baxsanız, seq2 seq1 -in tam əksidir. Bəli, təxmin etdiniz. Biri motoru irəli aparmaq üçün, digəri isə tərs üçün.

seq1 =

seq2 =

OpenComp funksiyamızdan başlayaraq 1024 dəfə təkrar edəcək bir döngə yaradırıq. MacDonald's videosuna görə 512 təkrarlamaları, motorun tam fırlanmasını təmin edərdi və təxminən iki dönmənin yaxşı bir uzunluq olduğunu gördüm, ancaq fərdin ölçüsündən asılı olaraq tənzimlənə bilər. Növbəti for-loop, seq1 və seq2-də tapılan 8 massivi hesablamaq üçün 8 təkrarlamadan ibarətdir. Və nəhayət, son döngə, bu serialların hər birində olan dörd element və motorumuzun bağlı olduğu 4 GPIO sancağı üçün dörd dəfə təkrarlanır. Buradakı xətt GPIO pinini seçir və sonra hansı iterasiyasına bağlı olaraq onu açır və ya söndürür. Sonrakı xətt, mühərrikimizin ümumiyyətlə dönməməsi üçün bir az tampon vaxt verir. Motor çekmeceyi çıxarmaq üçün döndükdən sonra hərəkət etməzdən əvvəl 5 saniyə yatır. Bu vaxt burada tənzimlənə bilər və ya bir taymeri deyil, skriptlə irəli aparmaq üçün bir düyməni istifadə etməyə imkan verən şərh edilmiş kodu aktivləşdirə bilərsiniz.

i üçündür (1024):

yarım aralığında (8): aralığındakı pin üçün (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'True while: GPIO.input (2) == GPIO. LOW: break; '' 'time.sleep (5)

CloseComp funksiyası oxşar şəkildə işləyir. Mühərrik geri çəkildikdən sonra heç bir enerji itirmədiyimizdən əmin olmaq üçün son GPIO pinlərimizi aşağı səviyyəyə qoymağa davam edirəm və sonra davam etməzdən əvvəl üç saniyə daha vaxt əlavə edirəm.

i üçündür (1024):

yarım addım üçün (8): aralığdakı pin üçün (4): GPIO.output (ControlPin [pin], seq2 [halfstep] [pin]) time.sleep (.001) print ("Compartment Closed") GPIO.output (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) vaxt.yuxu (3)

Növbəti hissənin böyük hissəsi kameranı qurmaq və üz tanıma işinə başlamaq üçün istifadə olunur. Yenə də MKRoBotun təlimatları daha çox hissələrə aiddir, amma hələlik yalnız güzgü üçün istifadə olunan hissələri göstərirəm.

Əvvəlcə siyahı adlarını dəyişdirdim ki, adım məlumatları toplayarkən təyin etdiyim indeksdə olsun (mənim vəziyyətim 1). Və sonra, dəyərlərin qalan hissəsini None olaraq təyin etdim, çünki verilənlər bazasında artıq üzlərim yox idi.

adlar = ['Heç biri', 'Daniel', 'Heç biri', 'Heç biri', 'Heç biri', 'Heç biri']

Son bir neçə kod satırımız thicc for-loopda tətbiq olunur. Dəyişən güvən bir sətrə çevrilməzdən əvvəl inamı bir tamsayı (intConfidence) olaraq saxlamaq üçün bir dəyişən yaratdım. Sonra inamın 30-dan böyük olub olmadığını və şəxsiyyətin (kompüterin hansı şəxs tərəfindən aşkarlandığını, bu halda "Daniel") mənim adımla bərabər olub olmadığını yoxlamaq üçün if-ifadəsindən istifadə edirəm. Bu təsdiq edildikdən sonra (əvvəl izah edildiyi kimi) motoru hərəkətə gətirən, 5 saniyədən sonra işə başlayan və sonra mühərriki əks istiqamətdə hərəkət etdirən və thicc loopuna davam etməzdən əvvəl bir qədər təmizlənən openComp funksiyası çağırılır.

intConfidence> 30 və id == 'Daniel' olarsa:

openComp () closeComp ()

Burada tapdığım bir səhv, bəzən closeComp geri qayıtdıqdan sonra kodun davam etməsidir, ancaq şərti if ifadəsinin hələ də tamponda olan video lentini oxuduğu kimi yenidən doğru olduğu aşkarlanır. Hər dəfə baş verməsə də, heç vaxt olmamasını təmin etmək üçün bir yol tapmamışam, buna görə hər hansı bir fikri olan varsa şərhlərdə mənə bildir.

Budur bütün skript bir yerdə (və bunun altında yüklənə bilər):

idxal cv2

np kimi idxal edin və ya idxal edin idxal vaxtı GPP GPIO olaraq daxil edin (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

Addım 10: Pi -nin quraşdırılması və motorun bağlanması

Pi -nin quraşdırılması və motorun bağlanması
Pi -nin quraşdırılması və motorun bağlanması
Pi -nin quraşdırılması və motorun bağlanması
Pi -nin quraşdırılması və motorun bağlanması
Pi -nin quraşdırılması və motorun bağlanması
Pi -nin quraşdırılması və motorun bağlanması

Raspberry Pi -ni çərçivəyə quraşdırmaq olduqca sadə idi. Kiçik bir 90 dərəcə dirsək dizayn etdim, bir üzü çuxur, digər tərəfi isə tamamilə düz idi. 3D çapdan sonra bunlardan ikisini Raspberry Pi -yə montaj deliklərində vintlər ilə bağlaya bilərsiniz (GPIO sancaqlarının hər tərəfindəki iki deliyi istifadə etdim).

Daha sonra, çərçivəni çəkmənin üstündəki Pi -ni yapışdırmaq üçün 3D çaplı dirsəklərin əks tərəflərində super yapışqan istifadə etməyə başladım. Yapışqanın qurumasına icazə verdikdən sonra Pi -ni iki vida ilə asanlıqla və rahat şəkildə sökə və ya dəyişdirə bildim. Aşağıdakı dirsək üçün.stl var.

İndi motor sürücüsünü sırasıyla GPIO 14, 15, 18, 23 -ə qoşan IN1, IN2, IN3, IN4 ilə PI -yə bağlayın. Nəhayət, idarəetmə lövhəsinin 5v və Ground pinlərini 5v çıxışına və Pi'nin Topraklama pinlərinə qoşun.

Bəzi istinadlar üçün Pi'nin Pinout bağlantısı:

Addım 11: Kameranın quraşdırılması

Kameranın quraşdırılması
Kameranın quraşdırılması
Kameranın quraşdırılması
Kameranın quraşdırılması
Kameranın quraşdırılması
Kameranın quraşdırılması

Kameranın quraşdırılması Pi -dən biraz daha az möhkəm idi, lakin metod işi tamamladı. Hər ucunda 2 deşik olan nazik bir şüa hazırladıqdan və çap etdikdən sonra şüanı montaj deliyindən Rasberry Pi -yə bağladım. Sonra kameranı başqa bir vida ilə şüanın əks ucuna yapışdırın. Ta-da! Çox gözəl uçur.

Addım 12: Çekmece-Hərəkət Mexanizminin Yaradılması və Qurulması

Çekmece-Hərəkət-Mexanizminin Yaradılması və Quraşdırılması
Çekmece-Hərəkət-Mexanizminin Yaradılması və Quraşdırılması
Çekmece-Hərəkət-Mexanizminin Yaradılması və Quraşdırılması
Çekmece-Hərəkət-Mexanizminin Yaradılması və Quraşdırılması
Çekmece-Hərəkət-Mexanizminin Yaradılması və Quraşdırılması
Çekmece-Hərəkət-Mexanizminin Yaradılması və Quraşdırılması

İstehsalçı cəmiyyətin xeyirxah hədiyyələri sayəsində bu addım asanlaşdırıldı. Thingiverse -də sürətli bir axtarışdan sonra TucksProjects tərəfindən yaradılan xətti bir aktuator tapa bildim (burada tapıldı: https://www.thingiverse.com/thing:2987762). Qalan şey onu bir SD karta vurmaq və printerin işi görməsinə icazə vermək idi.

Fusion 360 -a girməyi sona çatdırdım və motorumun şaftı TucksProjects tərəfindən veriləndən çox böyük olduğu üçün düzəni düzəltdim. Bunun üçün aşağıda.stl var. Çap edildikdən sonra, təkəri motor milinin üzərinə qoyaraq, sonra mühərriki və korpusun tərəflərini 2 vida ilə bağlayaraq yığmalıyıq (rafı bağlamadan əvvəl arasına qoyduğunuzdan əmin olun). Çekmece ilə çərçivənin arasına sığması üçün rafın bir düymünü kəsmək məcburiyyətində qaldım.

İndi qalan mexanizmi çərçivəyə və çekmece bağlamaqdır. "BU NECƏ OLACAQ?" soruşursunuz… bəli, mənimlə birlikdə deyin: Super yapışqan. Yuxarıdakı şəkillərdə göstərildiyi kimi, mexanizmi çərçivənin dibinə qoyun və çekmecenin sürüşdüyü ağac parçasına yuxarı itələyin. Rafı/mexanizmi çərçivəyə mümkün qədər paralel olaraq almağa çalışmağınız vacibdir, belə ki mexanizm hərəkət edərkən çekmecəni bucaq altında deyil, düz itələyir. Yapışqan quruduqdan sonra, rafın kənarına bir az daha yapışqan qoyun və çekmecəni yerinə qoyun və qurudun. Tamamlandıqda gizli çekmecemizi içəri girib çıxarmaq üçün möhkəm bir mexanizmimiz var.

Addım 13: Güzgü arxasına karton əlavə edin

Güzgü arxasına karton əlavə etmək
Güzgü arxasına karton əlavə etmək
Güzgü arxasına karton əlavə etmək
Güzgü arxasına karton əlavə etmək
Güzgü arxasına karton əlavə etmək
Güzgü arxasına karton əlavə etmək

Bu ikitərəfli filmi daha çox güzgüyə bənzətmək üçün, şüşənin arxasına karton qoymağın məqsədimizə uyğun olduğunu gördüm. İstifadə olunan karton, çərçivə ilə birlikdə gəlir, ancaq uyğun olan hər hansı bir parça işləyəcək. Bu da kamera LED -dən, motor nəzarətçisindən və ya aynanın digər tərəfindəki Pi şüalarından heç bir işığın olmamasını təmin edir. Hər şey yerindədirsə, kameranın kartonun üstündə oturduğunu qeyd etmək üçün qələm istifadə edin. Sonra bir dikdörtgəni kəsmək üçün ülgüc istifadə edin ki, kamera yerində görünsün.

Addım 14: Son Parçanın qoyulması

Son hissənin qoyulması
Son hissənin qoyulması
Son hissənin qoyulması
Son hissənin qoyulması

Ediləcək son şey, əvvəllər ayrılmış çekmecenin ön hissəsini taxmaqdır. Çekmecenin çıxması üçün mühərriki hərəkət etdirin. Sonra ön hissəni yapışdırın ki, çekmece parçası ortalanacaq (hər tərəfdən bir az asılmalıdır. Sonra divara asmaq olar.

Addım 15: Final

Final
Final
Final
Final

Orada var! Bu düyməni əlavə etmək, daha yaxşı iki tərəfli bir film almaq və koddakı bu səhvləri düzəltmək kimi bir neçə təkmilləşdirmə var, amma hər şey öz işini görür: güzgü kimi görünür, əvvəlcədən təyin edilmiş şeyi tanıyır. istifadəçinin üzü və o sevimli kiçik çekmeceyi açır. Həmişə olduğu kimi fikirlərinizi, suallarınızı və xatirələrinizi aşağıdakı şərhlərdə eşitmək istərdim.

Ümumi Reytinq: 10/10

Şərhlər: #Təkrar cəhd etməyəcəyəm … bu təlimatı izləyə bilməsəm;)

Gizli Bölmə Çağırışı
Gizli Bölmə Çağırışı
Gizli Bölmə Çağırışı
Gizli Bölmə Çağırışı

Gizli Bölmə Çağırışında Böyük Mükafat

Tövsiyə: