- Erforderliche Komponenten
- OpenCV in Raspberry Pi installieren
- Andere erforderliche Pakete installieren
- Programmierung des Raspberry Pi
- Testen des Systems zur Erkennung der Schläfrigkeit des Fahrers
LKW-Fahrer, die Tag und Nacht Fracht und schweres Material über große Entfernungen transportieren, leiden häufig unter Schlafmangel. Müdigkeit und Schläfrigkeit sind einige der Hauptursachen für schwere Unfälle auf Autobahnen. Die Automobilindustrie arbeitet an einigen Technologien, die die Schläfrigkeit erkennen und den Fahrer darauf aufmerksam machen können.
In diesem Projekt werden wir ein Schlaferkennungs- und Warnsystem für Fahrer unter Verwendung des Raspberry Pi, OpenCV und Pi Kameramoduls erstellen. Der Hauptzweck dieses Systems besteht darin, den Gesichtszustand und die Augenbewegungen des Fahrers zu verfolgen. Wenn sich der Fahrer schläfrig fühlt, löst das System eine Warnmeldung aus. Dies ist die Erweiterung unserer früheren Anwendung zur Erkennung von Gesichtsmarkierungen und zur Gesichtserkennung.
Erforderliche Komponenten
Hardware-Komponenten
- Himbeer Pi 3
- Pi-Kameramodul
- Micro-USB-Kabel
- Summer
Software und Online-Dienste
- OpenCV
- Dlib
- Python3
Bevor Sie mit diesem Vorgehen Aufmerksamkeits-Assistent Projekt , zuerst müssen wir OpenCV, imutils installieren, DLIB, Numpy und einige andere Abhängigkeiten in diesem Projekt. OpenCV wird hier für die digitale Bildverarbeitung verwendet. Die häufigsten Anwendungen der digitalen Bildverarbeitung sind Objekterkennung, Gesichtserkennung und Personenzähler.
Hier verwenden wir nur Raspberry Pi, Pi Camera und einen Summer, um dieses Schlaferkennungssystem zu bauen.
OpenCV in Raspberry Pi installieren
Vor der Installation von OpenCV und anderen Abhängigkeiten muss der Raspberry Pi vollständig aktualisiert werden. Verwenden Sie die folgenden Befehle, um den Raspberry Pi auf die neueste Version zu aktualisieren:
sudo apt-get update
Verwenden Sie dann die folgenden Befehle, um die erforderlichen Abhängigkeiten für die Installation von OpenCV auf Ihrem Raspberry Pi zu installieren.
sudo apt-get installiere libhdf5-dev -y sudo apt-get installiere libhdf5-serial-dev –y sudo apt-get installiere libatlas-base-dev –y sudo apt-get installiere libjasper-dev -y sudo apt-get installiere libqtgui4 –Y sudo apt-get install libqt4-test –y
Installieren Sie abschließend OpenCV mit den folgenden Befehlen auf Raspberry Pi.
pip3 installiere opencv-contrib-python == 4.1.0.25
Wenn Sie OpenCV noch nicht kennen, lesen Sie unsere vorherigen OpenCV-Tutorials mit Raspberry pi:
- Installieren von OpenCV auf Raspberry Pi mit CMake
- Echtzeit-Gesichtserkennung mit Raspberry Pi und OpenCV
- Kennzeichenerkennung mit Raspberry Pi und OpenCV
- Crowd Size Estimation mit OpenCV und Raspberry Pi
Wir haben auch eine Reihe von OpenCV-Tutorials für Anfänger erstellt.
Andere erforderliche Pakete installieren
Bevor Sie den Raspberry Pi für Drowsiness Detector programmieren, installieren Sie die anderen erforderlichen Pakete.
Installation von dlib: dlib ist das moderne Toolkit, das Algorithmen und Tools für maschinelles Lernen für reale Probleme enthält. Verwenden Sie den folgenden Befehl, um die dlib zu installieren.
pip3 installiere dlib
Installieren von NumPy: NumPy ist die Kernbibliothek für wissenschaftliches Rechnen, die ein leistungsstarkes n-dimensionales Array-Objekt enthält und Tools zur Integration von C, C ++ usw. bereitstellt.
pip3 install numpy
Installieren des Moduls face_recognition: Diese Bibliothek dient zum Erkennen und Bearbeiten von Gesichtern in Python oder der Befehlszeile. Verwenden Sie den folgenden Befehl, um die Gesichtserkennungsbibliothek zu installieren.
Pip3 installiert face_recognition
Installieren Sie im letzten Schritt die Bibliothek eye_game mit dem folgenden Befehl:
pip3 installiere das Augenspiel
Programmierung des Raspberry Pi
Der vollständige Code für den Driver Drowsiness Detector mit OpenCV finden Sie am Ende der Seite. Hier erklären wir einige wichtige Teile des Codes zum besseren Verständnis.
Starten Sie den Code also wie gewohnt, indem Sie alle erforderlichen Bibliotheken einschließen.
import face_recognition import cv2 import numpy als np import time import cv2 import RPi.GPIO als GPIO import eye_game
Erstellen Sie anschließend eine Instanz, um den Video-Feed von der Pi-Kamera abzurufen. Wenn Sie mehr als eine Kamera verwenden, ersetzen Sie in der Funktion cv2.VideoCapture (0) Null durch Eins.
video_capture = cv2.VideoCapture (0)
Geben Sie nun in den nächsten Zeilen den Dateinamen und den Pfad der Datei ein. In meinem Fall befinden sich sowohl der Code als auch die Datei im selben Ordner. Verwenden Sie dann die Gesichtscodierungen, um die Gesichtsposition im Bild zu ermitteln.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Erstellen Sie anschließend zwei Arrays, um die Gesichter und ihre Namen zu speichern. Ich benutze nur ein Bild; Sie können dem Code weitere Bilder und deren Pfade hinzufügen.
bekannte_gesichtskodierungen = bekannte_gesichtsnamen =
Erstellen Sie dann einige Variablen, um die Positionen der Gesichtsteile, Gesichtsnamen und Codierungen zu speichern.
face_locations = face_encodings = face_names = process_this_frame = True
Nehmen Sie innerhalb der while- Funktion die Videobilder aus dem Streaming auf, ändern Sie die Größe der Bilder auf eine kleinere Größe und konvertieren Sie das aufgenommene Bild zur Gesichtserkennung in RGB-Farbe.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Führen Sie anschließend den Gesichtserkennungsprozess aus, um die Gesichter im Video mit dem Bild zu vergleichen. Und auch die Gesichtsteile Positionen bekommen.
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 (file, small_frame)
Wenn das erkannte Gesicht mit dem Gesicht im Bild übereinstimmt , rufen Sie die Augenspielfunktion auf, um die Augenbewegungen zu verfolgen. Der Code verfolgt wiederholt die Position von Auge und Augapfel.
face_distances = face_recognition.face_distance (bekannte_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) wenn übereinstimmt: name = bekannte_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Wenn der Code 10 Sekunden lang keine Augenbewegung erkennt, löst er den Alarm aus, um die Person aufzuwecken.
sonst: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Alarm !! Fahrerschläfrigkeit erkannt ")
Verwenden Sie dann die OpenCV-Funktionen, um ein Rechteck um das Gesicht zu zeichnen und einen Text darauf zu platzieren. Zeigen Sie die Videobilder auch mit der Funktion cv2.imshow an .
cv2.rectangle (Rahmen, (links, oben), (rechts, unten), (0, 255, 0), 2) cv2.rectangle (Rahmen, (links, unten - 35), (rechts, unten), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (Rahmen, Name, (links + 6, unten - 6), Schriftart, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', Bild) Stellen Sie die Taste 'S' ein, um den Code zu stoppen. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Testen des Systems zur Erkennung der Schläfrigkeit des Fahrers
Sobald der Code fertig ist, schließen Sie die Pi-Kamera und den Summer an Raspberry Pi an und führen Sie den Code aus. Nach ca. 10 Sekunden wird ein Fenster mit dem Live-Streaming von Ihrer Raspberry Pi-Kamera angezeigt. Wenn das Gerät das Gesicht erkennt, druckt es Ihren Namen auf den Rahmen und beginnt, die Augenbewegung zu verfolgen. Schließen Sie nun Ihre Augen für 7 bis 8 Sekunden, um den Alarm zu testen. Wenn die Anzahl mehr als 10 beträgt, wird ein Alarm ausgelöst, der Sie über die Situation informiert.
So können Sie mit OpenCV und Raspberry Pi den Drowsiness Detector erstellen. Scrollen Sie nach unten für das Arbeitsvideo und den Code.