สารบัญ:

ระบบเตือนอาการง่วงนอน: 3 ขั้นตอน
ระบบเตือนอาการง่วงนอน: 3 ขั้นตอน

วีดีโอ: ระบบเตือนอาการง่วงนอน: 3 ขั้นตอน

วีดีโอ: ระบบเตือนอาการง่วงนอน: 3 ขั้นตอน
วีดีโอ: โรงพยาบาลธนบุรี : นอนเยอะแต่ยังง่วง เสี่ยงป่วยหลายโรค 2024, กรกฎาคม
Anonim
ระบบเตือนอาการง่วงนอน
ระบบเตือนอาการง่วงนอน

ทุกๆ ปี ผู้คนจำนวนมากเสียชีวิตจากอุบัติเหตุบนท้องถนนที่ร้ายแรงทั่วโลก และการขับรถง่วงนอนเป็นหนึ่งในสาเหตุหลักของอุบัติเหตุบนท้องถนนและการเสียชีวิต ความเหนื่อยล้าและการนอนน้อยในการควบคุมการขับขี่มักเป็นสาเหตุของอุบัติเหตุร้ายแรง อย่างไรก็ตาม สัญญาณเริ่มต้นของความเหนื่อยล้าสามารถตรวจพบได้ก่อนเกิดสถานการณ์สำคัญ ดังนั้น การตรวจจับความเหนื่อยล้าของผู้ขับขี่และการบ่งชี้จึงเป็นหัวข้อการวิจัยที่ดำเนินอยู่ วิธีการแบบดั้งเดิมส่วนใหญ่ในการตรวจหาอาการง่วงนอนจะขึ้นอยู่กับลักษณะพฤติกรรม ในขณะที่วิธีการบางอย่างเป็นการรบกวนและอาจทำให้ผู้ขับขี่เสียสมาธิ ในขณะที่บางวิธีต้องใช้เซ็นเซอร์ราคาแพง ดังนั้น ในบทความนี้ จึงได้มีการพัฒนาและใช้งานระบบตรวจจับอาการง่วงนอนของคนขับแบบเรียลไทม์น้ำหนักเบาในแอปพลิเคชัน Android ระบบจะบันทึกวิดีโอและตรวจจับใบหน้าของผู้ขับขี่ในทุกเฟรมโดยใช้เทคนิคการประมวลผลภาพ ระบบสามารถตรวจจับจุดสังเกตบนใบหน้า คำนวณอัตราส่วนของสายตา (EAR) และอัตราส่วนการปิดตา (ECR) เพื่อตรวจจับอาการง่วงนอนของผู้ขับขี่โดยอิงตามเกณฑ์ที่ปรับเปลี่ยนได้ มีการใช้อัลกอริธึมการเรียนรู้ของเครื่องเพื่อทดสอบประสิทธิภาพของแนวทางที่เสนอ ผลลัพธ์เชิงประจักษ์แสดงให้เห็นว่าแบบจำลองที่เสนอสามารถบรรลุความถูกต้องถึง 84% โดยใช้ตัวแยกประเภทฟอเรสต์แบบสุ่ม

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ

1.ราสเบอร์รี่ปี่

2. WEBCAM (C270 HD WEB CAM เพื่อผลลัพธ์ที่ดีกว่า)

เวอร์ชั่น PC อาจต้องมีการเปลี่ยนแปลงในโค้ด

ขั้นตอนที่ 2: รหัส Python พร้อมชุดข้อมูลทำนายรูปร่างดวงตา (เวอร์ชั่น PC)

เพื่อตรวจจับดวงตาได้อย่างมีประสิทธิภาพในวิดีโอแบบเรียลไทม์ เราสามารถใช้ไฟล์.dat ด้านล่างนี้

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

ดาวน์โหลดไฟล์.dat จากลิงค์ด้านบนและรันโค้ด python ด้านล่าง

รหัสหลาม

จาก scipy.spatial ระยะทางนำเข้าจาก imutils นำเข้า face_utils นำเข้า imutils นำเข้า dlib นำเข้า cv2

def eye_aspect_ratio(ตา):

A = distance.euclidean(ตา[1], ตา[5]) B = distance.euclidean(ตา[2], ตา[4]) C = distance.euclidean(ตา[0], ตา[3]) หู = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() ทำนาย = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Dat file เป็นปมของรหัส

(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(frame, grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) subjects = ตรวจพบ (gray, 0) สำหรับ subject ใน subjects: shape = ทำนาย (สีเทา, subject) รูปร่าง = face_utils.shape_to_np(shape)#converting to NumPy Array leftEye = shape[lStart:lEnd] rightEye = รูปร่าง[rStart:rEnd] leftEAR = eye_aspect_ratio(leftEye) rightEAR = eye_aspect_ratio(rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2.convexHull(rightEye) 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()

ขั้นตอนที่ 3: รุ่น Raspberry Pi

รุ่น Raspberry Pi
รุ่น Raspberry Pi
รุ่น Raspberry Pi
รุ่น Raspberry Pi

เมื่อบุคคลหลับตาลง ราสเบอร์รี่ pi จะเตือนคุณ

เชื่อมต่อออดของคุณเพื่อปักหมุด 23 (ดูรูป)

จาก scipy.spatial นำเข้าระยะทาง

นำเข้า RPi. GPIO เป็น GPIO

จากเวลานำเข้าการนอนหลับ

GPIO.setwarnings(เท็จ)

GPIO.setmode(GPIO. BCM)

จาก imutils นำเข้า face_utils

นำเข้า imutils นำเข้า dlib นำเข้า cv2

ออด = 23

GPIO.setup (ออด, GPIO. OUT)

def eye_aspect_ratio(ตา):

A = distance.euclidean(ตา[1], ตา[5]) B = distance.euclidean(ตา[2], ตา[4]) C = distance.euclidean(ตา[0], ตา[3]) หู = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() ทำนาย = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Dat file เป็นปมของรหัส

(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(frame, grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) subjects = ตรวจจับ (gray, 0) สำหรับ subject ใน subjects: shape = ทำนาย (สีเทา, subject) รูปร่าง = face_utils.shape_to_np(shape)#converting to NumPy Array leftEye = shape[lStart:lEnd] rightEye = รูปร่าง[rStart:rEnd] leftEAR = eye_aspect_ratio(leftEye) rightEAR = eye_aspect_ratio(rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2.convexHull(rightEye) 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(ออด, GPIO.สูง)

อื่น: ธง = 0

GPIO.output(ออด, GPIO. LOW)

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

แนะนำ: