Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-23 14:41
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
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:
DIY Raspberry Pi Downloadbox: 4 vaihetta
DIY Raspberry Pi Downloadbox: Löydätkö usein itsesi lataamasta suuria tiedostoja, kuten elokuvia, torrentteja, kursseja, TV -sarjoja jne., Niin tulet oikeaan paikkaan. Tässä Instructable -ohjelmassa muuttaisimme Raspberry Pi zero -laitteemme latauskoneeksi. Joka voi ladata minkä tahansa
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
4 vaihetta akun sisäisen vastuksen mittaamiseksi: 4 vaihetta
4 vaihetta akun sisäisen vastuksen mittaamiseksi: Tässä on 4 yksinkertaista vaihetta, joiden avulla voit mitata taikinan sisäisen vastuksen