- Komponenter, der kræves
- Installation af OpenCV i Raspberry Pi
- Installation af andre påkrævede pakker
- Programmering af Raspberry Pi
- Test af detektionssystemet til førerens døsighed
Lastbilchauffører, der transporterer lasten og tunge materialer over lange afstande dag og nat, lider ofte af søvnmangel. træthed og døsighed er nogle af de vigtigste årsager til større ulykker på motorveje. Bilindustrien arbejder på nogle teknologier, der kan opdage døsighed og advare føreren om det.
I dette projekt skal vi opbygge et søvnfølende og alarmsystem til drivere ved hjælp af Raspberry Pi, OpenCV og Pi kameramodul. Det grundlæggende formål med dette system er at spore førerens ansigtsforhold og øjenbevægelser, og hvis føreren føler sig døsig, vil systemet udløse en advarselsmeddelelse. Dette er udvidelsen af vores tidligere ansigtsmærkning og ansigtsgenkendelsesapplikation.
Komponenter, der kræves
Hardwarekomponenter
- Hindbær Pi 3
- Pi kameramodul
- Micro USB-kabel
- Summer
Software og onlinetjenester
- OpenCV
- Dlib
- Python3
Før vi fortsætter med dette driver afsløringsprojekt , skal vi først installere OpenCV, imutils, dlib, Numpy og nogle andre afhængigheder i dette projekt. OpenCV bruges her til digital billedbehandling. De mest almindelige anvendelser af digital billedbehandling er genstandsdetektering, ansigtsgenkendelse og persontæller.
Her bruger vi kun Raspberry Pi, Pi Camera og en summer til at opbygge dette søvnregistreringssystem.
Installation af OpenCV i Raspberry Pi
Før du installerer OpenCV og andre afhængigheder, skal Raspberry Pi opdateres fuldt ud. Brug nedenstående kommandoer til at opdatere Raspberry Pi til den nyeste version:
sudo apt-get opdatering
Brug derefter følgende kommandoer til at installere de nødvendige afhængigheder til installation af OpenCV på din 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
Endelig skal du installere OpenCV på Raspberry Pi ved hjælp af nedenstående kommandoer.
pip3 installer opencv-contrib-python == 4.1.0.25
Hvis du er ny i OpenCV, skal du tjekke vores tidligere OpenCV-tutorials med Raspberry pi:
- Installation af OpenCV på Raspberry Pi ved hjælp af CMake
- Realtids ansigtsgenkendelse med Raspberry Pi og OpenCV
- Registrering af nummerplade ved hjælp af Raspberry Pi og OpenCV
- Estimering af mængde ved hjælp af OpenCV og Raspberry Pi
Vi har også oprettet en række OpenCV-tutorials startende fra begynderniveauet.
Installation af andre påkrævede pakker
Før vi programmerer Raspberry Pi til Døsighedsdetektor, lad os installere de andre nødvendige pakker.
Installation af dlib: dlib er det moderne værktøjssæt, der indeholder maskinindlæringsalgoritmer og værktøjer til virkelige problemer. Brug nedenstående kommando til at installere dlib.
pip3 installer dlib
Installation af NumPy: NumPy er kernebiblioteket til videnskabelig computing, der indeholder et kraftfuldt n-dimensionelt array-objekt, giver værktøjer til integration af C, C ++ osv.
pip3 installere numpy
Installation af face_recognition-modul: Dette bibliotek bruges til at genkende og manipulere ansigter fra Python eller kommandolinjen. Brug nedenstående kommando til at installere ansigtsgenkendelsesbiblioteket.
Pip3 installerer face_recognition
Og til sidst skal du installere eye_game- biblioteket ved hjælp af nedenstående kommando:
pip3 installer eye-game
Programmering af Raspberry Pi
Komplet kode til Driver Døsighed Detektor ved hjælp af OpenCV er angivet i slutningen af siden. Her forklarer vi nogle vigtige dele af koden for bedre forståelse.
Så som normalt skal du starte koden ved at inkludere alle de nødvendige biblioteker.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO som GPIO import eye_game
Derefter skal du oprette en instans for at hente videofeed fra pi-kameraet. Hvis du bruger mere end et kamera, skal du erstatte nul med et i cv2.VideoCapture (0) -funktionen.
video_capture = cv2.VideoCapture (0)
Indtast nu filnavnet og stien i de næste linjer. I mit tilfælde er både koden og filen i den samme mappe. Brug derefter ansigtskodningerne for at få ansigtsplaceringen på billedet.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Opret derefter to arrays for at gemme ansigterne og deres navne. Jeg bruger kun ét billede; du kan tilføje flere billeder og deres stier i koden.
known_face_encodings = kendt_face_names =
Opret derefter nogle variabler til at gemme placeringer af ansigtsdele, ansigtsnavne og kodninger.
face_locations = face_encodings = face_names = process_this_frame = True
Inde i while- funktionen skal du fange videorammerne fra streaming og ændre størrelsen på rammerne til mindre størrelse og også konvertere den optagne ramme til RGB-farve til ansigtsgenkendelse.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Kør derefter ansigtsgenkendelsesprocessen for at sammenligne ansigterne i videoen med billedet. Og også få ansigtsdelene placeringer.
hvis process_this_frame: face_locations = face_recognition.face_locations (rgb_small_frame) face_encodings = face_recognition.face_codings (rgb_small_frame, face_locations) cv2.imwrite (file, small_frame)
Hvis det genkendte ansigt stemmer overens med ansigtet i billedet, skal du ringe til øjenspilfunktionen for at spore øjenbevægelserne. Koden vil gentagne gange spore øjet og øjeæblets position.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) if matches: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (retning)
Hvis koden ikke registrerer nogen øjenbevægelse i 10 sekunder, vil den udløse alarmen for at vække personen.
ellers: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Alert !! Driver Sløvhed fundet ")
Brug derefter OpenCV-funktionerne til at tegne et rektangel rundt om ansigtet og lægge en tekst på det. Vis også videorammerne ved hjælp af cv2.imshow- funktionen.
cv2.rectangle (ramme, (venstre, top), (højre, nederst), (0, 255, 0), 2) cv2. rektangel (ramme, (venstre, nederste - 35), (højre, nederst), (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', ramme) Indstil tasten 'S' for at stoppe koden. hvis cv2.waitKey (1) & 0xFF == ord ('s'): pause
Test af detektionssystemet til førerens døsighed
Når koden er klar, skal du slutte Pi-kameraet og en summer til Raspberry Pi og køre koden. Efter ca. 10 sekunder vises et vindue med live streaming fra dit Raspberry Pi-kamera. Når enheden genkender ansigtet, udskriver det dit navn på rammen og begynder at spore øjenbevægelsen. Luk nu øjnene i 7 til 8 sekunder for at teste alarmen. Når optællingen bliver mere end 10, udløser den en alarm, der advarer dig om situationen.
Sådan kan du opbygge Døsighedsdetektor ved hjælp af OpenCV og Raspberry Pi. Rul ned for arbejdsvideoen og koden.