תוכן עניינים:

מערכת התראה על נמנום: 3 שלבים
מערכת התראה על נמנום: 3 שלבים

וִידֵאוֹ: מערכת התראה על נמנום: 3 שלבים

וִידֵאוֹ: מערכת התראה על נמנום: 3 שלבים
וִידֵאוֹ: פרופ' אהוד מנור - מרצח ארלוזרוב ועד מלחמת העצמאות - סדרה היסטורית - פרק רביעי 4/7 2024, נוֹבֶמבֶּר
Anonim
מערכת התראה על נמנום
מערכת התראה על נמנום

מדי שנה אנשים רבים מאבדים את חייהם בגלל תאונות דרכים קטלניות ברחבי העולם ונהיגה מנומנמת היא אחד הגורמים העיקריים לתאונות דרכים ומוות. עייפות ושינה מיקרו בפקדי הנהיגה הם לעתים קרובות הגורם העיקרי לתאונות קשות. עם זאת, ניתן לזהות סימנים ראשוניים של עייפות לפני שמתעורר מצב קריטי ולכן, גילוי עייפות הנהג והאינדיקציה שלה הוא נושא מחקר מתמשך. רוב השיטות המסורתיות לאיתור נמנום מבוססות על היבטים התנהגותיים בעוד שחלקן פולשניות ועשויות להסיח את דעת הנהגים, בעוד שחלקן דורשות חיישנים יקרים. לכן, במאמר זה, מערכת זיהוי נמנום של נהג קלה בזמן אמת מפותחת ומיושמת ביישום אנדרואיד. המערכת מקליטה את הסרטונים ומזהה את פני הנהג בכל פריים על ידי שימוש בטכניקות עיבוד תמונה. המערכת מסוגלת לזהות ציוני דרך בפנים, מחשבת יחס גובה -רוחב עין (EAR) ויחס סגירת עיניים (ECR) כדי לזהות נמנום של הנהג על סמך סף אדפטיבי. אלגוריתמים של למידת מכונה הופעלו כדי לבדוק את היעילות של הגישה המוצעת. תוצאות אמפיריות מוכיחות כי המודל המוצע מסוגל להשיג דיוק של 84% באמצעות מסווג יער אקראי.

שלב 1: דברים שאתה צריך

1. RASPBERRY PI

2. WEBCAM (C270 HD מצלמת אינטרנט לתוצאות טובות יותר)

גרסת המחשב האישי עשויה להזדקק לשינויים מסוימים בקוד

שלב 2: קוד פיתון עם מערך נתונים של חזות עיניים (גרסת מחשב)

כדי לזהות עיניים בצורה יעילה הרבה יותר בסרטון בזמן אמת, אנו יכולים להשתמש בקובץ.dat הבא.

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

הורד את קובץ.dat מהקישור למעלה והפעל את קוד הפיתון למטה

קוד פייתון

מרחק יבוא מרחבי מ- imutils יבוא face_utils יבוא imutils יבוא dlib יבוא cv2

def eye_aspect_ratio (עין):

A = distance.euclidean (עין [1], עין [5]) B = מרחק.euclidean (עין [2], עין [4]) C = distance.euclidean (עין [0], עין [3]) אוזן = (A + B) / (2.0 * C) דן אוזן החזרה = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = 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 (מסגרת, רוחב = 450) אפור = cv2.cvtColor (מסגרת, cv2. COLOR_BGR2GRAY) נושאים = זיהוי (אפור, 0) עבור הנושא בנבדקים: צורה = חיזוי (אפור, נושא) צורה = פנים_שימוש_צורה_ל_נפ (צורה)#המרה למערך NumPy leftEye = צורה [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.convex) drawContours (מסגרת, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) אם האוזן = frame_check: cv2.putText (מסגרת, "***************** התראה! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (מסגרת, "**************** התראה! *********** ***** ", (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: גרסת פטל פטל

גרסת פטל פטל
גרסת פטל פטל
גרסת פטל פטל
גרסת פטל פטל

כאשר האנשים עוצמים את עיניו, פאי הפטל ייתן לך התראה

חבר את הזמזם שלך לסיכה 23 (ראה תמונה)

ממרחק יבוא מרחבי

ייבא 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 = מרחק.euclidean (עין [2], עין [4]) C = distance.euclidean (עין [0], עין [3]) אוזן = (A + B) / (2.0 * C) דן אוזן החזרה = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = 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 (מסגרת, רוחב = 450) אפור = cv2.cvtColor (מסגרת, cv2. COLOR_BGR2GRAY) נושאים = זיהוי (אפור, 0) לנושא בנושאים: צורה = חיזוי (אפור, נושא) צורה = פנים_שמשיות_צורה_ל_נפ (צורה)#המרה למערך NumPy leftEye = צורה [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.convex) drawContours (מסגרת, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) אם האוזן = frame_check: cv2.putText (מסגרת, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (מסגרת, "**************** התראה! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ")

פלט GPIO (זמזם, GPIO. HIGH)

אחר: דגל = 0

פלט GPIO. (זמזם, GPIO. LOW)

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

מוּמלָץ: