- Komponente potrebne
- Instaliranje OpenCV-a u Raspberry Pi
- Instaliranje ostalih potrebnih paketa
- Programiranje Raspberry Pi
- Testiranje sustava za otkrivanje pospanosti vozača
Vozači kamiona koji danju i noću prevoze teret i teške materijale na velike udaljenosti, često pate od nedostatka sna. umor i pospanost neki su od vodećih uzroka velikih nesreća na autocestama. Automobilska industrija radi na nekim tehnologijama koje mogu otkriti pospanost i upozoriti vozača na to.
U ovom ćemo projektu izgraditi sustav za prepoznavanje i upozorenje za spavanje za upravljačke programe koji koriste Raspberry Pi, OpenCV i Pi modul kamere. Osnovna svrha ovog sustava je pratiti stanje lica i pokrete očiju vozača, a ako se vozač osjeća pospano, sustav će pokrenuti poruku upozorenja. Ovo je proširenje naše prethodne aplikacije za prepoznavanje orijentira na licu i prepoznavanje lica.
Komponente potrebne
Hardverske komponente
- Raspberry Pi 3
- Modul kamere Pi
- Mikro USB kabel
- Zujalica
Softver i internetske usluge
- OpenCV
- Dlib
- Python3
Prije nastavka ovog projekta otkrivanja pospanosti vozača , prvo moramo instalirati OpenCV, imutils, dlib, Numpy i neke druge ovisnosti u ovaj projekt. OpenCV se ovdje koristi za digitalnu obradu slike. Najčešća primjena digitalne obrade slike su otkrivanje predmeta, prepoznavanje lica i brojač ljudi.
Ovdje koristimo samo Raspberry Pi, Pi kameru i zujalicu za izgradnju ovog sustava za otkrivanje spavanja.

Instaliranje OpenCV-a u Raspberry Pi
Prije instaliranja OpenCV-a i ostalih ovisnosti, Raspberry Pi mora se u potpunosti ažurirati. Upotrijebite naredbe u nastavku da biste ažurirali Raspberry Pi na najnoviju verziju:
sudo apt-get ažuriranje
Zatim upotrijebite sljedeće naredbe za instaliranje potrebnih ovisnosti za instaliranje OpenCV-a na vaš 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 kraju, instalirajte OpenCV na Raspberry Pi pomoću naredbi u nastavku.
pip3 instalirati opencv-contrib-python == 4.1.0.25
Ako ste novi u OpenCV-u, provjerite naše prethodne vodiče za OpenCV s Raspberry pi:
- Instaliranje OpenCV-a na Raspberry Pi pomoću CMake-a
- Prepoznavanje lica u stvarnom vremenu s Raspberry Pi i OpenCV
- Prepoznavanje registarske pločice pomoću Raspberry Pi i OpenCV
- Procjena veličine gužve pomoću OpenCV-a i Raspberry Pi-a
Također smo stvorili niz vodiča za OpenCV počevši od početničke razine.
Instaliranje ostalih potrebnih paketa
Prije programiranja Raspberry Pi za detektor pospanosti, instalirajmo ostale potrebne pakete.
Instaliranje dlib: dlib je moderni alat koji sadrži algoritme za strojno učenje i alate za stvarne probleme. Upotrijebite donju naredbu za instaliranje dliba.
pip3 instaliraj dlib
Instaliranje NumPy: NumPy je temeljna knjižnica za znanstveno računanje koja sadrži snažni objekt n-dimenzionalnog niza, pruža alate za integraciju C, C ++, itd.
pip3 instaliraj numpy
Instaliranje modula face_recognition: Ova se knjižnica koristi za prepoznavanje i manipulaciju licima iz Pythona ili naredbenog retka. Upotrijebite donju naredbu za instaliranje biblioteke za prepoznavanje lica.
Pip3 instaliraj prepoznavanje lica
I u posljednjem, instalirajte knjižnicu eye_game pomoću naredbe u nastavku:
pip3 instaliraj eye-game
Programiranje Raspberry Pi
Kompletni kod za detektor pospanosti vozača koji koristi OpenCV dan je na kraju stranice. Ovdje objašnjavamo neke važne dijelove koda za bolje razumijevanje.
Dakle, kao i obično, započnite kod uključivanjem svih potrebnih knjižnica.
import face_recognition import cv2 import numpy as np vrijeme uvoza import cv2 import RPi.GPIO kao GPIO import eye_game
Nakon toga stvorite instancu za dobivanje video feeda s pi kamere. Ako upotrebljavate više kamera, zamijenite nulu s jednom u funkciji cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Sada u sljedeće redove unesite naziv datoteke i put do datoteke. U mom slučaju i kod i datoteka nalaze se u istoj mapi. Zatim upotrijebite kodiranje lica da biste dobili lokaciju lica na slici.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Nakon toga stvorite dva niza za spremanje lica i njihovih imena. Koristim samo jednu sliku; u kôd možete dodati više slika i njihovih putova.
poznati_pozivni_kodiranja = poznata_pozivna_imena =
Zatim stvorite neke varijable za pohranu mjesta dijelova lica, imena lica i kodiranja.
face_locations = face_encodings = face_names = process_this_frame = True
Unutar funkcije while , snimite video okvire iz streaminga i promijenite veličinu okvira u manju veličinu, a također pretvorite snimljeni kadar u RGB boju za prepoznavanje lica.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Nakon toga pokrenite postupak prepoznavanja lica kako biste usporedili lica u videozapisu sa slikom. Također dobiti lokacije dijelova lica.
ako 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 (datoteka, mali_okvir)
Ako se prepoznato lice podudara s licem na slici, nazovite funkciju očne igre za praćenje pokreta oka. Kod će više puta pratiti položaj oka i očne jabučice.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) ako se podudara: name = known_face_names direction = eye_game.get_eyeball_direction (datoteka) print (direction)
Ako kôd ne prepozna nijedno kretanje oka tijekom 10 sekundi, tada će aktivirati alarm da probudi osobu.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Upozorenje !! Otkrivena pospanost vozača ")
Zatim pomoću OpenCV funkcija nacrtajte pravokutnik oko lica i na njega stavite tekst. Također, prikažite video okvire pomoću funkcije cv2.imshow .
cv2.rectangle (okvir, (lijevo, gore), (desno, dolje), (0, 255, 0), 2) cv2.rectangle (okvir, (lijevo, dolje - 35), (desno, dolje), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (okvir, ime, (lijevo + 6, dno - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', kadar) Postavite tipku 'S' da zaustavite kôd. ako je cv2.waitKey (1) & 0xFF == ord ('s'): prekid
Testiranje sustava za otkrivanje pospanosti vozača
Nakon što je kod spreman, spojite Pi kameru i zujalo na Raspberry Pi i pokrenite kôd. Nakon otprilike 10 sekundi pojavit će se prozor s streamingom uživo s vašeg Raspberry Pi fotoaparata. Kad uređaj prepozna lice, ispisat će vaše ime na okvir i započeti praćenje pokreta očiju. Sada zatvorite oči na 7 do 8 sekundi kako biste testirali alarm. Kad brojanje postane veće od 10, pokrenut će alarm, upozoravajući vas na situaciju.

Na ovaj način možete napraviti detektor pospanosti pomoću OpenCV-a i Raspberry Pi-a. Pomaknite se prema dolje za radni video i kôd.
