Cuprins:

Sistem de alertă de somnolență: 3 pași
Sistem de alertă de somnolență: 3 pași

Video: Sistem de alertă de somnolență: 3 pași

Video: Sistem de alertă de somnolență: 3 pași
Video: Cum Sa Castigi O Lupta De Strada | 3 Tehnici De Krav Maga 2024, Iulie
Anonim
Sistem de alertă de somnolență
Sistem de alertă de somnolență

În fiecare an, mulți oameni își pierd viața din cauza accidentelor rutiere fatale din întreaga lume, iar conducerea somnoroasă este una dintre principalele cauze ale accidentelor rutiere și a morții. Oboseala și somnul mic la comenzile de conducere sunt adesea cauza principală a accidentelor grave. Cu toate acestea, semnele inițiale de oboseală pot fi detectate înainte de apariția unei situații critice și, prin urmare, detectarea oboselii șoferului și indicația acestuia este un subiect de cercetare în curs. Majoritatea metodelor tradiționale de detectare a somnolenței se bazează pe aspecte comportamentale, în timp ce unele sunt intruzive și pot distrage atenția conducătorilor auto, în timp ce unele necesită senzori costisitori. Prin urmare, în această lucrare, un sistem ușor de detectare a somnolenței șoferului în timp real este dezvoltat și implementat pe aplicația Android. Sistemul înregistrează videoclipurile și detectează fața șoferului în fiecare cadru utilizând tehnici de procesare a imaginilor. Sistemul este capabil să detecteze reperele faciale, calculează Eye Aspect Ratio (EAR) și Eye Closure Ratio (ECR) pentru a detecta somnolența șoferului pe baza pragurilor adaptive. Au fost folosiți algoritmi de învățare automată pentru a testa eficacitatea abordării propuse. Rezultatele empirice demonstrează că modelul propus este capabil să obțină o precizie de 84% folosind clasificatorul de pădure aleatoriu.

Pasul 1: Lucruri de care aveți nevoie

1. RASPBERRY PI

2. WEBCAM (C270 HD WEB CAM PENTRU REZULTATE MAI BUNE)

Versiunea PC ar putea avea nevoie de unele modificări ale codului

Pasul 2: Cod Python cu set de date Predictor Eyes Shape (versiunea PC)

pentru a detecta efectiv ochii într-un videoclip în timp real, putem folosi acest fișier.dat de mai jos.

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

Descărcați fișierul.dat din linkul de mai sus și rulați codul python de mai jos

Cod Python

de la scipy.spatial import distancefrom imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (ochi):

A = distance.euclidean (ochi [1], eye [5]) B = distance.euclidean (eye [2], eye [4]) C = distance.euclidean (eye [0], eye [3]) ear = (A + B) / (2.0 * C) întoarce urechea = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # Dat fișierul este esența codului

(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) gri = cv2.cvtColor (cadru, cv2. COLOR_BGR2GRAY) subiecte = detectează (gri, 0) pentru subiect la subiecte: formă = prezice (gri, subiect) forma = față_utile.shape_to_np (formă) #converting la NumPy Array leftEye = formă [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.convexHull. drawContours (cadru, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (cadru, "**************** ALERTĂ! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (cadru, "***************** 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 ()

Pasul 3: Versiunea Raspberry Pi

Versiunea Raspberry Pi
Versiunea Raspberry Pi
Versiunea Raspberry Pi
Versiunea Raspberry Pi

când persoanele își închid ochii, atunci zmeura pi vă va alerta

CONECTAȚI buzzerul la pinul 23 (vedeți poza)

de la distanță de import scipy.spatial

importați RPi. GPIO ca GPIO

din timp import somn

GPIO.setwarnings (Fals)

GPIO.setmode (GPIO. BCM)

din imutils import face_utils

import imutils import dlib import cv2

buzzer = 23

GPIO.setup (buzzer, GPIO. OUT)

def eye_aspect_ratio (ochi):

A = distance.euclidean (ochi [1], eye [5]) B = distance.euclidean (eye [2], eye [4]) C = distance.euclidean (eye [0], eye [3]) ear = (A + B) / (2.0 * C) întoarce urechea = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # Dat fișierul este esența codului

(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) gri = cv2.cvtColor (cadru, cv2. COLOR_BGR2GRAY) subiecte = detectează (gri, 0) pentru subiect la subiecte: formă = prezice (gri, subiect) forma = față_utile.shape_to_np (formă) #converting la NumPy Array leftEye = formă [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.convexHull drawContours (cadru, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (cadru, "**************** ALERTĂ! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (cadru, "***************** ALERTĂ! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.output (buzzer, GPIO. HIGH)

else: flag = 0

GPIO.output (buzzer, GPIO. LOW)

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

Recomandat: