İçindekiler:
- Gereçler
- Adım 1: Kutu Çerçevesi için Kesimler
- Adım 2: Çekmece için Kesimler
- Adım 3: Çerçeveyi Bir Araya Getirmek
- Adım 4: Ayna İçin
- Adım 5: Raspbian Stretch'i kurun
- Adım 6: OpenCV'yi yükleyin
- 7. Adım: Kamerayı Etkinleştirin/Test Edin
- Adım 8: Veri Toplama ve Eğitim Verileri
- Adım 9: Yüz Tanıma Süresi
- Adım 10: Pi'nin Monte Edilmesi ve Motorun Bağlanması
- Adım 11: Kamerayı Monte Etme
- Adım 12: Çekmece Hareketli Mekanizmayı Oluşturma ve Monte Etme
- Adım 13: Aynanın Arkasına Karton Ekleme
- Adım 14: Son Parçayı Takma
- Adım 15: Final
Video: Gizli Bölmeli Yüz Tanıma Aynası: 15 Adım (Resimli)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
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
İ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
Ş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
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
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
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
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
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ı
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 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
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
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
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
İş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 Yarışmasında Büyük Ödül
Önerilen:
Abellcadabra (Yüz Tanıma Kapı Kilit Sistemi): 9 Adım
Abellcadabra (Yüz Tanıma Kapı Kilit Sistemi): Karantina sırasında etrafta yatarak, ev kapısı için yüz tanıma sistemi kurarak zamanı öldürmenin bir yolunu bulmaya çalıştım. Ben ona Abellcadabra adını verdim - bu, sadece zili aldığım kapı zili ile sihirli bir ifade olan Abracadabra'nın birleşimidir. ÇOK KOMİK
Yüz Tanıma Kapı Kilidi: 8 Adım
Yüz Tanıma Kapı Kilidi: Yapımı yaklaşık bir aydır, yüz tanıma kapı kilidini sunuyorum! Elimden geldiğince düzgün görünmesini sağlamaya çalıştım ama 13 yaşında ancak bu kadarını yapabilirim. Bu yüz tanımalı kapı kilidi, özel bir taşınabilir keçeye sahip bir Raspberry Pi 4 tarafından çalıştırılır
Opencv Yüz Algılama, Eğitim ve Tanıma: 3 Adım
Opencv Yüz Tespiti, Eğitimi ve Tanıma: OpenCV, bulanıklaştırma, görüntü harmanlama, görüntü iyileştirme, video kalitesi, eşikleme vb. gibi temel görüntü işleme görevlerini gerçekleştirmek için çok popüler olan açık kaynaklı bir bilgisayarlı görü kitaplığıdır. Görüntü işlemeye ek olarak, kanıtlıyor
Raspberry Pi'li Buzdolabı İçin Yüz Tanıma Güvenlik Sistemi: 7 Adım (Resimli)
Raspberry Pi'li Bir Buzdolabı için Yüz Tanıma Güvenlik Sistemi: İnternette gezinirken güvenlik sistemleri fiyatlarının 150$ ile 600$ ve üzeri arasında değiştiğini keşfettim, ancak tüm çözümlerin (çok pahalı olanlar bile) diğer sistemlerle entegre edilemediğini keşfettim. evinizde akıllı araçlar! Örneğin, ayarlayamazsınız
Gizli Bölmeli Mini Çekmece: 5 Adım
Gizli Bölme Mini Çekmece: Bu talimat size gizli bölmeli bir çekmeceli dolabı nasıl yaptığımı gösterecek. Yaptığım eylemleri tanımlamak için esas olarak küçük ayrıntıları kullanacağım