- Komponen Diperlukan
- Memasang OpenCV di Raspberry Pi
- Memasang Pakej Yang Diperlukan yang lain
- Memprogramkan Raspberry Pi
- Menguji Sistem Pengesanan Mengantuk Pemandu
Pemandu lori yang mengangkut muatan dan bahan berat dalam jarak jauh pada waktu siang dan malam, mereka sering mengalami kekurangan tidur. keletihan dan mengantuk adalah antara penyebab utama berlakunya kemalangan besar di Lebuhraya. Industri automobil mengusahakan beberapa teknologi yang dapat mengesan rasa mengantuk dan memberi amaran kepada pemandu.
Dalam projek ini, kita akan membina Sistem Sensasi Tidur dan Peringatan untuk Pemandu yang menggunakan modul kamera Raspberry Pi, OpenCV, dan Pi. Tujuan asas sistem ini adalah untuk mengesan keadaan muka dan pergerakan mata pemandu dan jika pemandu merasa mengantuk, sistem akan mencetuskan mesej amaran. Ini adalah lanjutan dari aplikasi pengesanan mercu tanda wajah dan pengenalan wajah kami sebelumnya.
Komponen Diperlukan
Komponen Perkakasan
- Raspberry Pi 3
- Modul Kamera Pi
- Kabel USB Mikro
- Buzzer
Perisian dan Perkhidmatan Dalam Talian
- OpenCV
- Dlib
- Python3
Sebelum meneruskan projek pengesanan mengantuk pemandu ini , pertama, kita perlu memasang OpenCV, imutils, dlib, Numpy, dan beberapa pergantungan lain dalam projek ini. OpenCV digunakan di sini untuk pemprosesan gambar digital. Aplikasi Pemprosesan Imej Digital yang paling biasa adalah pengesanan objek, Pengecaman Wajah, dan penghitungan orang.
Di sini kita hanya menggunakan Raspberry Pi, Pi Camera, dan buzzer untuk membina sistem pengesanan Tidur ini.
Memasang OpenCV di Raspberry Pi
Sebelum memasang OpenCV dan pergantungan lain, Raspberry Pi perlu dikemas kini sepenuhnya. Gunakan arahan di bawah ini untuk mengemas kini Raspberry Pi ke versi terbarunya:
sudo apt-get kemas kini
Kemudian gunakan arahan berikut untuk memasang dependensi yang diperlukan untuk memasang OpenCV pada Raspberry Pi anda.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev -y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Akhirnya, pasang OpenCV pada Raspberry Pi menggunakan arahan di bawah.
pip3 memasang opencv-contrib-python == 4.1.0.25
Sekiranya anda baru menggunakan OpenCV, periksa tutorial OpenCV kami sebelumnya dengan Raspberry pi:
- Memasang OpenCV pada Raspberry Pi menggunakan CMake
- Pengecaman Muka Masa Nyata dengan Raspberry Pi dan OpenCV
- Pengiktirafan Plat Lesen menggunakan Raspberry Pi dan OpenCV
- Anggaran Ukuran Orang Ramai Menggunakan OpenCV dan Raspberry Pi
Kami juga telah membuat siri tutorial OpenCV bermula dari peringkat pemula.
Memasang Pakej Yang Diperlukan yang lain
Sebelum memprogramkan Raspberry Pi for Drowsiness Detector, mari pasang pakej lain yang diperlukan.
Memasang dlib: dlib adalah toolkit moden yang mengandungi algoritma Pembelajaran Mesin dan alat untuk masalah dunia nyata. Gunakan arahan di bawah untuk memasang dlib.
pip3 pasang dlib
Memasang NumPy: NumPy adalah perpustakaan teras untuk pengkomputeran saintifik yang mengandungi objek array n-dimensi yang kuat, menyediakan alat untuk mengintegrasikan C, C ++, dll.
pip3 memasang numpy
Memasang modul face_recognition: Perpustakaan ini digunakan untuk Mengenali dan memanipulasi wajah dari Python atau baris perintah. Gunakan arahan di bawah untuk memasang pustaka pengenalan wajah.
Pip3 memasang face_recognition
Dan terakhir, pasang perpustakaan eye_game menggunakan arahan di bawah:
pip3 memasang permainan mata
Memprogramkan Raspberry Pi
Kod lengkap untuk Pengesan Mengantuk Pemandu Menggunakan OpenCV diberikan di akhir halaman. Di sini kami menerangkan beberapa bahagian penting kod untuk pemahaman yang lebih baik.
Jadi, seperti biasa, mulakan kod dengan memasukkan semua perpustakaan yang diperlukan.
import face_recognition import cv2 import numpy sebagai np import time import cv2 import RPi.GPIO sebagai GPIO import eye_game
Selepas itu, buat contoh untuk mendapatkan suapan video dari kamera pi. Sekiranya anda menggunakan lebih daripada satu kamera, ganti sifar dengan satu dalam fungsi cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Sekarang di baris seterusnya, masukkan nama fail dan jalan fail. Dalam kes saya, kedua-dua kod dan fail berada dalam folder yang sama. Kemudian gunakan pengekodan wajah untuk mendapatkan lokasi wajah dalam gambar.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Selepas itu buat dua tatasusunan untuk menyelamatkan wajah dan nama mereka. Saya hanya menggunakan satu gambar; anda boleh menambah lebih banyak gambar dan jalannya dalam kod.
dikenali_face_encodings = known_face_names =
Kemudian buat beberapa pemboleh ubah untuk menyimpan lokasi bahagian wajah, nama wajah, dan pengekodan.
face_locations = face_encodings = face_names = process_this_frame = Betul
Di dalam fungsi sementara , tangkap bingkai video dari streaming dan ubah ukuran bingkai menjadi lebih kecil dan juga ubah bingkai yang ditangkap menjadi warna RGB untuk pengecaman wajah.
ret, frame = video_capture.read () small_frame = cv2. resize (bingkai, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Selepas itu, jalankan proses pengecaman wajah untuk membandingkan wajah dalam video dengan gambar. Dan juga dapatkan lokasi bahagian muka.
if process_this_frame: face_locations = face_recognition.face_locations (rgb_small_frame) face_encodings = face_recognition.face_encodings (rgb_small_frame, face_locations) cv2.imwrite (fail, bingkai_ kecil)
Sekiranya wajah yang dikenali sesuai dengan wajah dalam gambar, kemudian panggil fungsi permainan mata untuk mengesan pergerakan mata. Kod ini akan berulang kali mengesan kedudukan mata dan bola mata.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) jika sesuai: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Sekiranya kod tersebut tidak mengesan pergerakan mata selama 10 saat, maka kod tersebut akan mencetuskan penggera untuk membangunkan orang tersebut.
lain: hitung = 1 + hitung cetak (hitung) jika (kiraan> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) cetak ("Makluman! ! Makluman !! Mengantuk Pemandu Dikesan ")
Kemudian gunakan fungsi OpenCV untuk melukis segi empat tepat di seluruh wajah dan meletakkan teks di atasnya. Juga, tunjukkan bingkai video menggunakan fungsi cv2.imshow .
cv2.rectangle (bingkai, (kiri, atas), (kanan, bawah), (0, 255, 0), 2) cv2.rectangle (bingkai, (kiri, bawah - 35), (kanan, bawah), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (bingkai, nama, (kiri + 6, bawah - 6), fon, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', bingkai) Tetapkan Kekunci 'S' untuk menghentikan kodnya. jika cv2.waitKey (1) & 0xFF == ord ('s'): rehat
Menguji Sistem Pengesanan Mengantuk Pemandu
Setelah kod siap, sambungkan kamera dan buzzer Pi ke Raspberry Pi dan jalankan kodnya. Setelah Lebih kurang 10 saat, tetingkap akan muncul dengan penstriman langsung dari kamera Raspberry Pi anda. Apabila peranti mengenali wajah, ia akan mencetak nama anda di bingkai dan mula mengesan pergerakan mata. Sekarang tutup mata anda selama 7 hingga 8 saat untuk menguji penggera. Apabila jumlahnya melebihi 10, ia akan mencetuskan penggera, memberi tahu anda tentang keadaannya.
Ini adalah bagaimana anda boleh membina Pengesan Mengantuk menggunakan OpenCV dan Raspberry Pi. Tatal ke bawah untuk video dan Kod yang berfungsi.