İçindekiler:

Gizli Bölmeli Yüz Tanıma Aynası: 15 Adım (Resimli)
Gizli Bölmeli Yüz Tanıma Aynası: 15 Adım (Resimli)

Video: Gizli Bölmeli Yüz Tanıma Aynası: 15 Adım (Resimli)

Video: Gizli Bölmeli Yüz Tanıma Aynası: 15 Adım (Resimli)
Video: HOŞLANDIĞIN BİR KADININ SENİNLE YATMAK İSTEDİĞİNİN 15 İŞARETİ 2024, Temmuz
Anonim
Gizli Bölmeli Yüz Tanıma Aynası
Gizli Bölmeli Yüz Tanıma Aynası
Gizli Bölmeli Yüz Tanıma Aynası
Gizli Bölmeli Yüz Tanıma Aynası
Gizli Bölmeli Yüz Tanıma Aynası
Gizli Bölmeli Yüz Tanıma Aynası

Hikayelerde, filmlerde ve benzerlerinde kullanılan, sürekli yaratıcı gizli bölmeler her zaman ilgimi çekmiştir. Bu yüzden, Gizli Bölme Yarışmasını gördüğümde, bu fikri kendim denemeye ve doğru kişi içine baktığında gizli bir yan çekmeceyi açan sıradan görünümlü bir ayna yapmaya karar verdim.

Bir Raspberry Pi kullanarak, biraz python programlama bilgisi ve 8. sınıf mağaza sınıfı kullanarak, yalnızca doğru kullanıcının erişebileceği nesneleri net bir şekilde gizlemek için bu gösterişli cihazı oluşturabiliriz.

Bilgi ve kaynaklarımı da aldığım bu kişilere/platformlara ayrıca teşekkür etmek istiyorum:

TeCoEd - Youtube Kanalı

PiMyLifeUp'tan Emmet

Hackster.io'da MJRoBot (profil)

Gaven MacDonald - Youtube Kanalı

Tucker Shannon Thingiverse'de (profil)

Gereçler

