Isi kandungan:

Sistem Amaran Mengantuk: 3 Langkah
Sistem Amaran Mengantuk: 3 Langkah

Video: Sistem Amaran Mengantuk: 3 Langkah

Video: Sistem Amaran Mengantuk: 3 Langkah
Video: 【MULTI SUB】Anti-routine system EP1-88 2024, Julai
Anonim
Sistem Amaran Mengantuk
Sistem Amaran Mengantuk

Setiap tahun banyak orang kehilangan nyawa akibat kemalangan jalan raya yang membawa maut di seluruh dunia dan mengantuk adalah salah satu penyebab utama kemalangan jalan raya dan kematian. Keletihan dan tidur mikro pada kawalan pemanduan sering menjadi punca kemalangan serius. Walau bagaimanapun, tanda-tanda awal keletihan dapat dikesan sebelum keadaan kritikal muncul dan oleh itu, pengesanan keletihan pemandu dan petunjuknya adalah topik penyelidikan yang sedang dijalankan. Sebilangan besar kaedah tradisional untuk mengesan mengantuk didasarkan pada aspek tingkah laku sementara ada yang mengganggu dan mungkin mengalihkan perhatian pemandu, sementara ada yang memerlukan sensor mahal. Oleh itu, dalam makalah ini, sistem pengesanan mengantuk pemandu masa nyata ringan dikembangkan dan dilaksanakan pada aplikasi Android. Sistem ini merakam video dan mengesan wajah pemandu di setiap bingkai dengan menggunakan teknik pemprosesan gambar. Sistem ini mampu mengesan mercu tanda wajah, mengira Nisbah Aspek Mata (EAR) dan Nisbah Penutupan Mata (ECR) untuk mengesan rasa mengantuk pemandu berdasarkan tahap adaptif. Algoritma pembelajaran mesin telah digunakan untuk menguji keberkesanan pendekatan yang dicadangkan. Hasil empirikal menunjukkan bahawa model yang dicadangkan dapat mencapai ketepatan 84% menggunakan pengelasan hutan secara rawak.

Langkah 1: Perkara yang Anda Perlu

1. RASPBERRY PI

2. WEBCAM (C270 HD WEB CAM UNTUK HASIL YANG LEBIH BAIK)

Versi PC mungkin memerlukan beberapa perubahan dalam kod

Langkah 2: Python Code With Eyes Shape Predictor Dataset (Versi PC)

untuk mengesan mata dengan berkesan dalam video masa nyata, kita boleh menggunakan fail.dat berikut ini.

drive.google.com/open?id=1UiSHe72L4TeN14VK…

Muat turun fail.dat dari pautan di atas dan jalankan kod python di bawah

Kod Python

dari scipy.jarak import spatial dari imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (mata):

A = jarak.euclidean (mata [1], mata [5]) B = jarak.euclidean (mata [2], mata [4]) C = jarak.euclidean (mata [0], mata [3]) telinga = (A + B) / (2.0 * C) ambang telinga kembali = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () prediksi = dlib.shape_predictor (". / Bentuk_predictor_68_face_landmarks.dat") # Fail Dat adalah inti kod

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["left_eye"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 while True: ret, frame = cap.read () frame = imutils.resize (bingkai, lebar = 450) kelabu = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) subjek = mengesan (kelabu, 0) untuk subjek dalam subjek: bentuk = ramalan (kelabu, subjek) bentuk = face_utils.shape_to_np (bentuk) # menukar ke NumPy Array leftEye = bentuk [lStart: lEnd] rightEye = bentuk [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.conve drawContours (bingkai, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (bingkai, [rightEyeHull], -1, (0, 255, 0), 1) jika telinga = frame_check: cv2.putText (bingkai, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (bingkai, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ") else: flag = 0 cv2.imshow (" Frame ", frame) key = cv2.waitKey (1) & 0xFF if key == ord (" q "): break cv2.destroyAllWindows () cap.stop ()

Langkah 3: Versi Raspberry Pi

Versi Raspberry Pi
Versi Raspberry Pi
Versi Raspberry Pi
Versi Raspberry Pi

apabila orang menutup matanya maka raspberry pi akan memberi anda amaran

Sambungkan bel anda ke pin 23 (lihat gambar)

dari jarak import scipy.spatial

import RPi. GPIO sebagai GPIO

dari waktu tidur import

GPIO.setwarnings (Salah)

GPIO.setmode (GPIO. BCM)

dari imutils import face_utils

import imutils import dlib import cv2

buzzer = 23

GPIO.setup (buzzer, GPIO. OUT)

def eye_aspect_ratio (mata):

A = jarak.euclidean (mata [1], mata [5]) B = jarak.euclidean (mata [2], mata [4]) C = jarak.euclidean (mata [0], mata [3]) telinga = (A + B) / (2.0 * C) ambang telinga kembali = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () prediksi = dlib.shape_predictor (". / Bentuk_predictor_68_face_landmarks.dat") # Fail Dat adalah inti kod

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["left_eye"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 while True: ret, frame = cap.read () frame = imutils.resize (bingkai, lebar = 450) kelabu = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) subjek = mengesan (kelabu, 0) untuk subjek dalam subjek: bentuk = ramalan (kelabu, subjek) bentuk = face_utils.shape_to_np (bentuk) # menukar ke NumPy Array leftEye = bentuk [lStart: lEnd] rightEye = bentuk [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.conve drawContours (bingkai, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (bingkai, [rightEyeHull], -1, (0, 255, 0), 1) jika telinga = frame_check: cv2.putText (bingkai, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (bingkai, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.output (buzzer, GPIO. HIGH)

lain: bendera = 0

GPIO.output (buzzer, GPIO. LOW)

cv2.imshow ("Frame", frame) key = cv2.waitKey (1) & 0xFF if key == ord ("q"): break cv2.destroyAllWindows () cap.stop ()

Disyorkan: