Miegainības brīdināšanas sistēma: 3 soļi
Miegainības brīdināšanas sistēma: 3 soļi
Anonim
Brīdinājuma sistēma par miegainību
Brīdinājuma sistēma par miegainību

Katru gadu daudzi cilvēki zaudē dzīvību ceļu satiksmes negadījumu dēļ visā pasaulē, un miegaina braukšana ir viens no galvenajiem ceļu satiksmes negadījumu un nāves cēloņiem. Nogurums un miega režīms pie braukšanas vadības ierīcēm bieži vien ir nopietnu negadījumu cēlonis. Tomēr sākotnējās noguruma pazīmes var konstatēt pirms kritiskas situācijas rašanās, un tāpēc vadītāja noguruma noteikšana un tās indikācija ir pētniecības tēma. Lielākā daļa tradicionālo miegainības noteikšanas metožu ir balstītas uz uzvedības aspektiem, bet dažas ir uzmācīgas un var novērst autovadītāju uzmanību, savukārt dažām ir nepieciešami dārgi sensori. Tāpēc šajā rakstā Android lietojumprogrammā ir izstrādāta un ieviesta viegla reāllaika autovadītāja miegainības noteikšanas sistēma. Sistēma ieraksta videoklipus un nosaka vadītāja seju katrā kadrā, izmantojot attēlu apstrādes metodes. Sistēma spēj noteikt sejas orientierus, aprēķina acu malu attiecību (EAR) un acu aizvēršanās koeficientu (ECR), lai noteiktu vadītāja miegainību, pamatojoties uz adaptīvo sliekšņu noteikšanu. Lai pārbaudītu piedāvātās pieejas efektivitāti, ir izmantoti mašīnmācīšanās algoritmi. Empīriskie rezultāti rāda, ka piedāvātais modelis spēj sasniegt 84% precizitāti, izmantojot nejaušu meža klasifikatoru.

1. darbība. Nepieciešamās lietas

1. AUGĻU PI

2. WEBCAM (C270 HD WEB CAM, lai iegūtu labākus rezultātus)

Datora versijai var būt nepieciešamas dažas izmaiņas kodā

2. darbība: Python kods ar acu formas prognozētāja datu kopu (datora versija)

lai reāllaika videoklipā daudz efektīvāk noteiktu acis, mēs varam izmantot šo failu.dat.

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

Lejupielādējiet.dat failu no augšējās saites un palaidiet zemāk esošo python kodu

Python kods

no scipy.spatial importa distancefrom imutils import face_utils importēt imutils importēt dlib importēt cv2

def eye_aspect_ratio (acs):

A = attālums. Eklīdietis (acs [1], acs [5]) B = attālums. Eiklīdietis (acs [2], acs [4]) C = attālums. Eiklīda (acs [0], acs [3]) auss = A + B)

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["kreisā acs"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) karogs = 0, kamēr True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) pelēks = cv2.cvtColor (rāmis, cv2. COLOR_BGR2GRAY) subjekti = atklāt (pelēks, 0) objektam objektos: forma = prognozēt (pelēks, priekšmets) forma = face_utils.shape_to_np (forma) #konvertēšana uz NumPy masīvu leftEye = forma [lStart: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (cv2.convexHull) drawContours (kadrs, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (kadrs, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (kadrs, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (kadrs, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ") else: flag = 0 cv2.imshow (" rāmis ", rāmis) taustiņš = cv2.waitKey (1) & 0xFF if key == ord (" q "): break cv2.destroyAllWindows () cap.stop ()

3. darbība: Raspberry Pi versija

Raspberry Pi versija
Raspberry Pi versija
Raspberry Pi versija
Raspberry Pi versija

kad personas aizver acis, aveņu pi dos jums brīdinājumu

SAVIENOJIET skaņas signālu ar 23. tapu (skatiet attēlu)

no scipy.spatial importa attāluma

importēt RPi. GPIO kā GPIO

no laika importēt miegu

GPIO.setwarnings (nepatiess)

GPIO.setmode (GPIO. BCM)

no imutils importē face_utils

importēt imutils importēt dlib importēt cv2

skaņas signāls = 23

GPIO.setup (skaņas signāls, GPIO. OUT)

def eye_aspect_ratio (acs):

A = attālums. Eklīdietis (acs [1], acs [5]) B = attālums. Eiklīdietis (acs [2], acs [4]) C = attālums. Eiklīda (acs [0], acs [3]) auss = A + B)

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["kreisā acs"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) karogs = 0, kamēr True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) pelēks = cv2.cvtColor (rāmis, cv2. COLOR_BGR2GRAY) subjekti = atklāt (pelēks, 0) objektam objektos: forma = prognozēt (pelēks, priekšmets) forma = face_utils.shape_to_np (forma) #konvertēšana uz NumPy masīvu leftEye = forma [lStart: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (cv2.convexHull) drawContours (kadrs, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (kadrs, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (kadrs, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (kadrs, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO izeja (skaņas signāls, GPIO. HIGH)

cits: karogs = 0

GPIO izvade (skaņas signāls, GPIO. LOW)

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

Ieteicams: