- Componentes requeridos
- Instalación de OpenCV en Raspberry Pi
- Instalación de otros paquetes necesarios
- Programando la Raspberry Pi
- Prueba del sistema de detección de somnolencia del conductor
Los conductores de camiones que transportan la carga y los materiales pesados a largas distancias durante el día y la noche, a menudo sufren de falta de sueño. la fatiga y la somnolencia son algunas de las principales causas de accidentes graves en las carreteras. Las industrias del automóvil están trabajando en algunas tecnologías que pueden detectar la somnolencia y alertar al conductor sobre ella.
En este proyecto, vamos a construir un sistema de alerta y detección del sueño para conductores que utilicen módulos de cámara Raspberry Pi, OpenCV y Pi. El propósito básico de este sistema es rastrear la condición facial del conductor y los movimientos oculares y si el conductor se siente somnoliento, el sistema activará un mensaje de advertencia. Esta es la extensión de nuestra anterior aplicación de detección de puntos de referencia facial y reconocimiento facial.
Componentes requeridos
Componentes de hardware
- Frambuesa pi 3
- Módulo de cámara Pi
- Cable micro USB
- Zumbador
Software y servicios en línea
- OpenCV
- Dlib
- Python3
Antes de continuar con este proyecto de detección de somnolencia del controlador , primero debemos instalar OpenCV, imutils, dlib, Numpy y algunas otras dependencias en este proyecto. OpenCV se utiliza aquí para el procesamiento de imágenes digitales. Las aplicaciones más comunes del procesamiento de imágenes digitales son la detección de objetos, el reconocimiento facial y el contador de personas.
Aquí solo estamos usando Raspberry Pi, Pi Camera y un timbre para construir este sistema de detección de sueño.
Instalación de OpenCV en Raspberry Pi
Antes de instalar OpenCV y otras dependencias, la Raspberry Pi debe actualizarse por completo. Use los siguientes comandos para actualizar Raspberry Pi a su última versión:
sudo apt-get update
Luego, use los siguientes comandos para instalar las dependencias necesarias para instalar OpenCV en su Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Finalmente, instale OpenCV en Raspberry Pi usando los siguientes comandos.
pip3 instalar opencv-contrib-python == 4.1.0.25
Si es nuevo en OpenCV, consulte nuestros tutoriales anteriores de OpenCV con Raspberry pi:
- Instalación de OpenCV en Raspberry Pi usando CMake
- Reconocimiento facial en tiempo real con Raspberry Pi y OpenCV
- Reconocimiento de matrículas mediante Raspberry Pi y OpenCV
- Estimación del tamaño de la multitud con OpenCV y Raspberry Pi
También hemos creado una serie de tutoriales de OpenCV a partir del nivel principiante.
Instalación de otros paquetes necesarios
Antes de programar la Raspberry Pi para el detector de somnolencia, instalemos los otros paquetes necesarios.
Instalación de dlib: dlib es el conjunto de herramientas moderno que contiene algoritmos y herramientas de aprendizaje automático para problemas del mundo real. Utilice el siguiente comando para instalar dlib.
pip3 instalar dlib
Instalación de NumPy: NumPy es la biblioteca central para la computación científica que contiene un poderoso objeto de matriz n-dimensional, proporciona herramientas para integrar C, C ++, etc.
pip3 instalar numpy
Instalación del módulo face_recognition: esta biblioteca se utiliza para reconocer y manipular caras desde Python o la línea de comandos. Utilice el siguiente comando para instalar la biblioteca de reconocimiento facial.
Pip3 instalar face_recognition
Y en el último, instale la biblioteca eye_game usando el siguiente comando:
pip3 instalar eye-game
Programando la Raspberry Pi
El código completo para el Detector de somnolencia del conductor que usa OpenCV se encuentra al final de la página. Aquí explicamos algunas partes importantes del código para una mejor comprensión.
Entonces, como de costumbre, inicie el código incluyendo todas las bibliotecas requeridas.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
Después de eso, cree una instancia para obtener la transmisión de video de la cámara pi. Si está utilizando más de una cámara, reemplace cero con uno en la función cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Ahora, en las siguientes líneas, ingrese el nombre del archivo y la ruta del archivo. En mi caso, tanto el código como el archivo están en la misma carpeta. Luego, use las codificaciones de caras para obtener la ubicación de la cara en la imagen.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Después de eso, cree dos matrices para guardar las caras y sus nombres. Solo estoy usando una imagen; puede agregar más imágenes y sus rutas en el código.
Conocidos_face_encodings = conocido_face_names =
Luego, cree algunas variables para almacenar las ubicaciones de las partes de la cara, los nombres de las caras y las codificaciones.
face_locations = face_encodings = face_names = process_this_frame = True
Dentro de la función while , capture los fotogramas de video de la transmisión y cambie el tamaño de los fotogramas a un tamaño más pequeño y también convierta el fotograma capturado a color RGB para el reconocimiento facial.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Después de eso, ejecute el proceso de reconocimiento facial para comparar las caras en el video con la imagen. Y también obtenga las ubicaciones de las partes de la cara.
if process_this_frame: face_locations = face_recognition.face_locations (rgb_small_frame) face_encodings = face_recognition.face_encodings (rgb_small_frame, face_locations) cv2.imwrite (archivo, small_frame)
Si la cara reconocida coincide con la cara de la imagen, llame a la función eyegame para seguir los movimientos de los ojos. El código rastreará repetidamente la posición del ojo y el globo ocular.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) si coincide: nombre = nombres de caras conocidos dirección = eye_game.get_eyeball_direction (archivo) print (dirección)
Si el código no detecta ningún movimiento ocular durante 10 segundos, activará la alarma para despertar a la persona.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alerta! ! Alerta !! Se detectó somnolencia en el conductor ")
Luego, use las funciones de OpenCV para dibujar un rectángulo alrededor de la cara y ponerle un texto. Además, muestre los fotogramas de video usando la función cv2.imshow .
cv2.rectangle (frame, (left, top), (right, bottom), (0, 255, 0), 2) cv2.rectangle (frame, (left, bottom - 35), (right, bottom), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (frame, name, (left + 6, bottom - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', fotograma) Configure la tecla 'S' para detener el código. si cv2.waitKey (1) & 0xFF == ord ('s'): romper
Prueba del sistema de detección de somnolencia del conductor
Una vez que el código esté listo, conecte la cámara Pi y el timbre a Raspberry Pi y ejecute el código. Después de aproximadamente 10 segundos, aparecerá una ventana con la transmisión en vivo desde su cámara Raspberry Pi. Cuando el dispositivo reconoce la cara, imprimirá su nombre en el marco y comenzará a seguir el movimiento de los ojos. Ahora cierre los ojos durante 7 a 8 segundos para probar la alarma. Cuando el recuento sea superior a 10, activará una alarma que le alertará sobre la situación.
Así es como puede construir Drowsiness Detector usando OpenCV y Raspberry Pi. Desplácese hacia abajo para ver el video y el código de trabajo.