- Potrebne komponente
- Namestitev OpenCV v Raspberry Pi
- Namestitev drugih zahtevanih paketov
- Programiranje Raspberry Pi
- Testiranje sistema za zaznavanje zaspanosti voznika
Vozniki tovornjakov, ki podnevi in ponoči prevažajo tovor in težke materiale na velike razdalje, pogosto trpijo zaradi pomanjkanja spanja. utrujenost in zaspanost sta glavna vzroka večjih nesreč na avtocestah. Avtomobilska industrija dela na nekaterih tehnologijah, ki lahko zaznajo zaspanost in o tem opozorijo voznika.
V tem projektu bomo zgradili sistem zaznavanja in opozarjanja na spanje za gonilnike, ki uporabljajo modul kamere Raspberry Pi, OpenCV in Pi. Osnovni namen tega sistema je sledenje voznikovemu obrazu in premikom oči, če pa se voznik počuti zaspan, bo sistem sprožil opozorilno sporočilo. To je razširitev naše prejšnje aplikacije za zaznavanje mejnikov obraza in prepoznavanje obrazov.
Potrebne komponente
Komponente strojne opreme
- Raspberry Pi 3
- Modul kamere Pi
- Kabel Micro USB
- Zvočni signal
Programska oprema in spletne storitve
- OpenCV
- Dlib
- Python3
Pred nadaljevanjem projekta za zaznavanje voznika zaspanost , najprej moramo namestiti OpenCV, imutils, dLib, Numpy, in nekatere druge odvisnosti v tem projektu. OpenCV se tu uporablja za digitalno obdelavo slik. Najpogostejši programi digitalne obdelave slik so zaznavanje predmetov, prepoznavanje obrazov in števec ljudi.
Tu uporabljamo samo Raspberry Pi, Pi Camera in brenčalo za izdelavo tega sistema za zaznavanje spanja.
Namestitev OpenCV v Raspberry Pi
Pred namestitvijo OpenCV in drugih odvisnosti je treba Raspberry Pi v celoti posodobiti. Za posodobitev Raspberry Pi na najnovejšo različico uporabite spodnje ukaze:
posodobitev sudo apt-get
Nato z naslednjimi ukazi namestite potrebne odvisnosti za namestitev OpenCV 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 koncu namestite OpenCV na Raspberry Pi z uporabo spodnjih ukazov.
pip3 namestite opencv-contrib-python == 4.1.0.25
Če ste novi v OpenCV, si oglejte prejšnje vadnice OpenCV z Raspberry pi:
- Namestitev OpenCV na Raspberry Pi s pomočjo CMake
- Spoznavanje obrazov v realnem času z Raspberry Pi in OpenCV
- Prepoznavanje registrske tablice z uporabo Raspberry Pi in OpenCV
- Ocena množice z uporabo OpenCV in Raspberry Pi
Ustvarili smo tudi vrsto vadnic OpenCV, ki se začnejo od začetnika.
Namestitev drugih zahtevanih paketov
Pred programiranjem Raspberry Pi za detektor zaspanosti namestimo še druge potrebne pakete.
Namestitev dlib: dlib je sodoben komplet orodij, ki vsebuje algoritme strojnega učenja in orodja za resnične težave. S spodnjim ukazom namestite dlib.
pip3 namestite dlib
Namestitev NumPy: NumPy je jedrna knjižnica za znanstveno računalništvo, ki vsebuje zmogljiv objekt n-dimenzionalne matrike, ponuja orodja za integracijo C, C ++ itd.
pip3 namestite numpy
Nameščanje modula face_recognition: Ta knjižnica se uporablja za prepoznavanje in upravljanje obrazov iz Pythona ali ukazne vrstice. Uporabite spodnji ukaz za namestitev knjižnice za prepoznavanje obrazov.
Pip3 namesti face_recognition
In na koncu namestite knjižnico eye_game z uporabo spodnjega ukaza:
pip3 namesti igro z očmi
Programiranje Raspberry Pi
Popolna koda za detektor zaspanosti gonilnikov z uporabo OpenCV je podana na koncu strani. Tu razlagamo nekatere pomembne dele kode za boljše razumevanje.
Kot običajno, zaženite kodo tako, da vključite vse potrebne knjižnice.
uvoz face_recognition uvoz cv2 uvoz numpy kot np čas uvoza uvoz cv2 uvoz RPi.GPIO kot GPIO uvoz eye_game
Po tem ustvarite primerek za pridobitev video vira iz pi kamere. Če uporabljate več kamer, zamenjajte ničlo s funkcijo cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Zdaj v naslednje vrstice vnesite ime datoteke in pot datoteke. V mojem primeru sta koda in datoteka v isti mapi. Nato uporabite kodiranje obrazov, da dobite lokacijo obraza na sliki.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Nato ustvarite dve nizi, da shranite obraze in njihova imena. Uporabljam samo eno sliko; v kodo lahko dodate več slik in njihovih poti.
known_face_encodings = known_face_names =
Nato ustvarite nekaj spremenljivk za shranjevanje lokacij delov obrazov, imen obrazov in kodiranj.
face_locations = face_encodings = face_names = process_this_frame = True
Znotraj funkcije while zajemite video posnetke iz pretočnega predvajanja in prilagodite velikost okvirjev na manjšo velikost ter zajeti okvir pretvorite v RGB barvo za prepoznavanje obrazov.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Po tem zaženite postopek prepoznavanja obrazov, da primerjate obraze v videoposnetku s sliko. Pridobite tudi lokacije delov obraza.
če 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, small_frame)
Če se prepoznani obraz ujema z obrazom na sliki, pokličite funkcijo očesne igre za sledenje gibom oči. Koda bo večkrat sledila položaju očesa in zrkla.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) če se ujema: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Če koda 10 sekund ne zazna nobenega gibanja oči, sproži alarm, da osebo zbudi.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Opozorilo !! Zaznana zaspanost voznika ")
Nato s funkcijami OpenCV narišite pravokotnik okoli obraza in nanj položite besedilo. Pokažite tudi video okvirje s funkcijo cv2.imshow .
cv2.rectangle (okvir, (levo, zgoraj), (desno, spodaj), (0, 255, 0), 2) cv2.rectangle (okvir, (levo, spodaj - 35), (desno, spodaj), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (okvir, ime, (levo + 6, spodaj - 6), pisava, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', okvir) Za zaustavitev kode nastavite tipko 'S'. če je cv2.waitKey (1) & 0xFF == ord ('s'): odmor
Testiranje sistema za zaznavanje zaspanosti voznika
Ko je koda pripravljena, priključite kamero Pi in zvočni signal na Raspberry Pi in zaženite kodo. Po približno 10 sekundah se prikaže okno s pretakanjem v živo s fotoaparata Raspberry Pi. Ko naprava prepozna obraz, bo na okvir natisnila vaše ime in začela slediti gibanju oči. Zdaj zaprite oči za 7 do 8 sekund, da preizkusite alarm. Ko štetje postane več kot 10, sproži alarm, ki vas opozori na situacijo.
Tako lahko ustvarite detektor zaspanosti z uporabo OpenCV in Raspberry Pi. Pomaknite se navzdol za delujoči video in kodo.