Sadržaj:

Sistem upozorenja o pospanosti: 3 koraka
Sistem upozorenja o pospanosti: 3 koraka

Video: Sistem upozorenja o pospanosti: 3 koraka

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

Svake godine mnogi ljudi izgube živote zbog fatalnih saobraćajnih nesreća širom svijeta, a pospana vožnja jedan je od primarnih uzroka saobraćajnih nesreća i smrti. Umor i mikro san u kontrolama vožnje često su osnovni 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 stalna tema istraživanja. Većina tradicionalnih metoda za otkrivanje pospanosti zasnovana je na aspektima ponašanja, dok su neke nametljive i mogu ometati vozače, dok neke zahtijevaju skupe senzore. Stoga je u ovom radu lagan sistem za otkrivanje pospanosti vozača u stvarnom vremenu razvijen i implementiran u Android aplikaciju. Sistem snima video zapise i detektuje vozačevo lice u svakom kadru koristeći tehnike obrade slika. Sistem je sposoban otkriti orijentire lica, izračunava Eye Aspect Ratio (EAR) i Eye Closure Ratio (ECR) kako bi otkrio vozačevu pospanost na osnovu prilagodljivog praga. Algoritmi strojnog učenja korišteni su za provjeru učinkovitosti predloženog pristupa. 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)

PC verziji će možda trebati neke promjene u kodu

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

za učinkovitije otkrivanje očiju u videu u stvarnom vremenu, možemo koristiti ovu sbelow.dat datoteku.

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

Preuzmite.dat datoteku sa 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 eye_aspect_ratio (oko):

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

(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 dok je 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_aspekt_omjera (lijevo oko) desnoEAR = oko_aspekt_mjer (desno oko) uho = (lijevoEAR + desnoEAR) / 2.0 lijevoOkoHull = cv2.convexHull (lijevo oko) desnoEyeHull2 cv2. Vuk2 drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [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 (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

Raspberry Pi verzija
Raspberry Pi verzija
Raspberry Pi verzija
Raspberry Pi verzija

kada osoba zatvori oči, malina pi će vas upozoriti

PRIKLJUČITE zujalicu na pin 23 (pogledajte sliku)

from scipy.spatial import distance

uvezite RPi. GPIO kao GPIO

od vremena uvoza sleep

GPIO.setwarnings (False)

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

from imutils import face_utils

import imutils uvoz dlib import cv2

zujalica = 23

GPIO.setup (zujalica, GPIO. OUT)

def eye_aspect_ratio (oko):

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

(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 dok je 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_aspekt_omjera (lijevo oko) desnoEAR = oko_aspekt_mjer (desno oko) uho = (lijevoEAR + desnoUŠE) / 2.0 lijevoOkoHull = cv2.convexHull (lijevo oko) desnoEyeHull2 cv2Vok2 drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [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 (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čuje se: