Inhoudsopgave:

Waarschuwingssysteem voor slaperigheid: 3 stappen
Waarschuwingssysteem voor slaperigheid: 3 stappen

Video: Waarschuwingssysteem voor slaperigheid: 3 stappen

Video: Waarschuwingssysteem voor slaperigheid: 3 stappen
Video: Hoe je goede dingen kunt laten gebeuren 2024, Juli-
Anonim
Waarschuwingssysteem voor slaperigheid
Waarschuwingssysteem voor slaperigheid

Elk jaar verliezen veel mensen hun leven als gevolg van dodelijke verkeersongevallen over de hele wereld en slaperig rijden is een van de belangrijkste oorzaken van verkeersongevallen en overlijden. Vermoeidheid en microslaap bij de bedieningselementen zijn vaak de hoofdoorzaak van ernstige ongevallen. De eerste tekenen van vermoeidheid kunnen echter worden gedetecteerd voordat zich een kritieke situatie voordoet en daarom is de detectie van vermoeidheid van de bestuurder en de indicatie daarvan een voortdurend onderzoeksonderwerp. De meeste traditionele methoden om slaperigheid te detecteren zijn gebaseerd op gedragsaspecten, terwijl sommige opdringerig zijn en bestuurders kunnen afleiden, terwijl sommige dure sensoren vereisen. Daarom wordt in dit artikel een lichtgewicht, realtime detectiesysteem voor slaperigheid bij bestuurders ontwikkeld en geïmplementeerd in een Android-applicatie. Het systeem neemt de video's op en detecteert het gezicht van de bestuurder in elk frame door gebruik te maken van beeldverwerkingstechnieken. Het systeem is in staat gezichtsoriëntatiepunten te detecteren en berekent Eye Aspect Ratio (EAR) en Eye Closure Ratio (ECR) om de slaperigheid van de bestuurder te detecteren op basis van adaptieve drempelwaarden. Machine learning-algoritmen zijn gebruikt om de effectiviteit van de voorgestelde aanpak te testen. Empirische resultaten tonen aan dat het voorgestelde model een nauwkeurigheid van 84% kan bereiken met behulp van willekeurige bosclassificatie.

Stap 1: Dingen die je nodig hebt

1. RASPBERRY PI

2. WEBCAM (C270 HD WEBCAM VOOR BETERE RESULTATEN)

De pc-versie heeft mogelijk enkele wijzigingen in de code nodig

Stap 2: Python-code met Eyes Shape Predictor-gegevensset (pc-versie)

om ogen veel effectief te detecteren in een realtime video, kunnen we dit onderstaande.dat-bestand gebruiken.

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

Download het.dat-bestand van de bovenstaande link en voer de onderstaande python-code uit:

Python-code

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

def eye_aspect_ratio(oog):

A = afstand.euclidische(oog[1], oog[5]) B = afstand.euclidische(oog[2], oog[4]) C = afstand.euclidische(oog[0], oog[3]) oor = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() predict = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Dat-bestand is de kern van de code

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS["linkeroog"]

(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, grijs = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) onderwerpen = detecteren (grijs, 0) voor onderwerp in onderwerpen: vorm = voorspellen (grijs, onderwerp) vorm = face_utils.shape_to_np(shape)#converting to NumPy Array leftEye = shape[lStart:lEnd] rightEye = vorm[rStart:rEnd] leftEAR = eye_aspect_ratio(leftEye) rightEAR = eye_aspect_ratio(rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2cv.convex 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(frame, "****************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()

Stap 3: Raspberry Pi-versie

Raspberry Pi-versie
Raspberry Pi-versie
Raspberry Pi-versie
Raspberry Pi-versie

wanneer de persoon zijn / haar ogen sluit, geeft de Raspberry Pi je een waarschuwing

SLUIT je zoemer aan op pin 23 (zie de foto)

van scipy.spatial import afstand

importeer RPi. GPIO als GPIO

van tijd import slaap

GPIO.setwaarschuwingen (False)

GPIO.setmode(GPIO. BCM)

van imutils import face_utils

import imutils import dlib import cv2

zoemer=23

GPIO.setup (zoemer, GPIO. OUT)

def eye_aspect_ratio(oog):

A = afstand.euclidische(oog[1], oog[5]) B = afstand.euclidische(oog[2], oog[4]) C = afstand.euclidische(oog[0], oog[3]) oor = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() predict = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Dat-bestand is de kern van de code

(lStart, lEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS["linkeroog"]

(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, grijs = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) onderwerpen = detecteren (grijs, 0) voor onderwerp in onderwerpen: vorm = voorspellen (grijs, onderwerp) vorm = face_utils.shape_to_np(shape)#converting to NumPy Array leftEye = shape[lStart:lEnd] rightEye = vorm[rStart:rEnd] leftEAR = eye_aspect_ratio(leftEye) rightEAR = eye_aspect_ratio(rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2cv.convex 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(frame, "****************ALERT! *********** *****", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print ("Dro wsy")

GPIO.output (zoemer, GPIO. HIGH)

anders: vlag = 0

GPIO.output (zoemer, GPIO. LOW)

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

Aanbevolen: