Innholdsfortegnelse:

Døsighetsvarslingssystem: 3 trinn
Døsighetsvarslingssystem: 3 trinn

Video: Døsighetsvarslingssystem: 3 trinn

Video: Døsighetsvarslingssystem: 3 trinn
Video: Секрет опытных мастеров! Как легко состыковать материал, если в углу стоит круглая труба? #shorts 2024, November
Anonim
Døsighetsvarslingssystem
Døsighetsvarslingssystem

Hvert år mister mange mennesker livet på grunn av dødelige trafikkulykker rundt om i verden, og døsig kjøring er en av hovedårsakene til trafikkulykker og dødsfall. Tretthet og mikrosøvn ved kjørekontrollene er ofte hovedårsaken til alvorlige ulykker. Imidlertid kan de første tegnene på tretthet oppdages før en kritisk situasjon oppstår, og derfor er detektering av førerens tretthet og indikasjon på det fortsatt et forskningsemne. De fleste tradisjonelle metodene for å oppdage døsighet er basert på atferdsaspekter, mens noen er påtrengende og kan distrahere sjåfører, mens noen krever dyre sensorer. Derfor, i denne artikkelen, er det utviklet og implementert et lett, sanntidssøkingssystem for førers døsighet i systemet. Systemet registrerer videoene og oppdager førerens ansikt i hver ramme ved å bruke bildebehandlingsteknikker. Systemet er i stand til å oppdage ansiktsmerker, beregner Eye Aspect Ratio (EAR) og Eye Closure Ratio (ECR) for å oppdage førers døsighet basert på adaptiv terskel. Maskinlæringsalgoritmer har blitt brukt for å teste effekten av den foreslåtte tilnærmingen. Empiriske resultater viser at den foreslåtte modellen er i stand til å oppnå nøyaktighet på 84% ved bruk av tilfeldig skogsklassifiseringsenhet.

Trinn 1: Ting du trenger

1. RASPBERRY PI

2. WEBCAM (C270 HD WEBKAM FOR BEDRE RESULTATER)

PC -versjonen kan trenge noen endringer i koden

Trinn 2: Python -kode med datasett for prediktor for øyne (PC -versjon)

For å oppdage øyne mye effektivt i en sanntidsvideo, kan vi bruke denne.dat -filen.

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

Last ned.dat -filen fra lenken ovenfor og kjør python -koden nedenfor

Python -kode

fra scipy.spatial importavstand fra imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (øye):

A = distanse.euclidean (øye [1], øye [5]) B = distanse.euclidean (øye [2], øye [4]) C = avstand.euclidean (øye [0], øye [3]) øre = (A + B) / (2,0 * C) øre -treske tilbake = 0,25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Dat -filen er kjernen i koden

(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 mens True: ret, frame = cap.read () frame = imutils.resize (ramme, bredde = 450) grå = cv2.cvtColor (ramme, cv2. COLOR_BGR2GRAY) emner = detekter (grå, 0) for motiv i emner: form = forutsi (grå, emne) form = ansikt_utiler.form_til_np (form) #konvertering til NumPy Array leftEye = form [lStart: lEnd] rightEye = shape [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convex drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (ramme, "**************** ALERT! *****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (ramme, "**************** VARSEL! *********** ***** ", (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 ()

Trinn 3: Raspberry Pi -versjon

Raspberry Pi -versjon
Raspberry Pi -versjon
Raspberry Pi -versjon
Raspberry Pi -versjon

når personene lukker øynene, vil bringebærpi gi deg varsel

KOBLE summeren til pin 23 (se bildet)

fra scipy.spatial importavstand

importer RPi. GPIO som GPIO

fra tid av importer søvn

GPIO.setwarnings (False)

GPIO.setmode (GPIO. BCM)

fra imutils import face_utils

import imutils import dlib import cv2

summer = 23

GPIO.setup (summer, GPIO. OUT)

def eye_aspect_ratio (øye):

A = distanse.euclidean (øye [1], øye [5]) B = distanse.euclidean (øye [2], øye [4]) C = avstand.euclidean (øye [0], øye [3]) øre = (A + B) / (2,0 * C) øre -treske tilbake = 0,25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Dat -filen er kjernen i koden

(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 mens True: ret, frame = cap.read () frame = imutils.resize (ramme, bredde = 450) grå = cv2.cvtColor (ramme, cv2. COLOR_BGR2GRAY) emner = detekter (grå, 0) for motiv i emner: form = forutsi (grå, emne) form = ansikt_utiler.form_til_np (form) #konvertering til NumPy Array leftEye = form [lStart: lEnd] rightEye = shape [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convex drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (ramme, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (ramme, "**************** VARSEL! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.output (summer, GPIO. HIGH)

annet: flagg = 0

GPIO.output (summer, GPIO. LOW)

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

Anbefalt: