Teks lengkapnya adalah 3641 kata dan waktu pembelajaran yang diharapkan adalah 17 menit
Sumber: unsplash
Ada ribuan jalan, keselamatan dulu! Kelelahan mengemudi dapat digambarkan sebagai salah satu penyebab utama terjadinya kecelakaan lalu lintas Menurut sebuah penelitian di Amerika Serikat, pengemudi tidur kurang dari 4 jam dan kemungkinan terjadinya kecelakaan lalu lintas setara dengan mengemudi dalam keadaan mabuk.
Untuk mengurangi fenomena kelelahan mengemudi, deteksi kelelahan pengemudi muncul. Ini merupakan teknologi keselamatan yang dapat mencegah terjadinya kecelakaan keselamatan yang disebabkan oleh kelelahan pengemudi selama berkendara.
Tujuan dari proyek perantara Python ini adalah untuk membangun sistem pendeteksi kelelahan pengemudi untuk mendeteksi lamanya waktu mata manusia tertutup. Ketika mendeteksi bahwa pengemudi lelah, sistem akan mengeluarkan peringatan.
Sistem deteksi kelelahan pengemudi
Proyek Python ini akan menggunakan OpenCV untuk mengumpulkan gambar dari webcam dan memasukkannya ke dalam model "pembelajaran mendalam", yang mengklasifikasikan mata manusia sebagai "terbuka" atau "tertutup". Pendekatan yang diambil oleh proyek Python adalah sebagai berikut:
Langkah 1-Dapatkan gambar dari kamera sebagai input.
Langkah 2-Deteksi wajah pada gambar dan buat wilayah minat (ROI).
Langkah 3-Deteksi mata manusia dari ROI dan masukkan ke dalam pengklasifikasi.
Langkah 4-Pengklasifikasi akan mengklasifikasikan mata manusia dengan membuka atau menutup.
Langkah 5-Hitung skor untuk menentukan apakah pengemudi lelah.
Sebelum mempelajari prasyarat, kumpulan data dan struktur model, jika Anda seorang pemula, Anda disarankan untuk merujuk ke Python MasterSheet untuk terlebih dahulu memahami semua konsep yang diperlukan oleh bahasa pemrograman Python.
prasyarat
Proyek Python ini membutuhkan webcam untuk mengambil gambar. Anda perlu menginstal Python di sistem Anda (versi 3.6 disarankan), lalu gunakan pip untuk menginstal paket yang diperlukan.
· OpenCV-Gunakan pip untuk menginstal opencv-python (deteksi wajah dan mata).
· TensorFlow-Gunakan pip untuk menginstal tensorflow (keras menggunakan TensorFlow sebagai backend).
· Keras-Gunakan pip untuk menginstal keras (membangun model klasifikasi).
· Pygame-Gunakan pip untuk menginstal pygame (mainkan nada peringatan).
Himpunan data
Perlu membuat kumpulan data untuk model ini. Untuk membuat kumpulan data, kami menulis skrip untuk menangkap gambar mata manusia dari kamera dan menyimpannya di disk lokal. Gambar mata manusia dibagi menjadi dua jenis: "terbuka" atau "tertutup". Gambar diperlukan untuk membersihkan data secara manual.
Data tersebut mencakup sekitar 7000 gambar mata manusia dalam kondisi pencahayaan yang berbeda. Setelah melatih model pada dataset, kami melampirkan bobot akhir dan file struktur model "models /cnnCat2.h5". Sekarang, Anda dapat menggunakan model ini untuk mengklasifikasikan gambar menurut apakah mata manusia terbuka atau tertutup.
Sumber: unsplash
Struktur model
Model yang kami gunakan dibangun oleh Keras melalui jaringan saraf konvolusional (CNN). Jaringan neural konvolusional adalah jenis jaringan saraf dalam khusus yang memiliki performa sangat baik dalam klasifikasi gambar.
CNN pada dasarnya terdiri dari lapisan masukan, lapisan keluaran, dan lapisan tersembunyi yang dapat berisi banyak lapisan. Operasi konvolusi dilakukan pada lapisan ini melalui filter, yang melakukan perkalian matriks 2D pada lapisan dan filter.
Struktur model CNN mencakup lapisan berikut:
· Lapisan konvolusional; 32 node, ukuran kernel 3
· Lapisan konvolusional; 32 node, ukuran kernel 3
· Lapisan konvolusional; 64 node, ukuran kernel 3
· Lapisan yang terhubung sepenuhnya; 128 node
Lapisan terakhir juga merupakan lapisan yang terhubung sepenuhnya dengan 2 node. Di semua lapisan, kecuali untuk lapisan keluaran menggunakan Softmax, fungsi aktivasi Relu digunakan.
Langkah-langkah untuk mendeteksi kelelahan pengemudi dalam proyek Python
Unduh kode sumber proyek python dari zip dan ekstrak file di sistem: File Zip proyek Python.
Direktori zip adalah:
1. Folder "haar cascade files / cascade files" berisi file xml yang diperlukan untuk mendeteksi objek dari gambar. Dalam hal ini, wajah dan mata manusia perlu dideteksi.
2. Folder model berisi file model kami "cnnCat2.h5", yang dilatih di jaringan neural konvolusional.
3. Kami memiliki audio "alarm.wav" yang digunakan untuk memutar saat pengemudi mengantuk.
4. File "Model.py" berisi program di mana kumpulan data dilatih untuk membangun model klasifikasi. Anda dapat mempelajari tentang implementasi jaringan saraf konvolusional dari file ini.
5. "Drowsinessdetection.py" adalah file utama proyek ini. Saat memulai pengujian, kita harus menjalankan file ini.
Sumber: unsplash
Lanjut. Mari kita pahami langkah demi langkah cara kerja algoritme.
Langkah 1-dapatkan gambar dari kamera sebagai input
Gunakan webcam untuk mengambil gambar sebagai input. Untuk mengakses webcam, kami melakukan loop tanpa akhir untuk menangkap setiap frame. Kami menggunakan metode cv2.VideoCapture (0) yang disediakan oleh OpenCV untuk mengakses kamera dan mengatur objek pengambilan (tutup). cap.read () akan membaca setiap frame dan menyimpan gambar dalam variabel frame.
Langkah 2-Deteksi wajah pada gambar dan buat wilayah minat (ROI)
Untuk mendeteksi wajah manusia pada suatu citra, mode citra perlu diubah menjadi grayscale terlebih dahulu, karena algoritma OpenCV untuk deteksi objek membutuhkan masukan citra grayscale. Oleh karena itu, objek dapat dideteksi tanpa informasi warna.
Kami akan menggunakan pengklasifikasi haar cascade untuk mendeteksi wajah. Setel pengklasifikasi dengan face = cv2.CascadeClassifier ('path to haar cascade xml file'), lalu gunakan face = face.detectMultiScale (abu-abu) untuk melakukan deteksi. Kemudian array deteksi dengan koordinat x, y dan tinggi (lebar kotak pembatas objek) dibuat. Sekarang kita dapat mengulang permukaan ini dan menggambar kotak pembatas untuk setiap wajah.
untuk (x, y, w, h) di muka: cv2. rectangle (frame, (x, y), (x + w, y + h), (100.100.100), 1)Langkah 3-Deteksi mata manusia dari ROI dan masukkan ke dalam pengklasifikasi
Proses mendeteksi wajah manusia juga berlaku untuk mendeteksi mata manusia.
Pertama, kami menyiapkan pengklasifikasi bertingkat untuk mata di leye dan reye, lalu menggunakan left_eye = leye.detectMultiScale (abu-abu) untuk mendeteksi mata manusia. Sekarang, kita hanya perlu mengekstrak data mata manusia dari gambar yang lengkap. Ini dapat dicapai dengan mengekstraksi kotak pembatas mata, dan kemudian kode ini dapat digunakan untuk mengekstrak citra mata dari bingkai.
l_eye = bingkail_eye hanya berisi data gambar mata kiri. Ini akan dimasukkan ke dalam pengklasifikasi CNN, yang akan memprediksi apakah mata terbuka atau tertutup. Demikian pula, kami mengekstrak data mata kanan ke r_eye.
Sumber: unsplash
Langkah 4-Pengklasifikasi akan mengklasifikasikan mata sebagai mata terbuka atau tertutup .
Gunakan pengklasifikasi CNN untuk memprediksi keadaan mata. Karena model harus dimulai dari dimensi yang benar, beberapa operasi perlu dilakukan sebelum gambar dimasukkan ke dalam model.
Pertama, gunakan r_eye = cv2.cvtColor (r_eye, cv2.COLOR_BGR2GRAY) untuk mengubah gambar berwarna menjadi gambar grayscale.
Kemudian, karena model diuji pada gambar 24 * 24 piksel, gambar perlu disesuaikan ke 24 * 24 piksel:
cv2.resize (r_eye, (24,24)). Kami membakukan data untuk mencapai konvergensi yang lebih baik: r_eye = r_eye / 255 (semua nilai antara 0-1). Perluas dimensi untuk masukan ke dalam pengklasifikasi. Gunakan model = load_model (models / cnnCat2.h5) untuk memuat model.
Sekarang kita menggunakan model untuk memprediksi keadaan setiap mata: lpred = model.predict_classes (l_eye). Jika lpred = 1, maka mata terbuka; jika lpred = 0, maka mata ditutup.
Langkah 5-Hitung skor untuk menentukan apakah pengemudi lelah
Skor tersebut pada dasarnya adalah nilai yang digunakan untuk menentukan berapa lama mata pengemudi terpejam. Oleh karena itu, jika kedua mata tertutup skornya akan terus meningkat, sedangkan saat mata terbuka skornya akan menurun. Gunakan fungsi cv2.putText () untuk menggambar hasil di layar, yang akan menampilkan status real-time dari driver.
cv2.putText (frame, "Open", (10, height-20), font, 1, (255.255.255), 1, cv2.LINE_AA)Ambang batas ditentukan dengan metode berikut: Misalnya, jika skor lebih besar dari 15 berarti pengemudi telah menutup matanya untuk waktu yang lama, ambang batasnya adalah 15. Pada titik ini, kita akan menggunakan sound.play () untuk membunyikan alarm.
Sumber: unsplash
Kode sumber dari file utama adalah sebagai berikut:
impor cv2 impor os fromkeras.models importload_model impor numpy asnp dari mixer pygameimport waktu impor mixer.init () sound = mixer.Sound ('alarm.wav') face = cv2.CascadeClassifier ('haar cascade files \ haarcascade_frontalface_alt.xml') leye = cv2.CascadeClassifier ('haar cascade files \ haarcascade_lefteye_2splits.xml') reye = cv2.CascadeClassifier ('haar cascade files \ haarcascade_righteye_2splits.xml') lbl = model = load_model ('models / cnncat2.h5') jalur = os.getcwd () cap = cv2.VideoCapture (0) font = cv2.FONT_HERSHEY_COMPLEX_SMALL hitung = 0 skor = 0 thicc = 2 rpred = lpred = while (True): ret, frame = cap.read () tinggi, lebar = bingkai.bentuk abu-abu = cv2.cvtColor (bingkai, cv2.COLOR_BGR2GRAY) face = face.detectMultiScale (abu-abu, minNeighbours = 5, scaleFactor = 1.1, minSize = (25,25)) left_eye = leye.detectMultiScale (abu-abu) right_eye = reye.detectMultiScale (abu-abu) cv2.rectangle (bingkai, (0, tinggi-50), (200, tinggi), (0,0,0), ketebalan = cv2.FILLED) untuk (x, y, w, h) di wajah: cv2. rectangle (bingkai, (x, y), (x + w, y + h), (100.100.100), 1) untuk (x, y, w, h) di right_eye: r_eye = bingkai hitung = hitung + 1 r_eye = cv2.cvtColor (r_eye, cv2.COLOR_BGR2GRAY) r_eye = cv2.resize (r_eye, (24,24)) r_eye = r_eye / 255 r_eye = r_eye.reshape (24,24, -1) r_eye = np.expand_dims (r_eye, axis = 0) rpred = model.predict_classes (r_eye) jika (rpred == 1): lbl = 'Buka' jika (rpred == 0): lbl = 'Tutup' istirahat untuk (x, y, w, h) di left_eye: l_eye = bingkai hitung = hitung + 1 l_eye = cv2.cvtColor (l_eye, cv2.COLOR_BGR2GRAY) l_eye = cv2.resize (l_eye, (24,24)) l_eye = l_eye / 255 l_eye = l_eye.reshape (24,24, -1) l_eye = np.expand_dims (l_eye, axis = 0) lpred = model.predict_classes (l_eye) jika (lpred == 1): lbl = 'Buka' jika (lpred == 0): lbl = 'Tutup' istirahat if (rpred == 0 dan lpred == 0): skor = skor + 1 cv2.putText (bingkai, "Tertutup", (10, tinggi-20), font, 1, (255.255.255), 1, cv2.LINE_AA) # if (rpred == 1 atau lpred == 1): lain: skor = skor-1 cv2.putText (frame, "Open", (10, height-20), font, 1, (255.255.255), 1, cv2.LINE_AA) jika (skor < 0): skor = 0 cv2.putText (bingkai, 'Skor:' + str (skor), (100, tinggi-20), font, 1, (255,255,255), 1, cv2.LINE_AA) jika (skor > 15): #person merasa mengantuk jadi kami membunyikan alarm cv2.imwrite (os.path.join (jalur, 'image.jpg'), bingkai) mencoba: sound.play () kecuali: # isplaying = False lulus jika (thicc < 16): thicc = thicc + 2 lain: thicc = thicc-2 jika (thicc < 2): thicc = 2 cv2. rectangle (frame, (0,0), (width, height), (0,0,255), thicc) cv2.imshow ('frame', frame) jika cv2.waitKey (1) dan 0xFF == ord ('q'): istirahat cap.release () cv2.destroyAllWindows ()Contoh proyek Python
Mulai proyek dan periksa pengoperasian proyek. Untuk memulai proyek, Anda perlu membuka prompt perintah dan pergi ke direktori tempat file utama "drowsinessdetection.py" berada. Gunakan perintah berikut untuk menjalankan skrip.
python "drowsiness detection.py"Mungkin diperlukan beberapa detik untuk menghidupkan webcam dan memulai deteksi.
Contoh tangkapan layar:
Tangkapan layar keluaran:
1. Deteksi mata tertutup
2. Deteksi mata terbuka
3. Peringatan kelelahan
Proyek Python ini membangun sistem peringatan kelelahan pengemudi, yang dapat Anda terapkan dengan banyak cara. Kami menggunakan pengklasifikasi kaskade Haar untuk mendeteksi wajah dan mata menggunakan OpenCV, dan kemudian memprediksi status berdasarkan model CNN.
Mana yang lebih baik untuk mengatur mengemudi? Petugas keamanan Python membantu Anda. Demi keselamatan diri sendiri dan orang lain, mohon jangan mengemudi dengan rasa lelah!
Komentar Suka Ikuti
Mari berbagi manfaat pembelajaran dan pengembangan AI
Jika mencetak ulang, silakan tinggalkan pesan di latar belakang dan ikuti spesifikasi pencetakan ulang
- Apakah Anda benar-benar mempelajari "pembelajaran mesin"? Bagaimana cara mempelajari "pembelajaran mesin"?
- Kesalahan umum menyebabkan kesalahan besar! Lebih dari selusin studi medis "berubah menjadi sia-sia"