Table des matières:

Système d'alerte de somnolence : 3 étapes
Système d'alerte de somnolence : 3 étapes

Vidéo: Système d'alerte de somnolence : 3 étapes

Vidéo: Système d'alerte de somnolence : 3 étapes
Vidéo: Sécurité routière : des lunettes connectées contre la somnolence au volant - Le Magazine de la santé 2024, Juillet
Anonim
Système d'alerte de somnolence
Système d'alerte de somnolence

Chaque année, de nombreuses personnes perdent la vie à cause d'accidents de la route mortels dans le monde et la somnolence au volant est l'une des principales causes d'accidents de la route et de décès. La fatigue et le micro-sommeil aux commandes de conduite sont souvent à l'origine d'accidents graves. Cependant, les premiers signes de fatigue peuvent être détectés avant qu'une situation critique ne se produise et, par conséquent, la détection de la fatigue du conducteur et son indication sont un sujet de recherche en cours. La plupart des méthodes traditionnelles de détection de la somnolence sont basées sur des aspects comportementaux, tandis que certaines sont intrusives et peuvent distraire les conducteurs, tandis que d'autres nécessitent des capteurs coûteux. Par conséquent, dans cet article, un système léger de détection de somnolence du conducteur en temps réel est développé et mis en œuvre sur une application Android. Le système enregistre les vidéos et détecte le visage du conducteur dans chaque image en utilisant des techniques de traitement d'image. Le système est capable de détecter les repères faciaux, calcule le rapport d'aspect des yeux (EAR) et le rapport de fermeture des yeux (ECR) pour détecter la somnolence du conducteur sur la base d'un seuil adaptatif. Des algorithmes d'apprentissage automatique ont été utilisés pour tester l'efficacité de l'approche proposée. Les résultats empiriques démontrent que le modèle proposé est capable d'atteindre une précision de 84 % en utilisant un classificateur de forêt aléatoire.

Étape 1: choses dont vous avez besoin

1. FRAMBOISE PI

2. WEBCAM (WEB CAM C270 HD POUR DE MEILLEURS RÉSULTATS)

La version PC peut nécessiter quelques modifications dans le code

Étape 2: Python Code With Eyes Shape Predictor Dataset (version PC)

pour détecter les yeux de manière très efficace dans une vidéo en temps réel, nous pouvons utiliser ce fichier.dat ci-dessous.

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

Téléchargez le fichier.dat à partir du lien ci-dessus et exécutez le code python ci-dessous

Code Python

de scipy.spatial importer distancefrom imutils importer face_utils importer imutils importer dlib importer cv2

def eye_aspect_ratio(eye):

A = distance.euclidienne(œil[1], œil[5]) B = distance.euclidienne(œil[2], œil[4]) C = distance.euclidienne(œil[0], œil[3]) oreille = (A + B) / (2.0 * C) return ear seuil = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() predict = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Le fichier Dat est le nœud du code

(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 tandis que True: ret, frame=cap.read() frame = imutils.resize(frame, gris = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) sujets = détecter (gris, 0) pour le sujet dans les sujets: shape = prédire (gris, sujet) shape = face_utils.shape_to_np(shape)#conversion en NumPy Array leftEye = shape[lStart:lEnd] rightEye = forme[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) cv2. drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) si ear = frame_check: cv2.putText(frame, "******************ALERTE !****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, "****************** ALERTE !********** *****", (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()

Étape 3: Version Raspberry Pi

Version Raspberry Pi
Version Raspberry Pi
Version Raspberry Pi
Version Raspberry Pi

quand la personne ferme les yeux alors le raspberry pi vous donnera l'alerte

CONNECTEZ votre buzzer à la broche 23 (voir l'image)

à partir de la distance d'importation scipy.spatial

importer RPi. GPIO en tant que GPIO

du temps importer le sommeil

GPIO.setwarnings(False)

GPIO.setmode(GPIO. BCM)

depuis imutils importer face_utils

importer imutils importer dlib importer cv2

buzzer=23

GPIO.setup(buzzer, GPIO. OUT)

def eye_aspect_ratio(eye):

A = distance.euclidienne(œil[1], œil[5]) B = distance.euclidienne(œil[2], œil[4]) C = distance.euclidienne(œil[0], œil[3]) oreille = (A + B) / (2.0 * C) return ear seuil = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() predict = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Le fichier Dat est le nœud du code

(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 tandis que True: ret, frame=cap.read() frame = imutils.resize(frame, gris = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) sujets = détecter (gris, 0) pour le sujet dans les sujets: shape = prédire (gris, sujet) shape = face_utils.shape_to_np(shape)#conversion en NumPy Array leftEye = shape[lStart:lEnd] rightEye = forme[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) cv2. drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) si ear = frame_check: cv2.putText(frame, "******************ALERTE !****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, "****************** ALERTE !********** *****", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print ("Dro wsy")

GPIO.sortie (buzzer, GPIO. HIGH)

sinon: indicateur = 0

GPIO.sortie (buzzer, GPIO. LOW)

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

Conseillé: