Tabla de contenido:

Sistema de alerta de somnolencia: 3 pasos
Sistema de alerta de somnolencia: 3 pasos

Video: Sistema de alerta de somnolencia: 3 pasos

Video: Sistema de alerta de somnolencia: 3 pasos
Video: ESTADO DE CONCIENCIA: Nivel y Contenido de la conciencia 2024, Noviembre
Anonim
Sistema de alerta de somnolencia
Sistema de alerta de somnolencia

Cada año, muchas personas pierden la vida debido a accidentes de tráfico mortales en todo el mundo y conducir con sueño es una de las principales causas de accidentes de tráfico y muerte. La fatiga y el micro sueño en los controles de conducción son a menudo la causa principal de accidentes graves. Sin embargo, los signos iniciales de fatiga se pueden detectar antes de que surja una situación crítica y, por lo tanto, la detección de la fatiga del conductor y su indicación es un tema de investigación en curso. La mayoría de los métodos tradicionales para detectar la somnolencia se basan en aspectos del comportamiento, mientras que algunos son intrusivos y pueden distraer a los conductores, mientras que algunos requieren sensores costosos. Por lo tanto, en este documento, se desarrolla e implementa un sistema de detección de somnolencia del conductor en tiempo real y liviano en la aplicación de Android. El sistema graba los videos y detecta la cara del conductor en cada cuadro mediante el empleo de técnicas de procesamiento de imágenes. El sistema es capaz de detectar puntos de referencia faciales, calcula la relación de aspecto del ojo (EAR) y la relación de cierre del ojo (ECR) para detectar la somnolencia del conductor según el umbral adaptativo. Se han empleado algoritmos de aprendizaje automático para probar la eficacia del enfoque propuesto. Los resultados empíricos demuestran que el modelo propuesto puede lograr una precisión del 84% utilizando un clasificador de bosque aleatorio.

Paso 1: Cosas que necesita

1 FRAMBUESA PI

2. WEBCAM (C270 HD WEB CAM PARA MEJORES RESULTADOS)

La versión para PC puede necesitar algunos cambios en el código.

Paso 2: Código Python con conjunto de datos del predictor de forma de ojos (versión para PC)

Para detectar ojos de manera mucho más efectiva en un video en tiempo real, podemos usar este archivo.dat a continuación.

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

Descargue el archivo.dat del enlace de arriba y ejecute el siguiente código de Python

Código Python

desde scipy.spatial import distanciadesde imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (ojo):

A = distancia.euclidean (ojo [1], ojo [5]) B = distancia.euclidean (ojo [2], ojo [4]) C = distancia.euclidean (ojo [0], ojo [3]) oído = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # El archivo Dat es el quid del código

(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) gray = cv2.: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHullye = cv2.convex drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (marco, "**************** ¡ALERTA! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ¡ALERTA! *********** ***** ", (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 ()

Paso 3: Versión de Raspberry Pi

Versión Raspberry Pi
Versión Raspberry Pi
Versión Raspberry Pi
Versión Raspberry Pi

cuando las personas cierren los ojos, la frambuesa pi te dará la alerta

CONECTE su zumbador al pin 23 (vea la imagen)

desde la distancia de importación scipy.spatial

importar RPi. GPIO como GPIO

desde el momento de importar el sueño

GPIO.setwarnings (falso)

GPIO.setmode (GPIO. BCM)

de imutils importar face_utils

importar imutils importar dlib importar cv2

zumbador = 23

GPIO.setup (zumbador, GPIO. OUT)

def eye_aspect_ratio (ojo):

A = distancia.euclidiana (ojo [1], ojo [5]) B = distancia.euclidiana (ojo [2], ojo [4]) C = distancia.euclidiana (ojo [0], ojo [3]) oído = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # El archivo Dat es el quid del código

(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) gray = cv2.: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHullye = cv2.convex drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (marco, "**************** ¡ALERTA! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ¡ALERTA! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ")

Salida GPIO (zumbador, GPIO. HIGH)

más: bandera = 0

Salida GPIO (zumbador, GPIO. LOW)

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

Recomendado: