- Componenten vereist
- OpenCV installeren in Raspberry Pi
- Andere vereiste pakketten installeren
- Programmeren van de Raspberry Pi
- Het detectiesysteem voor slaperigheid van de bestuurder testen
Vrachtwagenchauffeurs die overdag en 's nachts de lading en zware materialen over grote afstanden vervoeren, hebben vaak last van slaapgebrek. vermoeidheid en slaperigheid zijn enkele van de belangrijkste oorzaken van grote ongevallen op snelwegen. De auto-industrie werkt aan een aantal technologieën die de slaperigheid kunnen detecteren en de bestuurder erover kunnen waarschuwen.
In dit project gaan we een slaapdetectie- en waarschuwingssysteem bouwen voor bestuurders met de Raspberry Pi-, OpenCV- en Pi-cameramodule. Het basisdoel van dit systeem is om de gezichtstoestand en oogbewegingen van de bestuurder te volgen. Als de bestuurder zich slaperig voelt, zal het systeem een waarschuwingsbericht genereren. Dit is de uitbreiding van onze vorige applicatie voor detectie van gezichtsoriëntatie en gezichtsherkenning.
Componenten vereist
Hardware onderdelen
- Raspberry Pi 3
- Pi-cameramodule
- Micro USB-kabel
- Zoemer
Software en online services
- OpenCV
- Dlib
- Python3
Voordat u verder gaat met deze driver slaperigheidsdetectie project , eerst moeten we OpenCV, imutils, dlib, numpy, en een aantal andere afhankelijkheden te installeren in dit project. OpenCV wordt hier gebruikt voor digitale beeldverwerking. De meest voorkomende toepassingen van digitale beeldverwerking zijn objectdetectie, gezichtsherkenning en mensenteller.
Hier gebruiken we alleen Raspberry Pi, Pi Camera en een zoemer om dit slaapdetectiesysteem te bouwen.
OpenCV installeren in Raspberry Pi
Voordat de OpenCV en andere afhankelijkheden worden geïnstalleerd, moet de Raspberry Pi volledig worden bijgewerkt. Gebruik de onderstaande opdrachten om de Raspberry Pi bij te werken naar de nieuwste versie:
sudo apt-get update
Gebruik vervolgens de volgende opdrachten om de vereiste afhankelijkheden te installeren voor het installeren van OpenCV op uw 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
Installeer ten slotte de OpenCV op Raspberry Pi met behulp van de onderstaande opdrachten.
pip3 installeer opencv-contrib-python == 4.1.0.25
Als je nieuw bent bij OpenCV, bekijk dan onze vorige OpenCV-tutorials met Raspberry pi:
- OpenCV installeren op Raspberry Pi met CMake
- Realtime gezichtsherkenning met Raspberry Pi en OpenCV
- Kentekenherkenning met Raspberry Pi en OpenCV
- Menigte schatten met OpenCV en Raspberry Pi
We hebben ook een reeks OpenCV-tutorials gemaakt, beginnend vanaf het beginnersniveau.
Andere vereiste pakketten installeren
Voordat we de Raspberry Pi voor slaperigheidsdetector programmeren, moeten we de andere vereiste pakketten installeren.
Dlib installeren: dlib is de moderne toolkit die Machine Learning-algoritmen en tools voor real-world problemen bevat. Gebruik de onderstaande opdracht om het dlib.
pip3 dlib installeren
NumPy installeren: NumPy is de kernbibliotheek voor wetenschappelijk computergebruik die een krachtig n-dimensionaal array-object bevat, tools biedt voor het integreren van C, C ++, enz.
pip3 installeer numpy
Face_recognition-module installeren: deze bibliotheek wordt gebruikt om gezichten van Python of de opdrachtregel te herkennen en te manipuleren. Gebruik de onderstaande opdracht om de bibliotheek voor gezichtsherkenning te installeren.
Pip3 installeer face_recognition
En in de laatste, installeer je de eye_game- bibliotheek met behulp van de onderstaande opdracht:
pip3 installeer eye-game
Programmeren van de Raspberry Pi
Aan het einde van de pagina vindt u de volledige code voor Detector voor slaperigheid van de bestuurder die OpenCV gebruikt. Hier leggen we enkele belangrijke delen van de code uit voor een beter begrip.
Dus, zoals gewoonlijk, start de code door alle vereiste bibliotheken op te nemen.
import face_recognition import cv2 import numpy als np import time import cv2 import RPi.GPIO als GPIO import eye_game
Maak daarna een instantie om de videofeed van de pi-camera te verkrijgen. Als u meer dan één camera gebruikt, vervang dan nul door één in de functie cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Voer nu in de volgende regels de bestandsnaam en het pad van het bestand in. In mijn geval bevinden zowel de code als het bestand zich in dezelfde map. Gebruik vervolgens de gezichtscoderingen om de gezichtslocatie op de foto te krijgen.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Maak daarna twee arrays om de gezichten en hun namen op te slaan. Ik gebruik maar één afbeelding; u kunt meer afbeeldingen en hun paden in de code toevoegen.
bekende_gezicht_encodings = bekende_gezicht_namen =
Maak vervolgens een aantal variabelen om de locaties van de gezichtsdelen, de namen van de gezichten en coderingen op te slaan.
face_locations = face_encodings = face_names = process_this_frame = Waar
Met de while- functie kunt u de videoframes van de streaming vastleggen en de grootte van de frames wijzigen naar een kleiner formaat en ook het vastgelegde frame converteren naar RGB-kleur voor gezichtsherkenning.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Voer daarna het gezichtsherkenningsproces uit om de gezichten in de video te vergelijken met de afbeelding. En krijg ook de locaties van de gezichtsdelen.
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 (bestand, klein_frame)
Als het herkende gezicht overeenkomt met het gezicht in de afbeelding, roep dan de ooggame-functie op om de oogbewegingen te volgen. De code zal herhaaldelijk de positie van oog en oogbol volgen.
face_distances = face_recognition.face_distance (bekende_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) als overeenkomsten: naam = bekende_face_names direction = eye_game.get_eyeball_direction (bestand) print (richting)
Als de code gedurende 10 seconden geen oogbeweging detecteert, wordt het alarm geactiveerd om de persoon wakker te maken.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Alert !! Slaperigheid bestuurder gedetecteerd ")
Gebruik vervolgens de OpenCV-functies om een rechthoek om het gezicht te tekenen en er een tekst op te zetten. Laat ook de videoframes zien met de functie 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, naam, (links + 6, onder - 6), lettertype, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', frame) Stel de sleutel 'S' in om de code te stoppen. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Het detectiesysteem voor slaperigheid van de bestuurder testen
Zodra de code klaar is, sluit u de Pi-camera en zoemer aan op Raspberry Pi en voert u de code uit. Na ongeveer 10 seconden verschijnt er een venster met de live streaming van je Raspberry Pi-camera. Wanneer het apparaat het gezicht herkent, wordt uw naam op het frame afgedrukt en begint het de oogbeweging te volgen. Sluit nu uw ogen gedurende 7 tot 8 seconden om het alarm te testen. Wanneer het aantal meer dan 10 wordt, zal het een alarm activeren en u op de hoogte stellen van de situatie.
Dit is hoe je slaperigheidsdetector kunt bouwen met OpenCV en Raspberry Pi. Scroll naar beneden voor de werkende video en code.