جدول المحتويات:

نظام تنبيه النعاس: 3 خطوات
نظام تنبيه النعاس: 3 خطوات

فيديو: نظام تنبيه النعاس: 3 خطوات

فيديو: نظام تنبيه النعاس: 3 خطوات
فيديو: الطريقة الصحيحة لإيقاظ الشخص النائم ✅💯 2024, يوليو
Anonim
نظام تنبيه النعاس
نظام تنبيه النعاس

كل عام يفقد الكثير من الناس حياتهم بسبب حوادث الطرق المميتة في جميع أنحاء العالم والقيادة بالنعاس هي أحد الأسباب الرئيسية لحوادث الطرق والوفاة. غالبًا ما يكون الإرهاق والنوم الجزئي عند أدوات التحكم في القيادة السبب الجذري للحوادث الخطيرة. ومع ذلك ، يمكن الكشف عن العلامات الأولية للإرهاق قبل ظهور موقف حرج ، وبالتالي فإن اكتشاف إرهاق السائق وإشاراته هو موضوع بحث مستمر. تعتمد معظم الطرق التقليدية للكشف عن النعاس على جوانب سلوكية في حين أن بعضها تدخلي وقد يشتت انتباه السائقين ، بينما يتطلب بعضها أجهزة استشعار باهظة الثمن. لذلك ، في هذا البحث ، تم تطوير وتنفيذ نظام للكشف عن النعاس للسائق في الوقت الفعلي خفيف الوزن ويتم تنفيذه على تطبيق Android. يسجل النظام مقاطع الفيديو ويكتشف وجه السائق في كل إطار باستخدام تقنيات معالجة الصور. النظام قادر على اكتشاف معالم الوجه ، وحساب نسبة ارتفاع العين (EAR) ونسبة إغلاق العين (ECR) لاكتشاف نعاس السائق بناءً على العتبة التكيفية. تم استخدام خوارزميات التعلم الآلي لاختبار فعالية النهج المقترح. تظهر النتائج التجريبية أن النموذج المقترح قادر على تحقيق دقة تصل إلى 84٪ باستخدام مصنف الغابة العشوائي.

الخطوة 1: الأشياء التي تحتاجها

1. RASPBERRY PI

2. WEBCAM (C270 HD WEB CAM للحصول على نتائج أفضل)

قد يحتاج إصدار الكمبيوتر إلى بعض التغييرات في الكود

الخطوة 2: كود Python مع مجموعة بيانات توقع شكل العيون (إصدار الكمبيوتر الشخصي)

لاكتشاف العيون بشكل فعال في فيديو في الوقت الفعلي ، يمكننا استخدام ملف dat هذا sbelow.

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

قم بتنزيل ملف dat من الرابط أعلاه وقم بتشغيل كود python أدناه

كود بايثون

من scipy.spatial import بعد من imutils استيراد face_utils استيراد imutils استيراد dlib استيراد cv2

def eye_aspect_ratio (العين):

A = Distance.euclidean (العين [1] ، العين [5]) B = المسافة euclidean (العين [2] ، العين [4]) C = المسافة euclidean (العين [0] ، العين [3]) الأذن = (A + B) / (2.0 * C) عتبة الأذن العائدة = 0.25 frame_check = 20 اكتشاف = dlib.get_frontal_face_detector () توقع = dlib.shape_predictor (". / shape_predictor_68_face_landmarks.dat") # ملف Dat هو جوهر الكود

(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 بينما True: ret ، frame = cap.read () frame = imutils.resize (frame، width = 450) grey = cv2.cvtColor (frame، cv2. COLOR_BGR2GRAY) الموضوعات = اكتشاف (رمادي ، 0) للموضوع في الموضوعات: الشكل = توقع (رمادي ، الموضوع) الشكل = face_utils.shape_to_np (شكل) # التحويل إلى NumPy Array leftEye = الشكل [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. 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

عندما يغلق الشخص عينيه ، سوف يعطيك التوت باي التنبيه

قم بتوصيل الجرس الخاص بك بالدبوس 23 (انظر الصورة)

من مسافة الاستيراد scipy.spatial

استيراد RPi. GPIO كـ GPIO

من وقت استيراد النوم

تحذيرات GPIO (خطأ)

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 = المسافة euclidean (العين [2] ، العين [4]) C = المسافة euclidean (العين [0] ، العين [3]) الأذن = (A + B) / (2.0 * C) عتبة الأذن العائدة = 0.25 frame_check = 20 اكتشاف = dlib.get_frontal_face_detector () توقع = dlib.shape_predictor (". / shape_predictor_68_face_landmarks.dat") # ملف Dat هو جوهر الكود

(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 بينما True: ret ، frame = cap.read () frame = imutils.resize (frame، width = 450) grey = cv2.cvtColor (frame، cv2. COLOR_BGR2GRAY) الموضوعات = اكتشاف (رمادي ، 0) للموضوع في الموضوعات: الشكل = توقع (رمادي ، الموضوع) الشكل = face_utils.shape_to_np (شكل) # التحويل إلى NumPy Array leftEye = الشكل [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. 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. HIGH)

آخر: العلم = 0

GPIO.output (الجرس ، GPIO. LOW)

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

موصى به: