- Wymagane składniki
- Instalowanie OpenCV w Raspberry Pi
- Instalowanie innych wymaganych pakietów
- Programowanie Raspberry Pi
- Testowanie systemu wykrywania senności kierowcy
Kierowcy ciężarówek, którzy przewożą ładunki i ciężkie materiały na duże odległości w dzień i w nocy, często cierpią na brak snu. zmęczenie i senność to jedne z głównych przyczyn poważnych wypadków na autostradach. Przemysł motoryzacyjny pracuje nad technologiami, które mogą wykrywać senność i ostrzegać o niej kierowcę.
W tym projekcie zamierzamy zbudować system wykrywania snu i alarmowania dla sterowników przy użyciu modułu kamery Raspberry Pi, OpenCV i Pi. Podstawowym celem tego systemu jest śledzenie kondycji twarzy kierowcy i ruchów oczu, a jeśli kierowca czuje się senny, system wywoła komunikat ostrzegawczy. Jest to rozszerzenie naszej poprzedniej aplikacji do wykrywania punktów orientacyjnych i rozpoznawania twarzy.
Wymagane składniki
Komponenty sprzętowe
- Raspberry Pi 3
- Moduł kamery Pi
- Kabel Micro USB
- Brzęczyk
Oprogramowanie i usługi online
- OpenCV
- Dlib
- Python3
Przed kontynuowaniem tego projektu wykrywania senności sterownika , najpierw musimy zainstalować OpenCV, imutils, dlib, Numpy i kilka innych zależności w tym projekcie. OpenCV jest tutaj używany do cyfrowego przetwarzania obrazu. Najpopularniejsze zastosowania cyfrowego przetwarzania obrazu to wykrywanie obiektów, rozpoznawanie twarzy i licznik osób.
Tutaj używamy tylko Raspberry Pi, kamery Pi i brzęczyka do budowy tego systemu wykrywania snu.
Instalowanie OpenCV w Raspberry Pi
Przed zainstalowaniem OpenCV i innych zależności Raspberry Pi wymaga pełnej aktualizacji. Użyj poniższych poleceń, aby zaktualizować Raspberry Pi do najnowszej wersji:
sudo apt-get update
Następnie użyj następujących poleceń, aby zainstalować wymagane zależności do zainstalowania OpenCV na swoim 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
Na koniec zainstaluj OpenCV na Raspberry Pi za pomocą poniższych poleceń.
pip3 zainstaluj opencv-contrib-python == 4.1.0.25
Jeśli jesteś nowy w OpenCV, sprawdź nasze poprzednie samouczki OpenCV z Raspberry pi:
- Instalowanie OpenCV na Raspberry Pi przy użyciu CMake
- Rozpoznawanie twarzy w czasie rzeczywistym za pomocą Raspberry Pi i OpenCV
- Rozpoznawanie tablic rejestracyjnych przy użyciu Raspberry Pi i OpenCV
- Szacowanie wielkości tłumu przy użyciu OpenCV i Raspberry Pi
Stworzyliśmy również serię samouczków OpenCV, zaczynając od poziomu początkującego.
Instalowanie innych wymaganych pakietów
Przed zaprogramowaniem Raspberry Pi dla Detektora senności, zainstalujmy pozostałe wymagane pakiety.
Instalowanie dlib: dlib to nowoczesny zestaw narzędzi, który zawiera algorytmy uczenia maszynowego i narzędzia do rozwiązywania rzeczywistych problemów. Użyj poniższego polecenia, aby zainstalować plik dlib.
pip3 zainstaluj dlib
Instalowanie NumPy: NumPy to podstawowa biblioteka do obliczeń naukowych, która zawiera potężny n-wymiarowy obiekt tablicy, zapewnia narzędzia do integracji C, C ++ itp.
pip3 zainstaluj numpy
Instalowanie modułu face_recognition: ta biblioteka służy do rozpoznawania twarzy i manipulowania nimi z poziomu Pythona lub wiersza poleceń. Użyj poniższego polecenia, aby zainstalować bibliotekę rozpoznawania twarzy.
Pip3 zainstaluj face_recognition
Na koniec zainstaluj bibliotekę eye_game za pomocą poniższego polecenia:
pip3 zainstaluj grę oczu
Programowanie Raspberry Pi
Pełny kod dla Wykrywacza senności kierowców korzystającego z OpenCV znajduje się na końcu strony. Tutaj wyjaśniamy kilka ważnych części kodu dla lepszego zrozumienia.
Tak więc, jak zwykle, uruchom kod, dołączając wszystkie wymagane biblioteki.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
Następnie utwórz instancję, aby uzyskać sygnał wideo z kamery pi. Jeśli używasz więcej niż jednej kamery, zamień zero na jeden w funkcji cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Teraz w następnych wierszach wprowadź nazwę pliku i ścieżkę do pliku. W moim przypadku zarówno kod, jak i plik znajdują się w tym samym folderze. Następnie użyj kodowania twarzy, aby uzyskać lokalizację twarzy na zdjęciu.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Następnie utwórz dwie tablice, aby zapisać twarze i ich nazwy. Używam tylko jednego obrazu; możesz dodać więcej obrazów i ich ścieżek w kodzie.
known_face_encodings = known_face_names =
Następnie utwórz kilka zmiennych do przechowywania lokalizacji części twarzy, nazw twarzy i kodowania.
face_locations = face_encodings = face_names = process_this_frame = True
Wewnątrz funkcji while przechwytuj klatki wideo z przesyłania strumieniowego i zmień rozmiar klatek na mniejszy, a także przekonwertuj przechwyconą klatkę na kolor RGB w celu rozpoznawania twarzy.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Następnie uruchom proces rozpoznawania twarzy, aby porównać twarze na wideo z obrazem. A także uzyskaj lokalizacje części twarzy.
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 (plik, mała_ramka)
Jeśli rozpoznana twarz pasuje do twarzy na obrazie, wywołaj funkcję gry w oczach, aby śledzić ruchy oczu. Kod będzie wielokrotnie śledził położenie oka i gałki ocznej.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) if match: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Jeśli kod nie wykryje żadnego ruchu oczu przez 10 sekund, uruchomi alarm, aby obudzić osobę.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Uwaga! ! Alert !! Wykryto senność kierowcy ”)
Następnie użyj funkcji OpenCV, aby narysować prostokąt wokół twarzy i umieścić na nim tekst. Pokaż także klatki wideo za pomocą funkcji 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 (ramka, nazwa, (lewa + 6, dół - 6), czcionka, 1.0, (0, 0, 255), 1) cv2.imshow („Wideo”, ramka) Ustaw klawisz „S”, aby zatrzymać kod. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Testowanie systemu wykrywania senności kierowcy
Gdy kod będzie gotowy, podłącz kamerę Pi i brzęczyk do Raspberry Pi i uruchom kod. Po około 10 sekundach pojawi się okno z transmisją na żywo z kamery Raspberry Pi. Gdy urządzenie rozpozna twarz, wydrukuje Twoje imię na ramce i zacznie śledzić ruch oczu. Teraz zamknij oczy na 7 do 8 sekund, aby przetestować alarm. Gdy liczba przekroczy 10, uruchomi alarm, ostrzegając o sytuacji.
W ten sposób możesz zbudować Detektor senności przy użyciu OpenCV i Raspberry Pi. Przewiń w dół, aby zobaczyć działający film i kod.