Sisällysluettelo:

Uneliaisuushälytysjärjestelmä: 3 vaihetta
Uneliaisuushälytysjärjestelmä: 3 vaihetta

Video: Uneliaisuushälytysjärjestelmä: 3 vaihetta

Video: Uneliaisuushälytysjärjestelmä: 3 vaihetta
Video: Jännitteiset käyttöönottomittaukset 2024, Heinäkuu
Anonim
Uneliaisuushälytysjärjestelmä
Uneliaisuushälytysjärjestelmä

Joka vuosi monet ihmiset menettävät henkensä kuolemaan johtaneiden liikenneonnettomuuksien vuoksi ympäri maailmaa, ja uninen ajaminen on yksi tärkeimmistä liikenneonnettomuuksien ja kuolemien syistä. Väsymys ja mikrounet ajo -ohjaimissa ovat usein vakavien onnettomuuksien perimmäinen syy. Ensimmäiset väsymyksen merkit voidaan kuitenkin havaita ennen kriittisen tilanteen syntymistä, ja siksi kuljettajan väsymyksen havaitseminen ja sen osoittaminen on jatkuva tutkimusaihe. Suurin osa perinteisistä uneliaisuuden havaitsemismenetelmistä perustuu käyttäytymiseen liittyviin näkökohtiin, kun taas jotkut ovat häiritseviä ja voivat häiritä kuljettajia, kun taas jotkut vaativat kalliita antureita. Siksi tässä artikkelissa kehitetään ja toteutetaan kevyt, reaaliaikainen kuljettajan uneliaisuuden havaitsemisjärjestelmä Android-sovellukseen. Järjestelmä tallentaa videot ja tunnistaa kuljettajan kasvot jokaisessa kehyksessä käyttämällä kuvankäsittelytekniikoita. Järjestelmä pystyy havaitsemaan kasvojen maamerkit, laskee EAR (Eye Aspect Ratio) - ja Eye Closure Ratio (ECR) -tunnistukset kuljettajan uneliaisuuden havaitsemiseksi mukautuvan kynnyksen perusteella. Ehdotetun lähestymistavan tehokkuutta on testattu koneoppimisalgoritmeilla. Empiiriset tulokset osoittavat, että ehdotettu malli pystyy saavuttamaan 84%: n tarkkuuden satunnaisen metsäluokituksen avulla.

Vaihe 1: Tarvitsemasi asiat

1. RASPBERRY PI

2. WEBCAM (C270 HD WEB CAM PAREMPI TULOKSET)

PC -versio saattaa tarvita joitain muutoksia koodiin

Vaihe 2: Python -koodi silmien muotoisen ennakoivan tietojoukon avulla (PC -versio)

havaitaksesi silmät paljon tehokkaammin reaaliaikaisessa videossa, voimme käyttää tätä sbelow.dat -tiedostoa.

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

Lataa.dat -tiedosto yllä olevasta linkistä ja suorita alla oleva python -koodi

Python -koodi

alkaen scipy.spatial tuontietäisyys imutilsista tuonti face_utils tuonti imutils tuonti dlib tuonti cv2

def eye_aspect_ratio (silmä):

A = etäisyys. Euklidinen (silmä [1], silmä [5]) B = etäisyys. Euklidinen (silmä [2], silmä [4]) C = etäisyys. Euklidinen (silmä [0], silmä [3]) korva = A + B)

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

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 kun True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) harmaa = cv2.cvtColor (kehys, cv2. COLOR_BGR2GRAY) kohteet = havaitse (harmaa, 0) kohteelle: muoto = ennusta (harmaa, kohde) muoto = kasvot_muodot.muoto_to_np (muoto) #muunnos NumPy -matriisiksi leftEye = muoto [lStart: lEnd] rightEye = muoto [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) korva = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (cv2.convexHull) drawContours (kehys, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (kehys, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (frame, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ALERT! *********** ***** ", (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 ()

Vaihe 3: Raspberry Pi -versio

Raspberry Pi versio
Raspberry Pi versio
Raspberry Pi versio
Raspberry Pi versio

kun ihmiset sulkevat silmänsä, vadelma pi antaa hälytyksen

KYTKE summeri nastaan 23 (katso kuva)

scipy.spatial tuontietäisyydeltä

Tuo RPi. GPIO GPIO: ksi

tuontihetkestä

GPIO.setwarnings (Väärä)

GPIO.setmode (GPIO. BCM)

imutilsista tuo face_utils

tuonti imutils tuonti dlib tuonti cv2

summeri = 23

GPIO.setup (summeri, GPIO. OUT)

def eye_aspect_ratio (silmä):

A = etäisyys. Euklidinen (silmä [1], silmä [5]) B = etäisyys. Euklidinen (silmä [2], silmä [4]) C = etäisyys. Euklidinen (silmä [0], silmä [3]) korva = A + B)

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

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 kun True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) harmaa = cv2.cvtColor (kehys, cv2. COLOR_BGR2GRAY) kohteet = havaitse (harmaa, 0) kohteelle: muoto = ennusta (harmaa, kohde) muoto = kasvot_muodot.muoto_to_np (muoto) #muunnos NumPy -matriisiksi leftEye = muoto [lStart: lEnd] rightEye = muoto [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) korva = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (cv2.convexHull) drawContours (kehys, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (kehys, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (frame, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO -lähtö (summeri, GPIO. HIGH)

muu: lippu = 0

GPIO. -lähtö (summeri, GPIO. LOW)

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

Suositeltava: