Sadržaj:

Sustav upozorenja na pospanost: 3 koraka
Sustav upozorenja na pospanost: 3 koraka

Video: Sustav upozorenja na pospanost: 3 koraka

Video: Sustav upozorenja na pospanost: 3 koraka
Video: Джентльмены удачи (FullHD, комедия, реж. Александр Серый, 1971 г.) 2024, Srpanj
Anonim
Sustav upozorenja o pospanosti
Sustav upozorenja o pospanosti

Svake godine mnogi ljudi izgube živote zbog fatalnih prometnih nesreća diljem svijeta, a pospana vožnja jedan je od primarnih uzroka prometnih nesreća i smrti. Umor i mikro spavanje na upravljačkim kontrolama često su uzrok ozbiljnih nesreća. Međutim, početni znakovi umora mogu se otkriti prije nego što dođe do kritične situacije, pa je otkrivanje umora vozača i njegova indikacija tekuća tema istraživanja. Većina tradicionalnih metoda za otkrivanje pospanosti temelji se na aspektima ponašanja, dok su neke nametljive i mogu omesti vozače, dok neke zahtijevaju skupe senzore. Stoga je u ovom radu lagan sustav za otkrivanje pospanosti vozača u stvarnom vremenu razvijen i implementiran u Android aplikaciju. Sustav snima video zapise i detektira vozačevo lice u svakom kadru primjenom tehnika obrade slike. Sustav je sposoban otkriti orijentire lica, izračunava Eye Aspect Ratio (EAR) i Eye Closure Ratio (ECR) kako bi otkrio vozačevu pospanost na temelju prilagodljivog praga. Za provjeru učinkovitosti predloženog pristupa upotrijebljeni su algoritmi strojnog učenja. Empirijski rezultati pokazuju da predloženi model može postići točnost od 84% pomoću slučajnog klasifikatora šuma.

Korak 1: Stvari koje trebate

1. MALINA PI

2. WEBCAM (C270 HD WEB KAMENA ZA BOLJE REZULTATE)

Verzija računala možda će trebati neke promjene u kodu

Korak 2: Python kod sa skupom podataka predviđanja oblika oblika očiju (verzija za računalo)

za učinkovitije otkrivanje očiju u videozapisu u stvarnom vremenu možemo upotrijebiti ovu sbelow.dat datoteku.

drive.google.com/open?id=1UiSHe72L4TeN14VK…

Preuzmite.dat datoteku s gornje veze i pokrenite donji python kod

Python kod

from scipy.spatial import distancefrom imutils import face_utils import imutils import dlib import cv2

def_odnos_odnosa_oka (oko):

A = udaljenost.euklidsko (oko [1], oko [5]) B = udaljenost.euklidsko (oko [2], oko [4]) C = udaljenost.euklidsko (oko [0], oko [3]) uho = (A + B) / (2.0 * C) povratni prag uha = 0.25 frame_check = 20 detektiraj = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Datoteka je srž koda

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["lijevo_ oko"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) grey = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) subjekti = otkrivanje (sivo, 0) za subjekt u subjektima: shape = predvidjeti (sivo, subjekt) shape = face_utils.shape_to_np (shape) #prebacivanje na NumPy Polje leftEye = oblik [lStart: lEnd] rightEye = oblik [rStart: rEnd] leftEAR = okom_ogled_omjera (lijevo oko) desnoEAR = oko_aspekt_mjer (desno oko) uho = (lijevoEAR + desnoUŠE) / 2.0 lijevoOkoHull = cv2.konveksni Hull (lijevo oko) desnoEyeHull2 cv2 drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (okvir, "**************** Upozorenje! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (okvir, "**************** Upozorenje! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ") else: flag = 0 cv2.imshow (" Frame ", frame) key = cv2.waitKey (1) & 0xFF if key == ord (" q "): break cv2.destroyAllWindows () cap.stop ()

Korak 3: Raspberry Pi verzija

Verzija Raspberry Pi
Verzija Raspberry Pi
Verzija Raspberry Pi
Verzija Raspberry Pi

kad osobe zatvore oči, malina pi će vas upozoriti

PRIKLJUČITE zujalicu na pin 23 (pogledajte sliku)

od scipy.prostorna uvozna udaljenost

uvezite RPi. GPIO kao GPIO

od vremena uvoz sna

GPIO.setwarnings (False)

Način rada GPIO.set (GPIO. BCM)

from imutils uvoz face_utils

import imutils uvoz dlib import cv2

zujalica = 23

GPIO.setup (zujalica, GPIO. OUT)

def_odnos_odnosa_oka (oko):

A = udaljenost.euklidsko (oko [1], oko [5]) B = udaljenost.euklidsko (oko [2], oko [4]) C = udaljenost.euklidsko (oko [0], oko [3]) uho = (A + B) / (2.0 * C) povratni prag uha = 0.25 frame_check = 20 detektiraj = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Datoteka je srž koda

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["lijevo_ oko"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) grey = cv2.cvtBoja (okvir, cv2. COLOR_BGR2GRAY) subjekti = otkrivanje (sivo, 0) za subjekt u subjektima: oblik = predviđanje (sivo, subjekt) oblik = face_utils.shape_to_np (oblik) #prevođenje u NumPy niz lijevo oko = oblik [lStart: lEnd] rightEye = oblik [rStart: rEnd] leftEAR = okom_smjera_omjera (lijevo oko) desnoEAR = oko_aspekt_mjer (desno oko) uho = (lijevoUŠE + desnoUŠE) / 2.0 lijevoOkoHull = cv2.konveksni Hull (lijevo oko) desnoEyeHull2 drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (okvir, "**************** Upozorenje! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (okvir, "**************** Upozorenje! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.izlaz (zujalica, GPIO. HIGH)

else: flag = 0

GPIO.izlaz (zujalica, GPIO. LOW)

cv2.imshow ("Frame", frame) key = cv2.waitKey (1) & 0xFF if key == ord ("q"): break cv2.destroyAllWindows () cap.stop ()

Preporučeni: