Obsah:

Systém upozornění na ospalost: 3 kroky
Systém upozornění na ospalost: 3 kroky

Video: Systém upozornění na ospalost: 3 kroky

Video: Systém upozornění na ospalost: 3 kroky
Video: Dýchání podle Wim Hof Method - 3 kola (Breathing Mantra) #wimhofmetoda #wimhofbreathing #dech 2024, Červenec
Anonim
Systém upozornění na ospalost
Systém upozornění na ospalost

Každý rok mnoho lidí přijde o život v důsledku smrtelných dopravních nehod na celém světě a ospalá jízda je jednou z hlavních příčin dopravních nehod a úmrtí. Únava a mikrospánek při řízení jsou často hlavní příčinou vážných nehod. Počáteční známky únavy lze však zjistit ještě před vznikem kritické situace, a proto je detekce únavy řidiče a její indikace pokračujícím tématem výzkumu. Většina tradičních metod detekce ospalosti je založena na behaviorálních aspektech, zatímco některé jsou rušivé a mohou rušit řidiče, zatímco některé vyžadují drahé senzory. V tomto příspěvku je proto vyvinut a implementován lehký systém detekce ospalosti řidiče v reálném čase v aplikaci pro Android. Systém zaznamenává videa a detekuje tvář řidiče v každém snímku pomocí technik zpracování obrazu. Systém je schopen detekovat orientační body obličeje, vypočítat poměr stran (EAR) a poměr zavření očí (ECR) k detekci ospalosti řidiče na základě adaptivního prahování. K testování účinnosti navrhovaného přístupu byly použity algoritmy strojového učení. Empirické výsledky ukazují, že navrhovaný model je schopen dosáhnout přesnosti 84% pomocí náhodného klasifikátoru lesa.

Krok 1: Věci, které potřebujete

1. Raspberry PI

2. WEBCAM (WEBOVÁ CAMERA C270 HD PRO LEPŠÍ VÝSLEDKY)

Verze pro PC může vyžadovat nějaké změny v kódu

Krok 2: Python Code With Eyes Shape Predictor Dataset (PC verze)

abychom mohli efektivně detekovat oči ve videu v reálném čase, můžeme použít tento sbelow.dat soubor.

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

Stáhněte si soubor.dat z výše uvedeného odkazu a spusťte níže uvedený kód pythonu

Python kód

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

def eye_aspect_ratio (oko):

A = vzdálenost.euclidean (oko [1], oko [5]) B = vzdálenost.euclidean (oko [2], oko [4]) C = vzdálenost.euclidean (oko [0], oko [3]) ucho = (A + B) / (2,0 * C) návrat ucha mlátit = 0,25 kontrola rámce = 20 detekovat = dlib.get_frontal_face_detector () předpovědět = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Datový soubor je jádrem kódu

(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 (rámeček, cv2. COLOR_BGR2GRAY) předměty = detekce (šedá, 0) pro předmět v předmětech: tvar = předpovídat (šedá, předmět) tvar = face_utils.shape_to_np (tvar)#převod na NumPy Array leftEye = tvar [lStart: lEnd] rightEye = tvar [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ucho = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ucho = frame_check: cv2.putText (rámeček, „**************** ALERT! ***************“, (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (rámeček, "**************** 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 ()

Krok 3: Verze Raspberry Pi

Verze Raspberry Pi
Verze Raspberry Pi
Verze Raspberry Pi
Verze Raspberry Pi

když osoby zavřou oči, pak vám malinový pi dá výstrahu

PŘIPOJTE bzučák ke kolíku 23 (viz obrázek)

ze scipy.prostorové vzdálenosti importu

importujte RPi. GPIO jako GPIO

z časového importu spánku

GPIO.setwarnings (False)

GPIO.setmode (GPIO. BCM)

z imutils import face_utils

import imutils import dlib import cv2

bzučák = 23

GPIO.setup (bzučák, GPIO. OUT)

def eye_aspect_ratio (oko):

A = vzdálenost.euclidean (oko [1], oko [5]) B = vzdálenost.euclidean (oko [2], oko [4]) C = vzdálenost.euclidean (oko [0], oko [3]) ucho = (A + B) / (2,0 * C) návrat ucho mlátit = 0,25 kontrola rámce = 20 detekovat = dlib.get_frontal_face_detector () předpovědět = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Datový soubor je jádrem kódu

(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 (rámeček, cv2. COLOR_BGR2GRAY) předměty = detekce (šedá, 0) pro předmět v předmětech: tvar = předpovídat (šedá, předmět) tvar = face_utils.shape_to_np (tvar)#převod na NumPy Array leftEye = tvar [lStart: lEnd] rightEye = tvar [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ucho = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull drawContours (frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) if ucho = frame_check: cv2.putText (rámeček, „**************** ALERT! ***************“, (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (rámeček, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.output (bzučák, GPIO. HIGH)

else: flag = 0

GPIO.output (bzučák, GPIO. LOW)

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

Doporučuje: