Daftar Isi:

Cermin Pengenalan Wajah Dengan Kompartemen Rahasia: 15 Langkah (dengan Gambar)
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia: 15 Langkah (dengan Gambar)

Video: Cermin Pengenalan Wajah Dengan Kompartemen Rahasia: 15 Langkah (dengan Gambar)

Video: Cermin Pengenalan Wajah Dengan Kompartemen Rahasia: 15 Langkah (dengan Gambar)
Video: Tak pernah mendua! 2024, Juli
Anonim
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia
Cermin Pengenalan Wajah Dengan Kompartemen Rahasia

Saya selalu tertarik dengan kompartemen rahasia yang selalu kreatif yang digunakan dalam cerita, film, dan sejenisnya. Jadi, ketika saya melihat Kontes Kompartemen Rahasia, saya memutuskan untuk bereksperimen dengan ide itu sendiri dan membuat cermin biasa yang membuka laci samping rahasia ketika orang yang tepat melihatnya.

Dengan memanfaatkan Raspberry Pi, beberapa pengetahuan tentang pemrograman python, dan kelas toko kelas 8, kita dapat membuat perangkat keren ini untuk menyembunyikan objek di depan mata yang hanya dapat diakses oleh pengguna yang benar.

Saya ingin mengucapkan terima kasih khusus kepada orang-orang/platform ini tempat saya mendapatkan informasi dan sumber daya saya juga:

TeCoEd - Saluran Youtube

Emmet dari PiMyLifeUp

MJRoBot di Hackster.io (profil)

Gaven MacDonald - Saluran Youtube

Tucker Shannon di Thingiverse (profil)

Perlengkapan

Persediaan Bingkai:

  • Papan Kayu (Dimensi papan ini adalah 42" kali 7,5" kali 16/5")
  • Bingkai Foto Pensil (dengan kaca)
  • Cat semprot
  • Perekat Reflektif Satu Arah
  • Pembersih & Kain Kaca
  • Kayu MDF

Perlengkapan Pengenalan Wajah:

  • Raspberry Pi (Saya menggunakan Pi 3 B+ tetapi ada opsi lain)
  • Modul Kamera
  • Motor langkah

Peralatan:

  • Meja gergaji
  • Jig Saw
  • AmplasKayu
  • pita lem
  • Ukuran
  • Gunting
  • Botol semprotan
  • Pencetak 3D
  • Lem super

Langkah 1: Pemotongan untuk Bingkai Kotak

Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak
Potongan untuk Bingkai Kotak

Saya membeli bingkai foto dari toko barang bekas. Sekedar peringatan, pastikan bahwa papan yang membentuk bingkai setidaknya memiliki lebar 1 1/2 . Ini agar Anda dapat merekatkan papan kayu lain di atasnya dengan ruang yang cukup untuk dikerjakan. Juga, pastikan kaca masuk bingkai benar-benar jelas. Saya membeli yang buram secara tidak sengaja dan kemudian harus membeli bingkai lain hanya untuk kaca bening. Karena bingkai saya digunakan ukuran untuk bingkai kotak dapat bervariasi.

  • Letakkan bingkai dalam orientasi potret. Ukur sisi panjang (LS) dari sisi lubang kaca pada bingkai dengan tambahan” di bagian atas dan bawah. (yaitu menambahkan satu inci ke sisi panjang pengukuran lubang kaca. Catat ini dan beri label LSM (Pengukuran Sisi Panjang).
  • Demikian pula, ukur sisi atas lubang dan tambahkan 1”. Catat ini dan beri label SSM (Pengukuran Sisi Pendek).
  • Dapatkan papan Anda dan dengan gergaji meja, potong dua LSM x 2” dan dua SSM x 2”.
  • Ambil salah satu potongan LSM dan ukur persegi panjang 2”x1” yaitu 1” dari bawah dan” dari sisi kiri dan kanan (seperti yang ditunjukkan pada gambar 3).
  • Gunakan gergaji ukir untuk memotong lubang. Kemudian gunakan amplas untuk mengampelas pinggirannya.

Langkah 2: Pemotongan untuk Laci

Potongan untuk Laci
Potongan untuk Laci
Potongan untuk Laci
Potongan untuk Laci
Potongan untuk Laci
Potongan untuk Laci
Potongan untuk Laci
Potongan untuk Laci

Sekarang kita akan mulai membuat laci (alias Kompartemen Rahasia).

  • Potong dua sisi 4”x 1”, 3” x 1” (tepi belakang), 4” x 1” (tepi depan), dan 4” x 3” (platform).
  • Rekatkan sisi 4” x 1” pertama di sepanjang sisi 4” platform. Saya meletakkan beberapa lipatan kertas di bawah sisi platform sehingga sedikit terangkat, dengan cara ini tidak akan menyeret lubang yang saya potong di papan LS. Diamkan hingga kering selama 30 menit.
  • Demikian pula, rekatkan 3” x 1” di sepanjang tepi 3” platform. Diamkan hingga kering selama 30 menit. Kemudian rekatkan sisi 4" x 1" kedua di sisi berlawanan dari yang pertama. Diamkan hingga kering selama 30 menit.
  • Sisihkan tepi depan untuk saat ini. Ini akan menjadi benda terakhir yang direkatkan ke laci.
  • Setelah selesai, periksa apakah cocok dengan lubang yang Anda buat di papan LSM. Jika tidak, amplas lubangnya hingga laci mudah masuk dan keluar, dan tidak ada hambatan.

Langkah 3: Menempatkan Bingkai Bersama

Memasang Bingkai Bersama
Memasang Bingkai Bersama
Memasang Bingkai Bersama
Memasang Bingkai Bersama
Memasang Bingkai Bersama
Memasang Bingkai Bersama

Dengan semua bagian yang lengkap, kita dapat mulai merakit keseluruhan bingkai.

  • Rekatkan papan LSM di tengah dengan lubang kaca dengan” di setiap sisinya. Pastikan direkatkan dengan” menjauhi lubang (seperti yang ditunjukkan pada gambar 1). Diamkan hingga kering selama 30 menit.
  • Rekatkan papan SSM pertama dengan ujung menyentuh bagian dalam papan LSM yang baru saja direkatkan. (Gunakan penggaris untuk memastikannya terpaku lurus). Diamkan hingga kering selama 30 menit.
  • Ambil sisi LSM lainnya dan rekatkan seperti yang pertama. Pastikan jaraknya” dari lubang dan SSM yang baru saja dipasang direkatkan di bagian dalam papan. Diamkan hingga kering selama 30 menit.
  • Rekatkan SSM terakhir di tepi atas. Karena Anda memiliki dua LSM di kedua sisi, tergantung pada seberapa lurus Anda memasangnya, Anda mungkin perlu mengampelas sisi SSM ke bawah untuk memastikannya pas (pemotongan saya terkadang tidak aktif). Diamkan hingga kering selama 30 menit.
  • Ukur ruang kecil antara bagian bawah laci dan bingkai. Potong sepotong kayu MDF dengan ukuran ini, sebesar 4". Anda ingin membuat potongan ini dekat dengan laci tetapi tidak menyentuhnya. Ini dimaksudkan untuk menopang laci dengan gesekan minimal.
  • Setelah semua selesai, saya menyemprot bingkai agar semua bagian cocok.

Langkah 4: Untuk Cermin

Untuk Cermin
Untuk Cermin
Untuk Cermin
Untuk Cermin
Untuk Cermin
Untuk Cermin
Untuk Cermin
Untuk Cermin

Perekat film satu arah yang saya beli dari Amazon sekitar $10. Ada yang kualitas lebih baik yang sedikit lebih mahal jika Anda tertarik. Yang saya gunakan mencerminkan tetapi Anda dapat mengatakan itu bukan cermin biasa yang akan Anda lihat di rumah. Yang lebih mahal akan membuat Anda terlihat seperti itu.

  • Bersihkan kaca dengan pembersih kaca di kedua sisi.
  • Buka gulungan perekat satu arah dan letakkan kaca di atasnya. Potong perekat sehingga setidaknya ada”kelebihan di setiap sisi kaca.
  • Sisihkan gelas dan basahi salah satu sisinya dengan air. Kemudian lepaskan lapisan plastik dari perekat satu arah dan semprot sisi yang baru terbuka dengan air.
  • Tempatkan sisi basah kaca di sisi basah perekat. Diamkan selama 30 menit.
  • Balikkan dan gunakan ibu jari Anda untuk meratakan gelembung di antara perekat dan kaca. Kemudian potong kelebihan perekat dari sekitar tepinya.

Langkah 5: Instal Peregangan Raspbian

Ini adalah pertama kalinya saya mempelajari lingkungan Raspberry Pi, saya mulai mencari instruksi tentang cara menginstal OS. Saya akhirnya menemukan tutorial langsung di Youtube oleh TeCoEd yang melalui proses menginstal Stretch pada kartu SD (dengan pengantar yang agak bagus juga). Ini link tutorialnya:

Intinya, yang perlu Anda lakukan adalah:

  • Format kartu SD dengan memilih Drive >> Alat Drive >> Format. Unduh file ZIP untuk Raspian Stretch (dapat ditemukan di sini:
  • Flash gambar OS ke Kartu SD. TeCoEd menggunakan Win32 Disk Imager untuk menyelesaikan ini. Saya akhirnya menginstal balenaEtcher yang tampak sedikit lebih mudah. (Berikut ini tautan unduhan untuk balenaEtcher:
  • Setelah di balenaEtcher pilih "Flash From File" dan pilih file ZIP yang diunduh sebelumnya. Selanjutnya, pilih kartu SD yang diinginkan (jika tidak dipilih secara otomatis). Kemudian tekan tombol flash yang berair dan tunggu keajaiban terjadi.

Setelah diinstal pada kartu SD, Anda dapat memasukkannya ke dalam Raspberry Pi dan melalui proses penyiapan Pi generik.

Langkah 6: Instal OpenCV

Sekarang ke bagian yang lebih berorientasi pada Pengenalan Wajah. Untuk mengenali wajah, kita harus mengunduh perpustakaan OpenCV yang berisi sejumlah besar alat untuk bekerja dengan visi komputer.

Menginstal OpenCV adalah bagian yang paling sulit dari aspek perangkat lunak bagi saya. Tetapi setelah mengikuti banyak instruksi, saya akhirnya menemukan tutorial oleh Emmet dari PiMyLifeUp yang melakukan trik yang ditemukan di sini:

Saya tidak akan mengikuti langkah-langkah ini karena Anda akan lebih cocok mengikutinya dari tautan (dengan penjelasan yang diberikan dan kemampuan untuk menyalin dan menempel langsung dari situs dengan lebih mudah).

Langkah 7: Aktifkan/Uji Kamera

Aktifkan/Uji Kamera
Aktifkan/Uji Kamera
Aktifkan/Uji Kamera
Aktifkan/Uji Kamera

Setelah menginstal OpenCV, sisa perjalanan saya selesai menggunakan tutorial oleh MJRoBot di Hackster.io ditemukan di sini:

Sebelum kita mulai, saya ingin mengingatkan Anda bahwa saya bukan pencipta asli skrip-skrip ini tetapi pada akhirnya memodifikasi bagian-bagiannya.

Untuk memulai, kita harus menguji kamera untuk memastikan kita dapat merekam video di layar. Saya menghabiskan sekitar satu jam mencoba menjalankan skrip yang disediakan di Langkah 3 MJRoBot. Seperti kehidupan kita sebenarnya perlu mengaktifkan kamera pada Raspberry Pi (ternyata mungkin ide yang baik untuk membaca instruksi yang diberikan … mmm nah). Jadi setelah menghubungkan Kamera ke port yang benar, ikuti langkah-langkah ini:

  • Buka terminal perintah dan ketik sudo raspi-config
  • Pilih "Aktifkan Kamera" (ini mungkin ditemukan di bawah opsi perangkat)
  • Tekan "Masuk"
  • Pergi ke "Selesai" Dan Anda akan diminta untuk reboot

Kemudian ikuti langkah-langkah ini:

  • Buka Menu Utama Raspberry (Kiri atas)
  • Preferensi
  • Konfigurasi Raspberry Pi
  • Antarmuka
  • Kemudian di Kamera, pilih "Diaktifkan"
  • Kemudian “Oke”

Sekarang Anda harus berhasil menjalankan skrip ini dari tutorial MJRoBot untuk menguji kamera (ingat bahwa semua kode ini ditambah deskripsi yang lebih mendalam ditemukan di tautan yang disediakan di atas ke tutorial MJRobot):

impor numpy sebagai np

import 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. flip(bingkai, -1) # Membalik kamera secara vertikal abu-abu = cv2.cvtColor(bingkai, cv2. COLOR_BGR2GRAY) cv2.imshow('bingkai', bingkai) cv2.imshow('abu-abu', abu-abu) k = cv2.waitKey(30) & 0xff jika k == 27: # tekan 'ESC' untuk keluar dari break cap.release() cv2.destroyAllWindows()

Kode sebelumnya akan menampilkan dua jendela, satu berwarna dan yang lainnya dalam skala abu-abu. Jika Anda berhasil sejauh ini, saya pikir Anda pantas mendapatkan sandwich yang enak.

Langkah 8: Mengumpulkan Data dan Data Pelatihan

Mengumpulkan Data dan Data Pelatihan
Mengumpulkan Data dan Data Pelatihan
Mengumpulkan Data dan Data Pelatihan
Mengumpulkan Data dan Data Pelatihan
Mengumpulkan Data dan Data Pelatihan
Mengumpulkan Data dan Data Pelatihan

Dalam tutorial yang disediakan, penulis membahas lebih dalam tentang proses kode yang akan segera diberikan, tetapi karena ini adalah instruksi tentang bagaimana cermin ini dibuat, saya tidak akan membahas secara mendalam tentang sejarah atau mekanika yang rumit. Namun saya menyarankan Anda mengambil satu bulan hidup Anda membaca tentang dua hal ini karena mereka dapat melayani pikiran Anda dengan baik.

Hanya ada sekitar tiga skrip lagi yang harus dijalankan sebelum kita bisa menjalankan semuanya. Yang pertama adalah untuk mengumpulkan data, yang kedua untuk melatihnya dan yang terakhir sebenarnya untuk pengenalan. Pengumpulan data membutuhkan gambar wajah yang sebenarnya untuk diambil dan disimpan di tempat tertentu untuk pelatihan. Pembuat kode ini membuatnya sangat mudah untuk menyelesaikan semua ini, jadi saya sarankan mengikuti petunjuk ini untuk menghindari sakit kepala.

Buka baris perintah dan buat direktori baru menamakannya sesuatu yang menyenangkan (saya memanggil milik saya FaceRec)

mkdir FaceRec

Sekarang, ubah direktori ke FaceRec dan buat subdirektori dengan memberi nama dataset

cd FaceRec

kumpulan data mkdir

Sementara kami melakukannya, kami juga dapat membuat subdirektori lain bernama trainer

pelatih mkdir

Sekarang Anda dapat menjalankan dan mengikuti petunjuk skrip pertama yang akan menangkap gambar pengguna. (Hanya peringatan, pastikan untuk memasukkan id pengguna sebagai 1, 2, 3 dll.)

import cv2import os cam = cv2. VideoCapture(0) cam.set(3, 640) # atur lebar video cam.set(4,480) # atur tinggi video face_detector = cv2. CascadeClassifier('haarcascade_frontalface_default.xml') # Untuk masing-masing orang, masukkan satu id wajah numerik face_id = input('\n masukkan id pengguna akhir tekan ==> ') print("\n [INFO] Inisialisasi pengambilan wajah. Lihat kamera dan tunggu …") # Inisialisasi jumlah sampel wajah individu count = 0 while(Benar): ret, img = cam.read() img = cv2.flip(img, -1) # membalik gambar video secara vertikal abu-abu = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) face = face_detector.detectMultiScale (abu-abu, 1.3, 5) untuk (x, y, w, h) pada wajah: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) count += 1 # Simpan gambar yang diambil ke dalam folder kumpulan data cv2.imwrite("dataset/User." + str(face_id) + '.' + str(count) + ".jpg", abu-abu[y:y +h, x:x+w]) cv2.imshow('image', img) k = cv2.waitKey(100) & 0xff # Tekan 'ESC' untuk keluar dari video jika k == 27: break elif count >= 30: # Ambil 30 sampel wajah dan hentikan video bre k print("\n [INFO] Keluar dari Program dan pembersihan") cam.release() cv2.destroyAllWindows()

Pada titik ini pastikan Anda telah memasang bantal di Pi. Jika tidak, jalankan perintah:

bantal pasang pip

Setelah itu selesai, Anda dapat menjalankan skrip pelatihan (skrip kedua) yang dengan mulus akan memberi Anda file.yaml yang akan digunakan dalam skrip akhir

import cv2import numpy as np from PIL import Image import os # Path for face image database path = 'dataset' Recognizer = cv2.face. LBPHFaceRecognizer_create() detector = cv2. CascadeClassifier("haarcascade_frontalface_default.xml"); # berfungsi untuk mendapatkan gambar dan data label def getImagesAndLabels(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] faceSamples= ids = for imagePath in imagePaths: PIL_img = Image.open(imagePath).convert('L') # mengubahnya menjadi skala abu-abu img_numpy = np.array(PIL_img, 'uint8') id = int(os.path.split(imagePath)[-1]. split(".")[1]) wajah = detector.detectMultiScale(img_numpy) untuk (x, y, w, h) di wajah: faceSamples.append(img_numpy[y:y+h, x:x+w]) ids.append(id) return faceSamples, ids print ("\n [INFO] Pelatihan wajah. Ini akan memakan waktu beberapa detik. Tunggu …") face, ids = getImagesAndLabels(path) Recognizer.train(faces, np.array(id)) # Simpan model ke dalam trainer/trainer.yml Recognizer.write('trainer/trainer.yml') # Recognizer.save() bekerja di Mac, tapi tidak di Pi # Cetak jumlah wajah yang dilatih dan akhiri pencetakan program ("\n [INFO] {0} wajah terlatih. Keluar Program".format(len(np.unique(id))))

Apa yang keren dari kumpulan skrip ini adalah bahwa banyak wajah dapat dimasukkan ke dalam sistem yang berarti banyak individu dapat mengakses bagian dalam cermin jika diinginkan.

Di bawah ini saya memiliki skrip Pengambilan Data dan skrip Pelatihan yang tersedia untuk diunduh.

Langkah 9: Waktu Pengenalan Wajah

Waktu Pengenalan Wajah
Waktu Pengenalan Wajah
Waktu Pengenalan Wajah
Waktu Pengenalan Wajah

Akhirnya, kita dapat menjalankan skrip pengenal. Lebih banyak kode ditambahkan ke skrip ini untuk membuat proses motor berfungsi, jadi saya akan menjelaskan bagian-bagian itu sedikit lebih menyeluruh. Saya akan memecahnya menjadi beberapa bagian tetapi saya akan meletakkan seluruh skrip di akhir langkah jika itu yang Anda cari.

Kita akan mulai dengan mengimpor semua modul yang kita perlukan dan kemudian mengatur mode GPIO ke GPIO. BCM

impor numpy sebagai np

waktu impor os impor RPi. GPIO sebagai GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO. BCM)

Daftar berikutnya bernama ControlPin ini adalah array angka yang mewakili pin output yang akan digunakan untuk motor stepper kita.

ControlPin = [14, 15, 18, 23]

For-loop menetapkan pin ini sebagai Output dan kemudian memastikan bahwa pin tersebut dimatikan. Saya masih memiliki beberapa kode di sini untuk membiarkan laci menutup dengan menekan tombol, tetapi saya memutuskan untuk menggunakan pengatur waktu.

GPIO.setup(ControlPin, GPIO. OUT)

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

Dua variabel berikutnya adalah urutan yang akan kita gunakan untuk menggerakkan motor. Saya mempelajari informasi ini dari video yang luar biasa oleh Gaven MacDonald yang sangat saya rekomendasikan untuk ditonton saat dia membahas lebih dalam bukan hanya tentang kode tetapi juga motor yang sebenarnya (ditemukan di sini: https://www.youtube.com/embed/Dc16mKFA7Fo). Intinya, setiap urutan akan diulang dengan menggunakan for-loop bersarang di fungsi openComp dan closeComp yang akan datang. Jika Anda melihat lebih dekat seq2 adalah kebalikan dari seq1. Ya, Anda dapat menebaknya. Salah satunya adalah untuk menggerakkan motor ke depan dan yang lainnya untuk mundur.

seq1 =

seq2 =

Dimulai dengan fungsi openComp kami, kami membuat for-loop yang akan berulang 1024 kali. Menurut video MacDonald, iterasi 512 akan memberikan putaran penuh motor dan saya menemukan bahwa sekitar dua putaran adalah panjang yang baik tetapi ini dapat disesuaikan tergantung pada ukuran individu. For-loop berikutnya terdiri dari 8 iterasi untuk memperhitungkan 8 array yang ditemukan di seq1 dan seq2. Dan akhirnya, for-loop terakhir mengulangi empat kali untuk empat item yang ditemukan di masing-masing array ini serta 4 pin GPIO yang terhubung dengan motor kita. Baris di bawah ini memilih pin GPIO dan kemudian menyalakan atau mematikannya tergantung pada iterasinya. Baris setelahnya menyediakan waktu penyangga agar motor kita tidak berputar sama sekali. Setelah motor berputar untuk memindahkan laci keluar, ia tidur selama 5 detik sebelum melanjutkan. Waktu ini dapat disesuaikan di sini atau Anda dapat mengaktifkan kode yang dikomentari yang memungkinkan penggunaan tombol tekan untuk meneruskan dengan skrip daripada penghitung waktu.

untuk saya dalam jangkauan (1024):

untuk halfstep in range(8): untuk pin in range(4): GPIO.output(ControlPin[pin], seq1[halfstep] [pin]) time.sleep(.001) ''' while True: if GPIO.input (2) == GPIO. LOW: break;''' time.sleep(5)

Fungsi closeComp bekerja dengan cara yang sama. Setelah motor bergerak mundur, saya melanjutkan untuk menyetel pin GPIO terakhir kami ke rendah untuk memastikan kami tidak membuang-buang energi dan kemudian saya menambahkan tiga detik lagi sebelum melanjutkan.

untuk saya dalam jangkauan (1024):

untuk halfstep in range(8): untuk pin in range(4): GPIO.output(ControlPin[pin], seq2[halfstep] [pin]) time.sleep(.001) print("Compartment Closed") GPIO.output (ControlPin[0], 0) GPIO.output(ControlPin[3], 0) waktu.tidur(3)

Sebagian besar bagian selanjutnya digunakan untuk menyiapkan kamera dan memulai pengenalan wajah. Sekali lagi, instruksi MKRoBot masuk ke bagian lebih banyak tetapi untuk saat ini, saya hanya menunjukkan bagian yang digunakan untuk cermin.

Pertama saya mengubah nama daftar sehingga nama saya ada di indeks yang saya tetapkan saat mengumpulkan data (dalam kasus saya 1). Dan kemudian saya mengatur sisa nilai ke None karena saya tidak memiliki wajah lagi di dataset.

nama = ['Tidak Ada', 'Daniel', 'Tidak Ada', 'Tidak Ada', 'Tidak Ada', 'Tidak Ada']

Beberapa baris kode terakhir kami diimplementasikan dalam thicc for-loop. Saya membuat variabel untuk menyimpan kepercayaan sebagai bilangan bulat (intConfidence) sebelum kepercayaan variabel diubah menjadi string. Kemudian saya menggunakan pernyataan if untuk memeriksa apakah kepercayaan lebih besar dari 30 dan jika id (orang mana yang dideteksi komputer, dalam hal ini, "Daniel") sama dengan nama saya. Setelah ini dikonfirmasi, fungsi openComp dipanggil yang (seperti yang dijelaskan sebelumnya) menggerakkan motor, menendang keluar setelah 5 detik, dan kemudian melanjutkan ke closeComp yang menggerakkan motor ke arah yang berlawanan dan melakukan pembersihan sebelum melanjutkan dengan loop thic.

jika intConfidence > 30 dan id == 'Daniel':

openComp() tutupComp()

Bug yang saya temukan di sini adalah bahwa terkadang setelah closeComp kembali, kode berlanjut tetapi pernyataan if bersyarat ternyata benar lagi seolah-olah sedang membaca umpan video yang masih dalam buffer. Meskipun itu tidak terjadi setiap kali saya belum menemukan cara untuk memastikan itu tidak pernah terjadi, jadi jika ada yang punya ide, beri tahu saya di komentar.

Inilah seluruh skrip di satu tempat (dan tepat di bawah ini adalah yang dapat diunduh):

impor cv2

import numpy as np import os import time import RPi. GPIO as GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO. BCM) ControlPin = [14, 15, 18, 23] for i in range(4): GPIO.setup (ControlPin, GPIO. OUT) GPIO.output(ControlPin, 0) GPIO.setup(2, GPIO. IN, pull_up_down=GPIO. PUD_DOWN) seq1 =

Langkah 10: Memasang Pi dan Menghubungkan Motor

Memasang Pi dan Menghubungkan Motor
Memasang Pi dan Menghubungkan Motor
Memasang Pi dan Menghubungkan Motor
Memasang Pi dan Menghubungkan Motor
Memasang Pi dan Menghubungkan Motor
Memasang Pi dan Menghubungkan Motor

Memasang Raspberry Pi ke bingkai agak sederhana. Saya merancang siku 90 derajat kecil dengan satu wajah memiliki lubang dan sisi lainnya benar-benar rata. Setelah mencetak 3D, dua di antaranya dapat dipasang dengan sekrup ke Raspberry Pi pada lubang pemasangannya (saya menggunakan dua lubang di setiap sisi pin GPIO).

Saya kemudian melanjutkan untuk menggunakan lem super pada permukaan yang berlawanan dari siku yang dicetak 3D untuk merekatkan Pi tepat di atas laci pada bingkai. Setelah membiarkan lem mengering, saya dapat melepas atau mengganti Pi ke posisinya dengan mudah dan nyaman hanya dengan dua sekrup. Saya memiliki.stl untuk siku yang ditautkan di bawah.

Sekarang cukup hubungkan driver motor ke PI dengan IN1, IN2, IN3, IN4 masing-masing terhubung ke GPIO 14, 15, 18, 23. Terakhir, sambungkan pin 5v dan Ground dari papan pengontrol ke output 5v dan pin Ground dari Pi.

Berikut tautan ke Pi's Pinout untuk beberapa referensi:

Langkah 11: Memasang Kamera

Memasang Kamera
Memasang Kamera
Memasang Kamera
Memasang Kamera
Memasang Kamera
Memasang Kamera

Memasang Kamera sedikit kurang kuat daripada Pi tetapi metode ini menyelesaikan pekerjaan. Setelah merancang dan mencetak balok tipis dengan 2 lubang di setiap ujungnya, saya memasang balok ke Rasberry Pi melalui lubang pemasangannya. Kemudian cukup pasang kamera ke ujung balok yang berlawanan dengan sekrup lain. Ta-da! Ini terlihat sangat terbang.

Langkah 12: Membuat dan Memasang Mekanisme-Bergerak Laci

Membuat dan Memasang Mekanisme-Bergerak-Laci
Membuat dan Memasang Mekanisme-Bergerak-Laci
Membuat dan Memasang Mekanisme-Bergerak-Laci
Membuat dan Memasang Mekanisme-Bergerak-Laci
Membuat dan Memasang Mekanisme-Bergerak-Laci
Membuat dan Memasang Mekanisme-Bergerak-Laci

Langkah ini menjadi mudah berkat hadiah yang selalu baik dari komunitas pembuat. Setelah pencarian cepat di Thingiverse, saya dapat menemukan aktuator linier yang dibuat oleh TucksProjects (ditemukan di sini: https://www.thingiverse.com/thing:2987762). Yang tersisa untuk dilakukan hanyalah menempelkannya pada kartu SD dan membiarkan printer melakukan pekerjaannya.

Saya akhirnya masuk ke Fusion 360 dan mengedit memacu karena poros motor saya terlalu besar untuk yang disediakan oleh TucksProjects. Saya memiliki.stl untuk itu di bawah ini. Setelah pencetakan selesai, kita hanya perlu merakitnya dengan menempatkan taji pada poros motor, kemudian dengan memasang 2 sekrup pada sisi motor dan penutup (pastikan Anda meletakkan rak di antara sebelum menutupnya). Saya akhirnya harus memotong satu inci dari rak sehingga muat di antara laci dan bingkai.

Sekarang yang tersisa hanyalah memasang mekanisme ke bingkai dan laci. “Tapi BAGAIMANA KITA MELAKUKANNYA?” Anda bertanya … yup, katakan dengan saya: Super Glue. Seperti yang ditunjukkan pada gambar di atas, cukup letakkan mekanisme di bagian bawah bingkai dan dorong ke atas potongan kayu tempat laci digeser. Sangat penting di sini bahwa Anda mencoba untuk mendapatkan rak/mekanisme separalel mungkin dengan bingkai sehingga ketika mekanisme bergerak mendorong laci lurus dan tidak miring. Setelah lem mengering, letakkan lem lagi di tepi rak dan pindahkan laci ke posisinya dan biarkan mengering. Setelah selesai, kami memiliki mekanisme yang kokoh untuk menggeser laci rahasia kami masuk dan keluar.

Langkah 13: Menambahkan Karton Dibalik Cermin

Menambahkan Karton Dibalik Cermin
Menambahkan Karton Dibalik Cermin
Menambahkan Karton Dibalik Cermin
Menambahkan Karton Dibalik Cermin
Menambahkan Karton Dibalik Cermin
Menambahkan Karton Dibalik Cermin

Untuk membuat film dua arah ini terlihat lebih seperti cermin, saya menemukan bahwa ini berguna untuk menempatkan karton di belakang kaca. Karton yang digunakan adalah yang disertakan dengan bingkai tetapi potongan apa pun yang sesuai akan berfungsi. Ini juga memastikan tidak ada cahaya dari LED kamera, pengontrol motor, atau tampilan Pi di sisi lain cermin. Dengan segala sesuatu di tempatnya gunakan pensil untuk menandai di mana kamera berada di karton. Kemudian gunakan pisau cukur untuk memotong persegi panjang sehingga kamera dapat mengintip saat berada di tempatnya.

Langkah 14: Memasang Potongan Terakhir

Memasang Potongan Terakhir
Memasang Potongan Terakhir
Memasang Potongan Terakhir
Memasang Potongan Terakhir

Hal terakhir yang harus dilakukan adalah meletakkan bagian depan laci yang telah disisihkan tadi. Pindahkan motor sehingga laci menonjol. Kemudian rekatkan bagian depan agar bagian laci berada di tengah (harus ada sedikit penggantung di semua sisi. Kemudian Anda bisa menggantungnya di dinding.

Langkah 15: Final

Akhir
Akhir
Akhir
Akhir

Di sana Anda memilikinya! Ada beberapa perbaikan yang dapat dilakukan seperti menambahkan tombol tekan itu, membeli beberapa film dua arah yang lebih baik dan memperbaiki bug itu dalam kode tetapi secara keseluruhan, itu menyelesaikan pekerjaan: itu terlihat seperti cermin, ia mengenali yang telah ditentukan wajah pengguna dan itu membuka laci kecil yang lucu itu. Seperti biasa saya akan senang mendengar pemikiran, pertanyaan, dan memoar Anda di komentar di bawah.

Peringkat Keseluruhan: 10/10

Komentar: #WouldNotTryAgain…kecuali saya bisa mengikuti instruksi ini;)

Tantangan Kompartemen Rahasia
Tantangan Kompartemen Rahasia
Tantangan Kompartemen Rahasia
Tantangan Kompartemen Rahasia

Hadiah Utama dalam Tantangan Kompartemen Rahasia

Direkomendasikan: