- Požadované komponenty
- Instalace OpenCV na Raspberry Pi
- Instalace dalších požadovaných balíčků
- Programování Raspberry Pi
- Testování systému detekce ospalosti řidiče
Řidiči nákladních vozidel, kteří přepravují náklad a těžké materiály na velké vzdálenosti ve dne i v noci, často trpí nedostatkem spánku. únava a ospalost jsou některé z hlavních příčin velkých nehod na dálnicích. Automobilový průmysl pracuje na některých technologiích, které dokážou detekovat ospalost a upozornit na to řidiče.
V tomto projektu budeme budovat systém snímání a varování spánku pro řidiče využívající kamerový modul Raspberry Pi, OpenCV a Pi. Základním účelem tohoto systému je sledovat stav obličeje a pohyby očí řidiče a pokud se řidič cítí ospalý, systém vydá varovnou zprávu. Jedná se o rozšíření naší předchozí aplikace pro detekci orientačních bodů obličeje a rozpoznávání obličeje.
Požadované komponenty
Hardwarové komponenty
- Raspberry Pi 3
- Modul kamery Pi
- Kabel micro USB
- Bzučák
Software a online služby
- OpenCV
- Dlib
- Python3
Před pokračováním v tomto projektu detekce ospalosti ovladačů je nejprve nutné v tomto projektu nainstalovat OpenCV, imutils, dlib, Numpy a některé další závislosti. OpenCV se zde používá pro digitální zpracování obrazu. Nejběžnějšími aplikacemi digitálního zpracování obrazu jsou detekce objektů, rozpoznávání tváře a počítadlo osob.
Tady používáme pouze Raspberry Pi, Pi Camera a bzučák k vytvoření tohoto systému detekce spánku.
Instalace OpenCV na Raspberry Pi
Před instalací OpenCV a dalších závislostí je třeba Raspberry Pi plně aktualizovat. Pomocí následujících příkazů aktualizujte Raspberry Pi na nejnovější verzi:
sudo apt-get aktualizace
Potom použijte následující příkazy k instalaci požadovaných závislostí pro instalaci OpenCV na 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 nainstalovat libqt4-test –y
Nakonec nainstalujte OpenCV na Raspberry Pi pomocí níže uvedených příkazů.
pip3 nainstalujte opencv-contrib-python == 4.1.0.25
Pokud jste v OpenCV nováčkem, podívejte se na naše předchozí výukové programy OpenCV s Raspberry pi:
- Instalace OpenCV na Raspberry Pi pomocí CMake
- Rozpoznávání tváře v reálném čase s Raspberry Pi a OpenCV
- Rozpoznávání SPZ pomocí Raspberry Pi a OpenCV
- Odhad velikosti davu pomocí OpenCV a Raspberry Pi
Také jsme vytvořili řadu výukových programů OpenCV od úrovně pro začátečníky.
Instalace dalších požadovaných balíčků
Před programováním Raspberry Pi pro detektor ospalosti si nainstalujte další požadované balíčky.
Instalace dlib: dlib je moderní sada nástrojů, která obsahuje algoritmy strojového učení a nástroje pro řešení problémů v reálném světě. Pomocí níže uvedeného příkazu nainstalujte dlib.
pip3 nainstalujte dlib
Instalace NumPy: NumPy je základní knihovna pro vědecké výpočty, která obsahuje výkonný objekt n-dimenzionálního pole, poskytuje nástroje pro integraci C, C ++ atd.
pip3 install numpy
Instalace modulu face_recognition: Tato knihovna slouží k rozpoznávání a manipulaci s tvářemi z Pythonu nebo příkazového řádku. Pomocí níže uvedeného příkazu nainstalujte knihovnu rozpoznávání obličeje.
Pip3 nainstalujte face_recognition
A na konci nainstalujte knihovnu eye_game pomocí následujícího příkazu:
pip3 nainstalovat oční hru
Programování Raspberry Pi
Úplný kód pro detektor ospalosti řidiče pomocí OpenCV je uveden na konci stránky. Zde vysvětlujeme některé důležité části kódu pro lepší pochopení.
Jako obvykle tedy spusťte kód zahrnutím všech požadovaných knihoven.
import face_recognition import cv2 import numpy jako np čas importu import cv2 import RPi.GPIO jako GPIO import eye_game
Poté vytvořte instanci pro získání videa z kamery pi. Pokud používáte více než jednu kameru, nahraďte nulu jednou ve funkci cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Nyní na dalších řádcích zadejte název souboru a cestu k souboru. V mém případě jsou kód i soubor ve stejné složce. Poté použijte kódování obličejů k získání polohy obličeje na obrázku.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Poté vytvořte dvě pole pro uložení tváří a jejich jmen. Používám pouze jeden obrázek; v kódu můžete přidat další obrázky a jejich cesty.
known_face_encodings = known_face_names =
Poté vytvořte několik proměnných pro uložení umístění částí obličeje, názvů obličejů a kódování.
face_locations = face_encodings = face_names = process_this_frame = True
Ve funkci while zachytávejte videozáznamy ze streamování, změňte jejich velikost na menší velikost a také převádějte zaznamenaný snímek do RGB barvy pro rozpoznávání tváře.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Poté spusťte proces rozpoznávání tváře a porovnejte tváře ve videu s obrázkem. A také získejte umístění částí obličeje.
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 (soubor, small_frame)
Pokud se rozpoznaný obličej shoduje s obličejem na obrázku, zavolejte funkci eyegame a sledujte pohyby očí. Kód bude opakovaně sledovat polohu oka a oční bulvy.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) pokud odpovídá: name = known_face_names direction = eye_game.get_eyeball_direction (soubor) tisk (směr)
Pokud kód po dobu 10 sekund nezjistí žádný pohyb očí, spustí alarm, aby osobu probudil.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Výstraha !! Byla zjištěna ospalost řidiče ")
Potom pomocí funkcí OpenCV nakreslete obdélník kolem obličeje a vložte na něj text. Také zobrazujte videozáznamy pomocí funkce 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 (rámeček, název, (vlevo + 6, dole - 6), písmo, 1,0, (0, 0, 255), 1) cv2.imshow („Video“, rám) Nastavením klávesy „S“ zastavíte kód. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Testování systému detekce ospalosti řidiče
Jakmile je kód připraven, připojte kameru Pi a bzučák k Raspberry Pi a spusťte kód. Po přibližně 10 sekundách se zobrazí okno s živým přenosem z vaší kamery Raspberry Pi. Když zařízení rozpozná obličej, vytiskne vaše jméno na rámeček a začne sledovat pohyb očí. Nyní zavřete oči na 7 až 8 sekund, abyste otestovali alarm. Když se počet zvýší na více než 10, spustí se alarm, který vás upozorní na situaci.
Takto můžete sestavit detektor ospalosti pomocí OpenCV a Raspberry Pi. Přejděte dolů na pracovní video a kód.