Mục lục:

Hệ thống cảnh báo buồn ngủ: 3 bước
Hệ thống cảnh báo buồn ngủ: 3 bước

Video: Hệ thống cảnh báo buồn ngủ: 3 bước

Video: Hệ thống cảnh báo buồn ngủ: 3 bước
Video: Thử làm model cảnh báo ngủ gật cho tài xế oto bằng Dlib và Resnet 2024, Tháng bảy
Anonim
Hệ thống cảnh báo buồn ngủ
Hệ thống cảnh báo buồn ngủ

Hàng năm, nhiều người mất mạng do tai nạn đường bộ gây tử vong trên khắp thế giới và lái xe buồn ngủ là một trong những nguyên nhân chính gây ra tai nạn đường bộ và tử vong. Sự mệt mỏi và tình trạng ngủ li bì khi điều khiển lái xe thường là nguyên nhân sâu xa của các vụ tai nạn nghiêm trọng. Tuy nhiên, các dấu hiệu ban đầu của sự mệt mỏi có thể được phát hiện trước khi tình huống nguy cấp phát sinh và do đó, việc phát hiện sự mệt mỏi của người lái xe và dấu hiệu của nó là chủ đề nghiên cứu đang được tiến hành. Hầu hết các phương pháp truyền thống để phát hiện buồn ngủ đều dựa trên các khía cạnh hành vi trong khi một số phương pháp xâm nhập và có thể khiến người lái mất tập trung, trong khi một số phương pháp yêu cầu cảm biến đắt tiền. Do đó, trong bài báo này, hệ thống phát hiện buồn ngủ của người lái xe theo thời gian thực, trọng lượng nhẹ được phát triển và triển khai trên ứng dụng Android. Hệ thống ghi lại các video và phát hiện khuôn mặt của người lái xe trong mọi khung hình bằng cách sử dụng các kỹ thuật xử lý hình ảnh. Hệ thống có khả năng phát hiện các điểm mốc trên khuôn mặt, tính toán Tỷ lệ khung hình của mắt (EAR) và Tỷ lệ nhắm mắt (ECR) để phát hiện tình trạng buồn ngủ của người lái xe dựa trên ngưỡng thích ứng. Các thuật toán học máy đã được sử dụng để kiểm tra tính hiệu quả của phương pháp được đề xuất. Kết quả thực nghiệm chứng minh rằng mô hình đề xuất có thể đạt được độ chính xác 84% khi sử dụng bộ phân loại rừng ngẫu nhiên.

Bước 1: Những thứ bạn cần

1. RASPBERRY PI

2. WEBCAM (WEB CAM C270 HD CHO KẾT QUẢ TỐT HƠN)

Phiên bản pc có thể cần một số thay đổi trong mã

Bước 2: Mã Python với Bộ dữ liệu dự đoán hình dạng mắt (Phiên bản PC)

để phát hiện mắt một cách hiệu quả trong video thời gian thực, chúng tôi có thể sử dụng tệp.dat sbelow này.

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

Tải xuống tệp.dat từ liên kết trên và chạy mã python bên dưới

Mã Python

from scipy.spatial import distancefrom imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (mắt):

A = distance.euclidean (eye [1], eye [5]) B = distance.euclid (eye [2], eye [4]) C = distance.euclidean (eye [0], eye [3]) ear = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 explore = dlib.get_frontal_face_detector () dự đoán = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # Tệp dữ liệu là mấu chốt của mã

(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 trong khi True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) xám = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) subject = phát hiện (xám, 0) cho đối tượng trong các đối tượng: shape = dự đoán (xám, chủ đề) shape = face_utils.shape_to_np (shape) #converting to NumPy Array leftEye = shape [lStart: lEnd] rightEye = shape [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (rightEyeHull) cv2. drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (frame, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** 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 ()

Bước 3: Phiên bản Raspberry Pi

Phiên bản Raspberry Pi
Phiên bản Raspberry Pi
Phiên bản Raspberry Pi
Phiên bản Raspberry Pi

Khi mọi người nhắm mắt lại thì quả mâm xôi pi sẽ đưa ra cảnh báo cho bạn

KẾT NỐI bộ rung của bạn với chân 23 (xem hình ảnh)

từ khoảng cách nhập scipy.spatial

nhập RPi. GPIO dưới dạng GPIO

từ lúc nhập giấc ngủ

GPIO.setwarnings (Sai)

GPIO.setmode (GPIO. BCM)

từ imutils nhập face_utils

nhập imutils nhập dlib nhập cv2

buzzer = 23

GPIO.setup (buzzer, GPIO. OUT)

def eye_aspect_ratio (mắt):

A = distance.euclidean (eye [1], eye [5]) B = distance.euclid (eye [2], eye [4]) C = distance.euclidean (eye [0], eye [3]) ear = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 explore = dlib.get_frontal_face_detector () dự đoán = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # Tệp dữ liệu là mấu chốt của mã

(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 trong khi True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) xám = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) subject = phát hiện (xám, 0) cho đối tượng trong các đối tượng: shape = dự đoán (xám, chủ đề) shape = face_utils.shape_to_np (shape) #converting to NumPy Array leftEye = shape [lStart: lEnd] rightEye = shape [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (rightEyeHull) cv2. drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (frame, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.output (buzzer, GPIO. HIGH)

khác: cờ = 0

GPIO.output (buzzer, GPIO. LOW)

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

Đề xuất: