Kazalo:

Sistem opozarjanja na zaspanost: 3 koraki
Sistem opozarjanja na zaspanost: 3 koraki

Video: Sistem opozarjanja na zaspanost: 3 koraki

Video: Sistem opozarjanja na zaspanost: 3 koraki
Video: БОЛИ В ПОЯСНИЦЕ И МЕТАБОЛИЧЕСКИЙ СИНДРОМ 3 день 2024, November
Anonim
Sistem opozarjanja na zaspanost
Sistem opozarjanja na zaspanost

Vsako leto veliko ljudi izgubi življenje zaradi prometnih nesreč s smrtnim izidom po vsem svetu, zaspana vožnja pa je eden glavnih vzrokov prometnih nesreč in smrti. Utrujenost in mikro spanje na upravljalni opremi sta pogosto glavni vzrok hudih nesreč. Vendar pa je mogoče prve znake utrujenosti odkriti, preden nastopi kritična situacija, zato je odkrivanje utrujenosti voznika in njeno navajanje stalna raziskovalna tema. Večina tradicionalnih metod odkrivanja zaspanosti temelji na vedenjskih vidikih, nekatere pa so vsiljive in lahko motijo voznike, nekatere pa zahtevajo drage senzorje. Zato je v tem prispevku razvit in lahek sistem za zaznavanje zaspanosti voznika v realnem času, ki se uporablja v aplikaciji Android. Sistem snema video posnetke in zazna voznikov obraz v vsakem kadru z uporabo tehnik obdelave slik. Sistem lahko zazna obrazne mejnike, izračuna razmerje stranic oči (EAR) in razmerje zapiranja oči (ECR), da zazna voznikovo zaspanost na podlagi prilagodljivega praga. Za preverjanje učinkovitosti predlaganega pristopa so bili uporabljeni algoritmi strojnega učenja. Empirični rezultati kažejo, da lahko predlagani model doseže natančnost 84% z uporabo naključnega klasifikatorja gozda.

Korak: Stvari, ki jih potrebujete

1. MALINA PI

2. WEBCAM (Spletna kamera HD C270 za boljše rezultate)

V računalniški različici bodo morda potrebne nekatere spremembe kode

Korak: Koda Python z naborom napovedovalcev oblike oči (različica za računalnik)

za učinkovitejše zaznavanje oči v videoposnetku v realnem času lahko uporabimo to datoteko sbelow.dat.

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

Prenesite datoteko.dat z zgornje povezave in zaženite spodnjo kodo python

Koda Python

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

def eye_aspect_ratio (oko):

A = razdalja.euclidean (oko [1], oko [5]) B = razdalja.euclidean (oko [2], oko [4]) C = razdalja.euklidsko (oko [0], oko [3]) uho = (A + B) / (2,0 * C) vrnitev ušesa = 0,25 frame_check = 20 detektiraj = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Datoteka je bistvo kode

(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 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) grey = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) subjekti = zaznavanje (sivo, 0) za motiv pri subjektih: shape = predvidi (sivo, predmet) shape = face_utils.shape_to_np (shape) #prehod v NumPy Array leftEye = shape [lStart: lEnd] rightEye = oblika [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) uho = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = 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 (okvir, "**************** OPOZORILO! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (okvir, "**************** OPOZORILO! *********** ***** ", (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 ()

3. korak: Različica Raspberry Pi

Različica Raspberry Pi
Različica Raspberry Pi
Različica Raspberry Pi
Različica Raspberry Pi

ko osebe zaprejo oči, vas bo malina pi opozorila

Priključite zvočni signal na pin 23 (glejte sliko)

from scipy.prostorna uvozna razdalja

uvozite RPi. GPIO kot GPIO

od časa uvoza spanja

GPIO.setwarnings (False)

Način GPIO.set (GPIO. BCM)

from imutils uvoz face_utils

import imutils uvoz dlib import cv2

zvočni signal = 23

GPIO.setup (zvočni signal, GPIO. OUT)

def eye_aspect_ratio (oko):

A = razdalja.euclidean (oko [1], oko [5]) B = razdalja.euclidean (oko [2], oko [4]) C = razdalja.euklidsko (oko [0], oko [3]) uho = (A + B) / (2,0 * C) vrnitev ušesa = 0,25 frame_check = 20 detektiraj = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Datoteka je bistvo kode

(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 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) grey = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) subjekti = zaznavanje (sivo, 0) za motiv pri subjektih: shape = predvidi (sivo, predmet) shape = face_utils.shape_to_np (shape) #prehod v NumPy Array leftEye = shape [lStart: lEnd] rightEye = oblika [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) uho = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = 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 (okvir, "**************** OPOZORILO! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (okvir, "**************** OPOZORILO! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

Izhod GPIO. (zvočni signal, GPIO. HIGH)

drugo: zastava = 0

Izhod GPIO. (zvočni signal, GPIO. LOW)

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

Priporočena: