- Komponenter krävs
- Installerar OpenCV i Raspberry Pi
- Installera andra obligatoriska paket
- Programmering av Raspberry Pi
- Testa detekteringssystemet för förarens sömnighet
Lastbilsförare som transporterar lasten och tunga material över långa sträckor under dag och natt, de lider ofta av sömnbrist. trötthet och sömnighet är några av de främsta orsakerna till större olyckor på motorvägar. Bilindustrin arbetar med vissa tekniker som kan upptäcka sömnighet och varna föraren om det.
I det här projektet ska vi bygga ett sömnavkännings- och varningssystem för drivrutiner med Raspberry Pi, OpenCV och Pi-kameramodul. Det grundläggande syftet med detta system är att spåra förarens ansiktsförhållande och ögonrörelser och om föraren känner sig dåsig kommer systemet att utlösa ett varningsmeddelande. Detta är förlängningen av vår tidigare ansiktsmärkning och ansiktsigenkänningsprogram.
Komponenter krävs
Hårdvarukomponenter
- Raspberry Pi 3
- Pi kameramodul
- Micro USB-kabel
- Summer
Programvara och onlinetjänster
- OpenCV
- Dlib
- Python3
Innan denna drivrutin dåsighet upptäckt projekt , först måste vi installera OpenCV, imutils, dlib, numpy, och några andra beroenden i detta projekt. OpenCV används här för digital bildbehandling. De vanligaste applikationerna för digital bildbehandling är objektdetektering, ansiktsigenkänning och personräknare.
Här använder vi bara Raspberry Pi, Pi Camera och en summer för att bygga detta sömndetekteringssystem.
Installerar OpenCV i Raspberry Pi
Innan du installerar OpenCV och andra beroenden måste Raspberry Pi uppdateras fullständigt. Använd kommandona nedan för att uppdatera Raspberry Pi till den senaste versionen:
sudo apt-get uppdatering
Använd sedan följande kommandon för att installera de beroenden som krävs för att installera 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
Slutligen installerar du OpenCV på Raspberry Pi med hjälp av kommandona nedan.
pip3 installera opencv-contrib-python == 4.1.0.25
Om du är ny på OpenCV, kolla in våra tidigare OpenCV-självstudier med Raspberry pi:
- Installera OpenCV på Raspberry Pi med CMake
- Ansiktsigenkänning i realtid med Raspberry Pi och OpenCV
- Registrering av registreringsskylt med Raspberry Pi och OpenCV
- Uppskattning av publikstorlek med OpenCV och Raspberry Pi
Vi har också skapat en serie OpenCV-självstudier med början från nybörjarnivån.
Installera andra obligatoriska paket
Innan vi programmerar Raspberry Pi för sömnighetsdetektor, låt oss installera de andra nödvändiga paketen.
Installera dlib: dlib är den moderna verktygssatsen som innehåller maskininlärningsalgoritmer och verktyg för verkliga problem. Använd kommandot nedan för att installera dlib.
pip3 installera dlib
Installera NumPy: NumPy är kärnbiblioteket för vetenskaplig databehandling som innehåller ett kraftfullt n-dimensionellt arrayobjekt, tillhandahåller verktyg för att integrera C, C ++, etc.
pip3 installera numpy
Installera face_recognition-modul: Detta bibliotek används för att känna igen och manipulera ansikten från Python eller kommandoraden. Använd kommandot nedan för att installera biblioteket för ansiktsigenkänning.
Pip3 installera face_recognition
Och till sist, installera eye_game- biblioteket med kommandot nedan:
pip3 installera ögonspel
Programmering av Raspberry Pi
Komplett kod för Driver Dåsighet Detektor med OpenCV ges i slutet av sidan. Här förklarar vi några viktiga delar av koden för bättre förståelse.
Så som vanligt, starta koden med alla nödvändiga bibliotek.
importera face_recognition importera cv2 importera numpy som np importtid importera cv2 importera RPi.GPIO som GPIO import eye_game
Skapa sedan en instans för att få videoflöden från pi-kameran. Om du använder mer än en kamera, ersätt sedan noll med en i cv2.VideoCapture (0) -funktionen.
video_capture = cv2.VideoCapture (0)
Nu i nästa rad anger du filnamnet och sökvägen för filen. I mitt fall finns både koden och filen i samma mapp. Använd sedan ansiktskodningarna för att få ansiktsplatsen i bilden.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Skapa sedan två matriser för att spara ansikten och deras namn. Jag använder bara en bild; du kan lägga till fler bilder och deras sökvägar i koden.
known_face_encodings = kända_ansiktsnamn =
Skapa sedan några variabler för att lagra ansiktsdelarnas platser, ansiktsnamn och kodningar.
face_locations = face_encodings = face_names = process_this_frame = True
Inuti while- funktionen, fånga videoramar från streaming och ändra storlek på bilderna till mindre storlek och konvertera även den tagna bilden till RGB-färg för ansiktsigenkänning.
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 sedan ansiktsigenkänningsprocessen för att jämföra ansikten i videon med bilden. Och få också platserna för ansiktsdelarna.
if 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)
Om det igenkända ansiktet stämmer överens med ansiktet i bilden, ring då ögonglasfunktionen för att spåra ögonrörelserna. Koden spårar upprepade gånger positionen för ögat och ögongloben.
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 (riktning)
Om koden inte upptäcker någon ögonrörelse på 10 sekunder, kommer den att utlösa larmet för att väcka personen.
annat: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Varning !! Drivrutins sömnighet upptäckt ")
Använd sedan OpenCV-funktionerna för att rita en rektangel runt ansiktet och lägga en text på den. Visa även videoramar med funktionen cv2.imshow .
cv2.rectangle (ram, (vänster, överst), (höger, botten), (0, 255, 0), 2) cv2.rectangle (ram, (vänster, botten - 35), (höger, botten), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (ram, namn, (vänster + 6, botten - 6), typsnitt, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', ram) Ställ in tangenten 'S' för att stoppa koden. om cv2.waitKey (1) & 0xFF == ord ('s'): bryta
Testa detekteringssystemet för förarens sömnighet
När koden är klar ansluter du Pi-kameran och summern till Raspberry Pi och kör koden. Efter cirka 10 sekunder visas ett fönster med livestreaming från din Raspberry Pi-kamera. När enheten känner igen ansiktet kommer det att skriva ut ditt namn på ramen och börja spåra ögonrörelsen. Stäng nu ögonen i 7 till 8 sekunder för att testa larmet. När räkningen blir mer än 10 kommer det att utlösa ett larm som varnar dig om situationen.
Så här kan du bygga Dåsighet Detektor med OpenCV och Raspberry Pi. Rulla ner för arbetsvideon och koden.