Πίνακας περιεχομένων:

Σύστημα ειδοποίησης υπνηλίας: 3 βήματα
Σύστημα ειδοποίησης υπνηλίας: 3 βήματα

Βίντεο: Σύστημα ειδοποίησης υπνηλίας: 3 βήματα

Βίντεο: Σύστημα ειδοποίησης υπνηλίας: 3 βήματα
Βίντεο: Πώς να κάνεις καλά πράγματα να σου συμβούν. Ακουστικό βιβλίο 2024, Ιούλιος
Anonim
Σύστημα ειδοποίησης υπνηλίας
Σύστημα ειδοποίησης υπνηλίας

Κάθε χρόνο πολλοί άνθρωποι χάνουν τη ζωή τους λόγω θανατηφόρων τροχαίων ατυχημάτων σε όλο τον κόσμο και η υπνηλία οδήγηση είναι μία από τις κύριες αιτίες τροχαίων ατυχημάτων και θανάτων. Η κόπωση και ο πολύ μικρός ύπνος στα χειριστήρια οδήγησης είναι συχνά η βασική αιτία σοβαρών ατυχημάτων. Ωστόσο, τα αρχικά σημάδια κόπωσης μπορούν να ανιχνευθούν πριν από την εμφάνιση μιας κρίσιμης κατάστασης και ως εκ τούτου, η ανίχνευση της κόπωσης του οδηγού και η ένδειξή της είναι συνεχές ερευνητικό θέμα. Οι περισσότερες από τις παραδοσιακές μεθόδους για τον εντοπισμό υπνηλίας βασίζονται σε συμπεριφορικές πτυχές, ενώ μερικές είναι παρεμβατικές και μπορεί να αποσπούν την προσοχή των οδηγών, ενώ μερικές απαιτούν ακριβούς αισθητήρες. Ως εκ τούτου, σε αυτό το έγγραφο, ένα ελαφρύ, σύστημα ανίχνευσης υπνηλίας οδηγού σε πραγματικό χρόνο αναπτύσσεται και εφαρμόζεται σε εφαρμογή Android. Το σύστημα καταγράφει τα βίντεο και ανιχνεύει το πρόσωπο του οδηγού σε κάθε καρέ χρησιμοποιώντας τεχνικές επεξεργασίας εικόνας. Το σύστημα είναι ικανό να ανιχνεύει ορόσημα προσώπου, υπολογίζει το Eye Aspect Ratio (EAR) και το Eye Closure Ratio (ECR) για να ανιχνεύει την υπνηλία του οδηγού με βάση το προσαρμοστικό κατώφλι. Αλγόριθμοι μηχανικής μάθησης έχουν χρησιμοποιηθεί για να ελέγξουν την αποτελεσματικότητα της προτεινόμενης προσέγγισης. Τα εμπειρικά αποτελέσματα καταδεικνύουν ότι το προτεινόμενο μοντέλο είναι σε θέση να επιτύχει ακρίβεια 84% χρησιμοποιώντας τυχαίο ταξινομητή δάσους.

Βήμα 1: Πράγματα που χρειάζεστε

1. ΡΑΣΠΕΡΙ ΠΙ

2. WEBCAM (C270 HD WEB CAM ΓΙΑ ΚΑΛΥΤΕΡΑ ΑΠΟΤΕΛΕΣΜΑΤΑ)

Η έκδοση του υπολογιστή μπορεί να χρειάζεται κάποιες αλλαγές στον κώδικα

Βήμα 2: Python Code With Eyes Shape Predictor Dataset (Έκδοση PC)

για να εντοπίσουμε τα μάτια πολύ αποτελεσματικά σε ένα βίντεο σε πραγματικό χρόνο, μπορούμε να χρησιμοποιήσουμε αυτό το παρακάτω αρχείο.dat.

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

Κατεβάστε το αρχείο.dat από τον παραπάνω σύνδεσμο και εκτελέστε τον παρακάτω κώδικα python

Κώδικας Python

από scipy.spatial import distancefrom imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (μάτι):

A = απόσταση.euclidean (μάτι [1], μάτι [5]) B = απόσταση.euclidean (μάτι [2], μάτι [4]) C = απόσταση.euclidean (μάτι [0], μάτι [3]) αυτί = (A + B) / (2.0 * C) thresh return thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.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 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) γκρι = cv2.cvtColor (πλαίσιο, cv2. COLOR_BGR2GRAY) θέματα = ανίχνευση (γκρι, 0) για το θέμα στα θέματα: shape = προβλέπουν (γκρι, θέμα) shape = 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 drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = 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 ") 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

όταν τα άτομα κλείσουν τα μάτια του, τότε το raspberry pi θα σας δώσει την ειδοποίηση

ΣΥΝΔΕΣΤΕ τον βομβητή σας στην καρφίτσα 23 (δείτε την εικόνα)

από scipy.sbatial απόσταση εισαγωγής

εισαγωγή RPi. GPIO ως GPIO

από τον χρόνο εισαγωγής ύπνου

GPIO.setwarnings (False)

GPIO.setmode (GPIO. BCM)

από imutils εισαγωγή face_utils

εισαγωγή imutils εισαγωγή dlib εισαγωγή cv2

βομβητής = 23

GPIO.setup (βομβητής, GPIO. OUT)

def eye_aspect_ratio (μάτι):

Α = απόσταση.euclidean (μάτι [1], μάτι [5]) Β = απόσταση.euclidean (μάτι [2], μάτι [4]) C = απόσταση.e.eclidean (μάτι [0], μάτι [3]) αυτί = (A + B) / (2.0 * C) thresh ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.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 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) γκρι = cv2.cvtColor (πλαίσιο, cv2. COLOR_BGR2GRAY) θέματα = ανίχνευση (γκρι, 0) για το θέμα στα θέματα: shape = προβλέψω (γκρι, θέμα) shape = 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 drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = 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.output (βομβητής, GPIO. HIGH)

else: σημαία = 0

GPIO.output (βομβητής, GPIO. LOW)

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

Συνιστάται: