- Composants requis
- Installer OpenCV dans Raspberry Pi
- Installation d'autres packages requis
- Programmation du Raspberry Pi
- Test du système de détection de la somnolence du conducteur
Les camionneurs qui transportent la marchandise et les matériaux lourds sur de longues distances de jour comme de nuit souffrent souvent d'un manque de sommeil. la fatigue et la somnolence sont parmi les principales causes d'accidents majeurs sur les routes. Les industries automobiles travaillent sur des technologies capables de détecter la somnolence et d'alerter le conducteur à ce sujet.
Dans ce projet, nous allons créer un système de détection et d'alerte du sommeil pour les conducteurs utilisant le module de caméra Raspberry Pi, OpenCV et Pi. L'objectif de base de ce système est de suivre l'état du visage et les mouvements des yeux du conducteur et si le conducteur se sent somnolent, le système déclenchera un message d'avertissement. Il s'agit de l'extension de notre précédente application de détection de repère facial et de reconnaissance faciale.
Composants requis
Composants matériels
- Raspberry Pi 3
- Module de caméra Pi
- Câble micro USB
- Avertisseur sonore
Logiciels et services en ligne
- OpenCV
- Dlib
- Python3
Avant de procéder à ce projet de détection de la somnolence du conducteur , d' abord, nous devons installer OpenCV, imutils, Dlib, Numpy, et d'autres dépendances dans ce projet. OpenCV est utilisé ici pour le traitement d'images numériques. Les applications les plus courantes du traitement numérique des images sont la détection d'objets, la reconnaissance faciale et le compteur de personnes.
Ici, nous n'utilisons que Raspberry Pi, caméra Pi et un buzzer pour créer ce système de détection du sommeil.
Installer OpenCV dans Raspberry Pi
Avant d'installer OpenCV et d'autres dépendances, le Raspberry Pi doit être entièrement mis à jour. Utilisez les commandes ci-dessous pour mettre à jour le Raspberry Pi vers sa dernière version:
sudo apt-get mise à jour
Utilisez ensuite les commandes suivantes pour installer les dépendances requises pour installer OpenCV sur votre 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
Enfin, installez OpenCV sur Raspberry Pi à l'aide des commandes ci-dessous.
pip3 installer opencv-contrib-python == 4.1.0.25
Si vous êtes nouveau sur OpenCV, consultez nos précédents tutoriels OpenCV avec Raspberry pi:
- Installer OpenCV sur Raspberry Pi à l'aide de CMake
- Reconnaissance faciale en temps réel avec Raspberry Pi et OpenCV
- Reconnaissance de plaque d'immatriculation à l'aide de Raspberry Pi et OpenCV
- Estimation de la taille de la foule avec OpenCV et Raspberry Pi
Nous avons également créé une série de tutoriels OpenCV à partir du niveau débutant.
Installation d'autres packages requis
Avant de programmer le Raspberry Pi for Drowsiness Detector, installons les autres packages requis.
Installation de dlib: dlib est la boîte à outils moderne qui contient des algorithmes d'apprentissage automatique et des outils pour les problèmes du monde réel. Utilisez la commande ci-dessous pour installer le dlib.
pip3 installer dlib
Installation de NumPy: NumPy est la bibliothèque de base pour le calcul scientifique qui contient un puissant objet tableau à n dimensions, fournit des outils pour intégrer C, C ++, etc.
pip3 installer numpy
Installation du module face_recognition: Cette bibliothèque permet de reconnaître et de manipuler des visages depuis Python ou la ligne de commande. Utilisez la commande ci-dessous pour installer la bibliothèque de reconnaissance faciale.
Pip3 installer face_recognition
Et dans le dernier, installez la bibliothèque eye_game en utilisant la commande ci-dessous:
pip3 installer eye-game
Programmation du Raspberry Pi
Le code complet du détecteur de somnolence du conducteur utilisant OpenCV est donné à la fin de la page. Nous expliquons ici certaines parties importantes du code pour une meilleure compréhension.
Donc, comme d'habitude, démarrez le code en incluant toutes les bibliothèques requises.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
Après cela, créez une instance pour obtenir le flux vidéo de la caméra pi. Si vous utilisez plus d'une caméra, remplacez zéro par une dans la fonction cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Maintenant, dans les lignes suivantes, entrez le nom du fichier et le chemin du fichier. Dans mon cas, le code et le fichier sont dans le même dossier. Ensuite, utilisez les encodages de visage pour obtenir l'emplacement du visage dans l'image.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Ensuite, créez deux tableaux pour enregistrer les faces et leurs noms. Je n'utilise qu'une seule image; vous pouvez ajouter plus d'images et leurs chemins dans le code.
known_face_encodings = known_face_names =
Créez ensuite des variables pour stocker les emplacements des parties de face, les noms de face et les encodages.
face_locations = face_encodings = face_names = process_this_frame = True
À l'intérieur de la fonction while , capturez les images vidéo du streaming et redimensionnez les images à une taille plus petite et convertissez également l'image capturée en couleur RVB pour la reconnaissance faciale.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Après cela, exécutez le processus de reconnaissance faciale pour comparer les visages de la vidéo avec l'image. Et obtenez également les emplacements des parties du visage.
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 (fichier, small_frame)
Si le visage reconnu correspond au visage de l'image, appelez la fonction eyegame pour suivre les mouvements des yeux. Le code suivra à plusieurs reprises la position de l'œil et du globe oculaire.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) si correspond à: name = known_face_names direction = eye_game.get_eyeball_direction (fichier) impression (direction)
Si le code ne détecte aucun mouvement oculaire pendant 10 secondes, il déclenchera l'alarme pour réveiller la personne.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alerte! ! Alerte !! Somnolence du conducteur détectée ")
Ensuite, utilisez les fonctions OpenCV pour dessiner un rectangle autour du visage et mettre un texte dessus. Affichez également les images vidéo à l'aide de la fonction cv2.imshow .
cv2.rectangle (cadre, (gauche, haut), (droite, bas), (0, 255, 0), 2) cv2.rectangle (cadre, (gauche, bas - 35), (droite, bas), (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', frame) Réglez la touche 'S' pour arrêter le code. si cv2.waitKey (1) & 0xFF == ord ('s'): break
Test du système de détection de la somnolence du conducteur
Une fois le code prêt, connectez la caméra et le buzzer Pi à Raspberry Pi et exécutez le code. Après environ 10 secondes, une fenêtre apparaîtra avec la diffusion en direct de votre caméra Raspberry Pi. Lorsque l'appareil reconnaît le visage, il imprime votre nom sur le cadre et commence à suivre le mouvement des yeux. Fermez maintenant les yeux pendant 7 à 8 secondes pour tester l'alarme. Lorsque le compte devient supérieur à 10, il déclenchera une alarme, vous alertant de la situation.
C'est ainsi que vous pouvez créer un détecteur de somnolence en utilisant OpenCV et Raspberry Pi. Faites défiler vers le bas pour la vidéo de travail et le code.