Çerçeve Malzemeleri:

  • Ahşap Kalas (Bu tahtanın boyutları 42" x 7.5" x 5/16" idi)
  • Kalem Resim Çerçevesi (camlı)
  • Sprey boya
  • Tek Yönlü Yansıtıcı Yapıştırıcı
  • Cam Temizleyici ve Bez
  • MDF Ahşap

Yüz Tanıma Malzemeleri:

  • Raspberry Pi (Pi 3 B+ kullandım ama başka seçenekler de var)
  • Kamera Modülü
  • step motor

Aletler:

  • Masa testeresi
  • Dekupaj Testere
  • Zımpara kağıdıAhşap
  • Tutkal bandı
  • Ölçüm
  • Makas
  • Sprey şişesi
  • 3 boyutlu yazıcı
  • Süper yapıştırıcı

Adım 1: Kutu Çerçevesi için Kesimler

Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler
Kutu Çerçevesi için Kesimler

İkinci el mağazasından bir resim çerçevesi aldım. Sadece bir uyarı, çerçeveyi oluşturan kalasların en az 1 1/2 genişliğinde olduğundan emin olun. Bu, üzerinde çalışmak için yeterli alan bırakarak diğer tahtaları üzerine yapıştırabilmeniz içindir. Ayrıca, camın içeride olduğundan emin olun. çerçeve tamamen şeffaf. Kazara buzlu bir çerçeve aldım ve daha sonra şeffaf cam için başka bir çerçeve almak zorunda kaldım. Çerçevem kullanıldığı için kutu çerçevenin ölçüleri değişebilir.

  • Çerçeveyi dikey yönde yerleştirin. Çerçevedeki cam delikli tarafın uzun kenarlarını (LS) hem üstte hem de altta ek ½” ile ölçün. (yani cam deliği ölçümünün uzun kenarına bir inç ekleyin. Bunu kaydedin ve LSM (Uzun Kenar Ölçümü) olarak etiketleyin.
  • Benzer şekilde, deliğin üst tarafını ölçün ve 1” daha ekleyin. Bunu kaydedin ve SSM'yi (Kısa Kenar Ölçümü) etiketleyin.
  • Tahtanızı alın ve bir masa testeresiyle iki LSM x 2” ve iki SSM x 2” kesin.
  • LSM kesimlerinden birini alın ve alttan 1” ve sol ve sağ kenarlardan ½” olan 2”x1” dikdörtgen ölçün (resim 3'te gösterildiği gibi).
  • Deliği kesmek için bir yapboz kullanın. Ardından kenarları zımparalamak için zımpara kağıdı kullanın.

Adım 2: Çekmece için Kesimler

Çekmece için Kesimler
Çekmece için Kesimler
Çekmece için Kesimler
Çekmece için Kesimler
Çekmece için Kesimler
Çekmece için Kesimler
Çekmece için Kesimler
Çekmece için Kesimler

Şimdi çekmeceyi (a.k.a Gizli Bölme) oluşturmaya başlayacağız.

  • İki adet 4”x 1” kenar, 3 ⅜” x 1” (arka kenar), 4 ¼” x 1 ¼” (ön kenar) ve 4” x 3 ⅜” (platform) kesin.
  • Platformun 4” kenarı boyunca ilk 4” x 1” tarafını yapıştırın. Platform tarafının altına bir çift katlanmış kağıt koydum ki hafifçe kalksın, bu şekilde LS tahtasında kestiğim deliğe sürüklenmesin. 30 dakika kurumaya ayarlayın.
  • Benzer şekilde, platformun 3 ⅜” kenarı boyunca 3 ⅜” x 1” boyutunda yapıştırın. 30 dakika kurumaya ayarlayın. Ardından ikinci 4”x 1” tarafını birincinin karşı tarafına yapıştırın. 30 dakika kurumaya ayarlayın.
  • Şimdilik ön kenarı bir kenara koyun. Çekmeceye yapıştırılan son şey olacak.
  • Bitirdiğinizde, LSM tahtasına dekupaj yaptığınız deliğe sığıp sığmadığını kontrol edin. Değilse, çekmece kolayca içeri ve dışarı kayana kadar deliği zımparalayın ve sürtünme yok.

Adım 3: Çerçeveyi Bir Araya Getirmek

Çerçeveyi Birleştirmek
Çerçeveyi Birleştirmek
Çerçeveyi Birleştirmek
Çerçeveyi Birleştirmek
Çerçeveyi Birleştirmek
Çerçeveyi Birleştirmek

Tüm parçalar tamamlandıktan sonra çerçevenin tamamını monte etmeye başlayabiliriz.

  • Cam delik ile ortalanmış LSM tahtasını her iki tarafında ½” olacak şekilde yapıştırın. Delikten ½” uzağa yapıştırıldığından emin olun (resim 1'de gösterildiği gibi). 30 dakika kurumaya ayarlayın.
  • İlk SSM tahtasını, kenarı henüz yapıştırılmış olan LSM tahtasının iç kısmına değecek şekilde yapıştırın. (Düz bir şekilde yapıştırıldığından emin olmak için bir cetvel kullanın). 30 dakika kurumaya ayarlayın.
  • Diğer LSM tarafını alın ve birincisine benzer şekilde yapıştırın. Delikten ½” uzakta olduğundan ve yeni takılan SSM'nin tahtanın iç tarafına yapıştırıldığından emin olun. 30 dakika kurumaya ayarlayın.
  • Son SSM'yi üst kenara yapıştırın. Her iki tarafta da iki LSM'niz olduğundan, bunları ne kadar düz bağladığınıza bağlı olarak, sığdığından emin olmak için SSM'nin kenarlarını zımparalamanız gerekebilir (kesme işlemim bazen kapalıdır). 30 dakika kurumaya ayarlayın.
  • Çekmecenin alt kısmı ile çerçeve arasındaki küçük boşluğu ölçün. Bu ölçü ile bir MDF ahşap parçasını 4" kesin. Bu parçayı çekmeceye yakın yapmak istiyorsunuz ama dokunmuyor. Çekmeceyi minimum sürtünme ile desteklemek içindir.
  • Her şey bittiğinde, tüm parçalar eşleşecek şekilde çerçeveyi boyadım.

Adım 4: Ayna İçin

Ayna için
Ayna için
Ayna için
Ayna için
Ayna için
Ayna için
Ayna için
Ayna için

Amazon'dan aldığım tek yönlü film yapıştırıcısı 10 dolardı. İlgileniyorsanız biraz daha pahalı olan daha kalitelileri var. Benim kullandığım yansıtıyor ama bir evde göreceğiniz sıradan bir ayna olmadığını anlayabilirsiniz. Daha pahalı olanlar size bu görünümü verecektir.

  • Camı her iki tarafta cam temizleyici ile temizleyin.
  • Tek yönlü yapıştırıcıyı açın ve camı üstüne yerleştirin. Yapıştırıcıyı, camın her iki tarafında en az ½” fazlalık olacak şekilde kesin.
  • Bardağı bir kenara koyun ve bir tarafını suyla ıslatın. Ardından plastik kaplamayı tek yönlü yapışkandan soyun ve yeni ortaya çıkan tarafa su püskürtün.
  • Camın ıslak tarafını yapıştırıcının ıslak tarafına yerleştirin. 30 dakika oturalım.
  • Yapıştırıcı ile cam arasındaki kabarcıkları düzleştirmek için ters çevirin ve baş parmağınızı kullanın. Daha sonra fazla yapıştırıcıyı kenarlardan kesin.

Adım 5: Raspbian Stretch'i kurun

Bu, Raspberry Pi ortamına ilk kez girdiğim için, işletim sisteminin nasıl kurulacağına dair talimatlar aramaya başladım. Sonunda Youtube'da TeCoEd tarafından SD karta Stretch'in yüklenmesi sürecinden geçen basit bir öğretici buldum (oldukça hoş bir girişle). İşte bu eğitimin bağlantısı:

Özünde, yapmanız gereken tek şey:

  • Drive >> Drive Tools >> Format'ı seçerek SD kartı biçimlendirin. Raspian Stretch için ZIP dosyasını indirin (burada bulunur:
  • OS görüntüsünü SD Karta flaşlayın. TeCoEd bunu tamamlamak için Win32 Disk Imager'ı kullandı. Biraz daha basit görünen balenaEtcher'ı kurdum. (İşte balenaEtcher için indirme bağlantısı:
  • BalenaEtcher'a girdikten sonra “Dosyadan Flash”ı seçin ve önceden indirilmiş ZIP dosyasını seçin. Ardından, istediğiniz SD kartı seçin (otomatik olarak seçilmediyse). Ardından sulu flaş düğmesine basın ve sihrin gerçekleşmesini bekleyin.

SD karta takıldıktan sonra, onu Raspberry Pi'ye takabilir ve genel Pi kurulum sürecinden geçebilirsiniz.

Adım 6: OpenCV'yi yükleyin

Şimdi daha Yüz Tanıma Odaklı bölümlere. Yüzleri tanımak için bilgisayarla görme ile çalışmak için çok sayıda araç içeren OpenCV kütüphanesini indirmeliyiz.

OpenCV'yi kurmak benim için yazılım açısından en zorlu kısımdı. Ancak çok sayıda talimatı izledikten sonra nihayet burada bulunan numarayı yapan PiMyLifeUp'tan Emmet tarafından bir eğitim buldum:

Bu adımları bağlantıdan takip etmeniz daha uygun olacağından (verilen açıklamalar ve doğrudan siteden daha kolay kopyalayıp yapıştırma özelliği ile) daha uygun olacağından bu adımların üzerinden geçmeyeceğim.

7. Adım: Kamerayı Etkinleştirin/Test Edin

Kamerayı Etkinleştir/Test Et
Kamerayı Etkinleştir/Test Et
Kamerayı Etkinleştir/Test Et
Kamerayı Etkinleştir/Test Et

OpenCV'yi kurduktan sonra yolculuğumun geri kalanı, MJRoBot tarafından Hackster.io'da burada bulunan bir öğretici kullanılarak tamamlandı:

Başlamadan önce size hatırlatmak isterim ki bu senaryoların asıl yaratıcısı ben değilim ama sonunda bazı kısımlarını değiştirdim.

Başlamak için, ekranda video çekebileceğimizden emin olmak için kamerayı test etmeliyiz. MJRoBot'un 3. Adımında sağlanan komut dosyasını çalıştırmaya çalışırken yaklaşık bir saat harcadım. Gerçekte Raspberry Pi'de kamerayı etkinleştirmemiz gerektiği gibi (verilen talimatları okumanın iyi bir fikir olabileceği ortaya çıktı… mmm hayır). Bu nedenle, Kamerayı doğru bağlantı noktasına bağladıktan sonra şu adımları izleyin:

  • Bir komut terminali açın ve sudo raspi-config yazın
  • “Kamerayı Etkinleştir”i seçin (bu, bir cihaz seçeneği altında bulunabilir)
  • "Giriş"e basın
  • “Bitir”e gidin ve yeniden başlatmanız istenecektir.

Ardından şu adımları izleyin:

  • Raspberry'nin Ana Menüsüne gidin (Sol üstte)
  • Tercihler
  • Raspberry Pi Yapılandırması
  • Arayüzler
  • Ardından Kamera'da "Etkin"i seçin
  • O zaman tamam"

Artık kamerayı test etmek için MJRoBot'un öğreticisinden bu komut dosyasını başarıyla çalıştırabilmelisiniz (tüm bu kodun ve daha ayrıntılı bir açıklamanın yukarıda MJRobot'un öğreticisine verilen bağlantıda bulunduğunu unutmayın):

numpy'yi np olarak içe aktar

import cv2 cap = cv2. VideoCapture(0) cap.set(3, 640) # set Genişlik cap.set(4, 480) # set Yükseklik while(True): ret, çerçeve = cap.read() çerçeve = cv2. flip(frame, -1) # Kamerayı dikey olarak çevir gri = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) cv2.imshow('frame', frame) cv2.imshow('gri', gri) k = cv2.waitKey(30) & 0xff ise k == 27: # break cap.release()'den çıkmak için 'ESC' tuşuna basın cv2.destroyAllWindows()

Önceki kod, biri renkli, diğeri gri tonlamalı iki pencere göstermelidir. Buraya kadar geldiysen bence güzel bir sandviçi hak ediyorsun.

Adım 8: Veri Toplama ve Eğitim Verileri

Veri Toplama ve Eğitim Verileri
Veri Toplama ve Eğitim Verileri
Veri Toplama ve Eğitim Verileri
Veri Toplama ve Eğitim Verileri
Veri Toplama ve Eğitim Verileri
Veri Toplama ve Eğitim Verileri

Sağlanan öğreticide, yazar yakında sağlanacak olan kodun süreçleri hakkında çok daha derinlere iniyor, ancak bunlar bu aynanın nasıl yapıldığına dair talimatlar olduğundan, tarihin veya karmaşık mekaniklerin derinliğine girmeyeceğim. Bununla birlikte, zihninize iyi hizmet edebilecekleri için bu iki şeyi okuyarak hayatınızın bir ayını ayırmanızı tavsiye ederim.

Tüm bunları çalıştırmadan önce çalıştırmamız gereken yaklaşık üç komut dosyası daha var. Birincisi veri toplamak içindir, ikincisi onu eğitmek içindir ve sonuncusu da aslında tanıma içindir. Veri toplamak, yüzün gerçek resimlerinin çekilmesini ve eğitim için belirli bir yerde saklanmasını gerektirir. Bu kodun yaratıcısı, tüm bunları yapmayı çok kolaylaştırdı, bu yüzden baş ağrısından kaçınmak için bu talimatları izlemenizi tavsiye ederim.

Bir komut satırı açın ve onu eğlenceli bir şey olarak adlandıran yeni bir dizin oluşturun (benimki FaceRec olarak adlandırdım)

mkdir FaceRec

Şimdi dizini FaceRec olarak değiştirin ve dataset olarak adlandırdığınızdan emin olarak bir alt dizin oluşturun

cd FaceRec

mkdir veri kümesi

Hazır buradayken, trainer adlı diğer alt dizini de yapabiliriz

mkdir eğitmeni

Artık bir kullanıcının fotoğraflarını çekecek olan ilk betiğin talimatlarını çalıştırabilir ve takip edebilirsiniz. (Sadece bir uyarı, kullanıcı kimliğini 1, 2, 3 vb. olarak girdiğinizden emin olun.)

import cv2import os cam = cv2. VideoCapture(0) cam.set(3, 640) # video genişliğini ayarla cam.set(4, 480) # video yüksekliğini ayarla face_detector = cv2. CascadeClassifier('haarcascade_frontalface_default.xml') # Her biri için kişi, bir sayısal yüz kimliği girin face_id = input('\n kullanıcı kimliğini girin son basın ==> ') print("\n [BİLGİ] Yüz yakalama başlatılıyor. Kameraya bakın ve bekleyin…") # Bireysel örnekleme yüz sayımını başlat say = 0 while(True): ret, img = cam.read() img = cv2.flip(img, -1) # video görüntüsünü dikey olarak çevir gri = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) yüzler = face_detector.detectMultiScale (gri, 1.3, 5) yüzlerde (x, y, w, h) için: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) count += 1 # Yakalanan görüntüyü veri kümeleri klasörüne kaydedin cv2.imwrite("dataset/User." + str(face_id) + '.' + str(count) + ".jpg", grey[y:y +h, x:x+w]) cv2.imshow('image', img) k = cv2.waitKey(100) & 0xff # k == 27 ise videodan çıkmak için 'ESC' tuşuna basın: elif sayısını kes >= 30: # 30 yüz örneği alın ve videoyu durdurun k print("\n [BİLGİ] Programdan Çıkış ve temizleme öğeleri") cam.release() cv2.destroyAllWindows()

Bu noktada Pi'ye yastık taktığınızdan emin olun. Değilse, şu komutu çalıştırın:

pip yükleme yastığı

Bu tamamlandıktan sonra, size son komut dosyasında kullanılacak bir.yaml dosyasını sorunsuz bir şekilde sağlayacak olan eğitim komut dosyasını (ikinci komut dosyası) çalıştırabilirsiniz

cv2import numpy'yi PIL'den np olarak içe aktar Görüntü içe aktarma işletim sistemi # Yüz görüntüsü veritabanı yolu yolu = 'veri kümesi' tanıyıcı = cv2.face. LBPHFaceRecognizer_create() dedektör = cv2. CascadeClassifier("haarcascade_frontalface_default.xml"); # görüntüleri ve etiket verilerini alma işlevi def getImagesAndLabels(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] faceSamples= ids = imagePaths içindeki imagePath için: PIL_img = Image.open(imagePath).convert('L') # onu gri tonlamaya dönüştür img_numpy = np.array(PIL_img, 'uint8') id = int(os.path.split(imagePath)[-1]. split(".")[1]) yüzler = dedektör.detectMultiScale(img_numpy) için (x, y, w, h) yüzlerde: faceSamples.append(img_numpy[y:y+h, x:x+w]) ids.append(id) return faceSamples, ids print ("\n [BİLGİ] Eğitim yüzleri. Birkaç saniye sürecek. Bekleyin …") yüzler, ids = getImagesAndLabels(path) tanıyıcı.train(yüzler, np.array(ids)) # Modeli trainer/trainer.yml tanıyıcı.write('trainer/trainer.yml') içine kaydedin # tanıyıcı.save() Mac'te çalıştı, ancak Pi'de çalışmadı # Eğitilen yüzlerin sayısını yazdırın ve program yazdırmayı sonlandırın ("\n [BİLGİ] {0} eğitilmiş yüzler. Programdan Çıkılıyor".format(len(np.unique(ids))))

Bu komut dizileriyle ilgili harika olan şey, sisteme birden fazla yüzün girilebilmesi, yani istenirse birden fazla kişinin aynanın iç kısımlarına erişebilmesidir.

Aşağıda, indirilebilecek Veri Yakalama komut dosyası ve Eğitim komut dosyası var.

Adım 9: Yüz Tanıma Süresi

Yüz Tanıma Süresi
Yüz Tanıma Süresi
Yüz Tanıma Süresi
Yüz Tanıma Süresi

Son olarak, tanıyıcı betiğini çalıştırabiliriz. Motor sürecini işlevsel hale getirmek için bu betiğe daha fazla kod eklendi, bu yüzden bu kısımları biraz daha ayrıntılı açıklayacağım. Bunu bölümlere ayıracağım, ancak peşinde olduğunuz buysa, tüm senaryoyu adımın sonuna koyacağım.

İhtiyacımız olacak tüm modülleri içe aktararak ve ardından GPIO modunu GPIO. BCM olarak ayarlayarak başlayacağız.

numpy'yi np olarak içe aktar

işletim sistemini içe aktarma zamanı içe aktarma RPi. GPIO'yu GPIO olarak içe aktar GPIO.setwarnings(False) GPIO.setmode(GPIO. BCM)

ControlPin adlı bu sonraki liste, step motorumuz için kullanılacak çıkış pinlerini temsil eden bir sayı dizisidir.

KontrolPin = [14, 15, 18, 23]

For döngüsü bu pinleri Çıkışlar olarak ayarlar ve ardından bunların kapatıldığından emin olur. Çekmecenin bir düğmeye basarak kapanmasına izin vermek için hala burada bazı kodlarım var ama bunun yerine bir zamanlayıcı kullanmaya karar verdim.

GPIO.setup(ControlPin, GPIO. OUT)

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

Sonraki iki değişken, motoru sürmek için kullanacağımız dizilerdir. Bu bilgiyi Gaven MacDonald'ın sadece kodda değil, gerçek motorda da derinlemesine incelerken izlemenizi şiddetle tavsiye ettiğim harika bir videosundan öğrendim (burada bulabilirsiniz: https://www.youtube.com/embed/Dc16mKFA7Fo). Özünde, her dizi, yaklaşan openComp ve closeComp işlevlerinde iç içe for-döngüleri kullanılarak yinelenecektir. Yakından bakarsanız seq2, seq1'in tam tersidir. Evet, tahmin ettin. Biri motoru ileri, diğeri ise geri hareket ettirmek içindir.

seq1 =

seq2 =

openComp fonksiyonumuzdan başlayarak 1024 kez yinelenecek bir for döngüsü oluşturuyoruz. MacDonald'ın videosuna göre 512 yineleme motorun tam bir dönüşünü sağlayacaktı ve yaklaşık iki dönüşün iyi bir uzunluk olduğunu buldum, ancak bu kişinin boyutuna bağlı olarak ayarlanabilir. Sonraki for döngüsü, sıra1 ve sıra2'de bulunan 8 diziyi hesaba katmak için 8 yinelemeden oluşur. Ve son olarak, son döngü, bu dizilerin her birinde bulunan dört öğenin yanı sıra motorumuzu bağladığımız 4 GPIO pini için dört kez yinelenir. Buradaki satır, GPIO pinini seçer ve ardından hangi yinelemenin açık olduğuna bağlı olarak onu açar veya kapatır. Sonraki satır, motorumuzun hiç dönmemesi için biraz arabellek süresi sağlar. Motor çekmeceyi dışarı çıkarmak için döndükten sonra, hareket etmeden önce 5 saniye uyur. Bu süre burada ayarlanabilir veya bir zamanlayıcı yerine komut dosyasıyla iletmek için bir basmalı düğmenin kullanılmasına izin veren yorumlanmış kodu etkinleştirebilirsiniz.

i aralığında (1024):

aralık(8) içindeki yarım adım için: aralık(4) içindeki pin için: GPIO.output(ControlPin[pin], seq1[halfstep] [pin]) time.sleep(.001) '''while True: if GPIO.input (2) == GPIO. LOW: break;''' time.sleep(5)

closeComp işlevi benzer şekilde çalışır. Motor geri hareket ettikten sonra, herhangi bir enerji harcamamamızı sağlamak için son GPIO pinlerimizi düşük olarak ayarlamaya devam ediyorum ve devam etmeden önce üç saniye daha ekliyorum.

i aralığında (1024):

aralık(8) içindeki yarım adım için: aralık(4) içindeki pin için: GPIO.output(ControlPin[pin], seq2[halfstep] [pin]) time.sleep(.001) print("Bölme Kapalı") GPIO.output (ControlPin[0], 0) GPIO.output(ControlPin[3], 0) time.sleep(3)

Sonraki bölümün büyük kısmı kamerayı kurmak ve yüz tanımayı başlatmak için kullanılıyor. Yine MKRoBot'un talimatları parçalara daha fazla giriyor ama şimdilik sadece ayna için kullanılan parçaları gösteriyorum.

İlk önce liste adlarını, verileri toplarken atadığım dizinde adım olacak şekilde değiştirdim (benim durumumda 1). Ardından, veri kümesinde başka yüzüm olmadığı için değerlerin geri kalanını Yok olarak ayarladım.

isimler = ['Yok', 'Daniel', 'Yok', 'Yok', 'Yok', 'Yok']

Son birkaç kod satırımız thicc for döngüsünde uygulanmaktadır. Güven değişkeni bir dizgeye dönüşmeden önce güveni bir tamsayı (intConfidence) olarak saklamak için bir değişken yarattım. Ardından, güvenin 30'dan büyük olup olmadığını ve kimliğin (bilgisayarın hangi kişiyi tespit ettiği, bu durumda “Daniel”) adıma eşit olup olmadığını kontrol etmek için bir if ifadesi kullanırım. Bu onaylandıktan sonra, (daha önce açıklandığı gibi) motoru hareket ettiren, 5 saniye sonra başlayan ve ardından motoru ters yönde hareket ettiren ve kalın döngüye geçmeden önce biraz temizlik yapan closeComp'a ilerleyen openComp işlevi çağrılır.

if intConfidence > 30 ve id == 'Daniel':

openComp() closeComp()

Burada bulduğum bir hata, bazen closeComp geri döndükten sonra kodun devam etmesi, ancak koşullu if ifadesinin, sanki hala arabellekte olan video beslemesini okuyormuş gibi tekrar doğru bulunmasıdır. Her zaman olmamasına rağmen, asla olmamasını sağlamanın bir yolunu henüz bulamadım, bu yüzden herhangi birinin herhangi bir fikri varsa, yorumlarda bana bildirin.

İşte bu betiğin tamamı tek bir yerde (ve bunun hemen altında indirilebilir):

cv2'yi içe aktar

numpy'yi np olarak içe aktar işletim sistemini içe aktar zamanı içe aktar RPi. GPIO'yu GPIO olarak içe aktar GPIO.setwarnings(False) GPIO.setmode(GPIO. BCM) ControlPin = [14, 15, 18, 23] i aralığında(4): GPIO.setup (ControlPin, GPIO. OUT) GPIO.output(ControlPin, 0) GPIO.setup(2, GPIO. IN, pull_up_down=GPIO. PUD_DOWN) seq1 =

Adım 10: Pi'nin Monte Edilmesi ve Motorun Bağlanması

Pi'nin Montajı ve Motorun Bağlanması
Pi'nin Montajı ve Motorun Bağlanması
Pi'nin Montajı ve Motorun Bağlanması
Pi'nin Montajı ve Motorun Bağlanması
Pi'nin Montajı ve Motorun Bağlanması
Pi'nin Montajı ve Motorun Bağlanması

Raspberry Pi'yi çerçeveye monte etmek oldukça basitti. Bir yüzü delikli ve diğer tarafı tamamen düz olan 90 derecelik küçük bir dirsek tasarladım. Bunlardan ikisini 3D yazdırdıktan sonra Raspberry Pi'ye montaj deliklerine vidalarla takılabilirler (GPIO pinlerinin her iki tarafındaki iki deliği kullandım).

Ardından, çerçevedeki çekmecenin hemen üzerindeki Pi'yi yapıştırmak için 3D baskılı dirseklerin karşıt yüzlerinde süper yapıştırıcı kullanmaya başladım. Yapıştırıcıyı kurumaya bıraktıktan sonra, sadece iki vidayla Pi'yi basit ve rahat bir şekilde çıkarabildim veya yerine yerleştirebildim. Aşağıda bağlantılı dirsek için.stl dosyasına sahibim.

Şimdi motor sürücüsünü sırasıyla GPIO 14, 15, 18, 23'e bağlanan IN1, IN2, IN3, IN4 ile PI'ye bağlayın. Son olarak, denetleyici kartının 5v ve Toprak pinlerini Pi'nin 5v çıkışına ve Toprak pinlerine bağlayın.

İşte bazı referanslar için Pi'nin Pinout'una bir bağlantı:

Adım 11: Kamerayı Monte Etme

Kamerayı Monte Etme
Kamerayı Monte Etme
Kamerayı Monte Etme
Kamerayı Monte Etme
Kamerayı Monte Etme
Kamerayı Monte Etme

Kamerayı monte etmek Pi'den biraz daha az sağlamdı ancak yöntem işi halletti. Her iki ucunda 2 delik olan ince bir kiriş tasarlayıp yazdırdıktan sonra kirişi montaj deliğinden Rasberry Pi'ye tutturdum. Ardından kamerayı başka bir vidayla ışının karşı ucuna tutturun. Ta-da! Oldukça uçuk görünüyor.

Adım 12: Çekmece Hareketli Mekanizmayı Oluşturma ve Monte Etme

Çekmece Hareketli Mekanizmanın Oluşturulması ve Montajı
Çekmece Hareketli Mekanizmanın Oluşturulması ve Montajı
Çekmece Hareketli Mekanizmanın Oluşturulması ve Montajı
Çekmece Hareketli Mekanizmanın Oluşturulması ve Montajı
Çekmece Hareketli Mekanizmanın Oluşturulması ve Montajı
Çekmece Hareketli Mekanizmanın Oluşturulması ve Montajı

Bu adım, yapımcı topluluğunun her zaman hayırsever hediyeleri sayesinde kolaylaştı. Thingiverse üzerinde hızlı bir arama yaptıktan sonra, TucksProjects tarafından oluşturulan doğrusal bir aktüatör bulabildim (burada bulunur: https://www.thingiverse.com/thing:2987762). Geriye kalan tek şey, onu bir SD karta yapıştırmak ve işi yazıcının yapmasına izin vermekti.

Sonunda Fusion 360'a girdim ve motorumun şaftı TucksProjects tarafından sağlanan için çok büyük olduğu için mahmuzu düzenledim. Bunun için aşağıda.stl dosyasına sahibim. Baskı yapıldıktan sonra, sadece motor miline mahmuz yerleştirip, ardından motor ve kasa kenarlarını 2 vida ile tutturarak (kapatmadan önce rafı araya koyduğunuzdan emin olarak) monte etmemiz gerekiyor. Çekmece ile çerçeve arasına sığması için raftan bir inç kesmek zorunda kaldım.

Şimdi geriye kalan tek şey mekanizmayı çerçeveye ve çekmeceye takmak. “Ama BUNU NASIL YAPACAĞIZ?” soruyorsun… evet, benimle söyle: Süper Yapıştırıcı. Yukarıdaki resimlerde gösterildiği gibi, mekanizmayı çerçevenin altına yerleştirin ve çekmecenin üzerinde kaydığı tahta parçasına doğru itin. Burada rafı/mekanizmayı mümkün olduğunca çerçeveye paralel almaya çalışmanız çok önemlidir, böylece mekanizma hareket ettiğinde çekmeceyi açılı değil düz iter. Tutkal kuruduktan sonra, rafın kenarına biraz daha tutkal koyun ve çekmeceyi yerine getirin ve kurumasını bekleyin. Tamamlandığında, gizli çekmecemizi içeri ve dışarı kaydırmak için sağlam bir mekanizmamız var.

Adım 13: Aynanın Arkasına Karton Ekleme

Aynanın Arkasına Karton Ekleme
Aynanın Arkasına Karton Ekleme
Aynanın Arkasına Karton Ekleme
Aynanın Arkasına Karton Ekleme
Aynanın Arkasına Karton Ekleme
Aynanın Arkasına Karton Ekleme

Bu iki yönlü filmi daha ayna gibi gösterebilmek için camın arkasına karton yerleştirmenin amacımıza iyi hizmet ettiğini gördüm. Kullanılan karton, çerçeveyle birlikte gelen kartondur, ancak sığacak şekilde kesilen herhangi bir parça işe yarayacaktır. Bu ayrıca kamera LED'inden, motor kontrol cihazından veya aynanın diğer tarafındaki Pi gösterilerinden ışık gelmemesini sağlar. Her şey yerli yerindeyken, kameranın karton üzerinde nerede olduğunu işaretlemek için bir kalem kullanın. Ardından, bir ustura kullanarak bir dikdörtgeni kesin, böylece kamera yerindeyken içeri bakabilir.

Adım 14: Son Parçayı Takma

Son Parçayı Yerleştirmek
Son Parçayı Yerleştirmek
Son Parçayı Yerleştirmek
Son Parçayı Yerleştirmek

Yapılacak son şey, çekmecenin daha önce ayrılmış olan ön kısmını koymaktır. Motoru, çekmece dışarı çıkacak şekilde hareket ettirin. Ardından ön kısmı çekmece parçası ortalanacak şekilde yapıştırın (her taraftan biraz sarkma olmalıdır. Ardından duvara asabilirsiniz.

Adım 15: Final

final
final
final
final

İşte aldın! Bu düğmeyi eklemek, daha iyi iki yönlü film satın almak ve koddaki bu hatayı düzeltmek gibi yapılabilecek birkaç iyileştirme var ama sonuçta, işi hallediyor: bir ayna gibi görünüyor, önceden belirlenmiş olanı tanıyor. kullanıcının yüzünü ve o sevimli küçük çekmeceyi açar. Her zaman olduğu gibi, aşağıdaki yorumlarda düşüncelerinizi, sorularınızı ve anılarınızı duymayı çok isterim.

Genel Puan: 10/10

Yorumlar: #WouldNotTryAgain… bu talimatı takip edemezsem;)

Gizli Bölme Mücadelesi
Gizli Bölme Mücadelesi
Gizli Bölme Mücadelesi
Gizli Bölme Mücadelesi

Gizli Bölme Yarışmasında Büyük Ödül

Önerilen: