สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
ทุกๆ ปี ผู้คนจำนวนมากเสียชีวิตจากอุบัติเหตุบนท้องถนนที่ร้ายแรงทั่วโลก และการขับรถง่วงนอนเป็นหนึ่งในสาเหตุหลักของอุบัติเหตุบนท้องถนนและการเสียชีวิต ความเหนื่อยล้าและการนอนน้อยในการควบคุมการขับขี่มักเป็นสาเหตุของอุบัติเหตุร้ายแรง อย่างไรก็ตาม สัญญาณเริ่มต้นของความเหนื่อยล้าสามารถตรวจพบได้ก่อนเกิดสถานการณ์สำคัญ ดังนั้น การตรวจจับความเหนื่อยล้าของผู้ขับขี่และการบ่งชี้จึงเป็นหัวข้อการวิจัยที่ดำเนินอยู่ วิธีการแบบดั้งเดิมส่วนใหญ่ในการตรวจหาอาการง่วงนอนจะขึ้นอยู่กับลักษณะพฤติกรรม ในขณะที่วิธีการบางอย่างเป็นการรบกวนและอาจทำให้ผู้ขับขี่เสียสมาธิ ในขณะที่บางวิธีต้องใช้เซ็นเซอร์ราคาแพง ดังนั้น ในบทความนี้ จึงได้มีการพัฒนาและใช้งานระบบตรวจจับอาการง่วงนอนของคนขับแบบเรียลไทม์น้ำหนักเบาในแอปพลิเคชัน 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
เมื่อบุคคลหลับตาลง ราสเบอร์รี่ 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()
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง