Sommario:

Sistema di allerta sonnolenza: 3 passaggi
Sistema di allerta sonnolenza: 3 passaggi

Video: Sistema di allerta sonnolenza: 3 passaggi

Video: Sistema di allerta sonnolenza: 3 passaggi
Video: Sistema antifurto, tutto (o quasi) quello che devi sapere (1D3) 2024, Dicembre
Anonim
Sistema di allerta sonnolenza
Sistema di allerta sonnolenza

Ogni anno molte persone perdono la vita a causa di incidenti stradali mortali in tutto il mondo e la sonnolenza alla guida è una delle principali cause di incidenti stradali e morte. La fatica e il microsonno ai comandi di guida sono spesso la causa principale di incidenti gravi. Tuttavia, i primi segni di affaticamento possono essere rilevati prima che si presenti una situazione critica e, pertanto, il rilevamento dell'affaticamento del conducente e la sua indicazione è argomento di ricerca in corso. La maggior parte dei metodi tradizionali per rilevare la sonnolenza si basa su aspetti comportamentali, mentre alcuni sono invadenti e possono distrarre i conducenti, mentre altri richiedono sensori costosi. Pertanto, in questo documento, viene sviluppato e implementato su un'applicazione Android un sistema di rilevamento della sonnolenza del conducente leggero e in tempo reale. Il sistema registra i video e rileva il volto del conducente in ogni fotogramma utilizzando tecniche di elaborazione delle immagini. Il sistema è in grado di rilevare i punti di riferimento del viso, calcola l'Eye Aspect Ratio (EAR) e l'Eye Closure Ratio (ECR) per rilevare la sonnolenza del conducente in base alla soglia adattiva. Sono stati impiegati algoritmi di apprendimento automatico per testare l'efficacia dell'approccio proposto. I risultati empirici dimostrano che il modello proposto è in grado di raggiungere una precisione dell'84% utilizzando un classificatore forestale casuale.

Passaggio 1: cose di cui hai bisogno

1. LAMPONE PI

2. WEBCAM (WEB CAM C270 HD PER RISULTATI MIGLIORI)

La versione per PC potrebbe richiedere alcune modifiche al codice

Passaggio 2: codice Python con set di dati predittore della forma degli occhi (versione PC)

per rilevare gli occhi in modo molto efficace in un video in tempo reale, possiamo usare questo file.dat sotto.

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

Scarica il file.dat dal link sopra ed esegui il codice Python sottostante

Codice Python

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

def eye_aspect_ratio(occhio):

A = distanza.euclidea(occhio[1], occhio[5]) B = distanza.euclidea(occhio[2], occhio[4]) C = distanza.euclidea(occhio[0], occhio[3]) orecchio = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() forecast = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Il file Dat è il punto cruciale del codice

(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 mentre True: ret, frame=cap.read() frame = imutils.resize(frame, grigio = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) soggetti = rileva (grigio, 0) per il soggetto in soggetti: forma = prevedi (grigio, soggetto) forma = face_utils.shape_to_np(shape)#conversione in NumPy Array leftEye = shape[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.convexHull(rightEye) 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, "****************AVVISO!*********** *****", (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()

Passaggio 3: versione Raspberry Pi

Versione Raspberry Pi
Versione Raspberry Pi
Versione Raspberry Pi
Versione Raspberry Pi

quando le persone chiudono gli occhi allora il lampone pi ti darà l'avviso

CONNETTI il tuo cicalino al pin 23 (vedi foto)

da scipy.spatial import distance

importa RPi. GPIO come GPIO

dal tempo importa il sonno

GPIO.setwarnings(Falso)

GPIO.setmode(GPIO. BCM)

da imutils import face_utils

import imutils import dlib import cv2

cicalino=23

GPIO.setup (cicalino, GPIO. OUT)

def eye_aspect_ratio(eye):

A = distanza.euclidea(occhio[1], occhio[5]) B = distanza.euclidea(occhio[2], occhio[4]) C = distanza.euclidea(occhio[0], occhio[3]) orecchio = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector() forecast = dlib.shape_predictor(".\shape_predictor_68_face_landmarks.dat")# Il file Dat è il punto cruciale del codice

(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 mentre True: ret, frame=cap.read() frame = imutils.resize(frame, grigio = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) soggetti = rileva (grigio, 0) per il soggetto in soggetti: forma = previsione (grigio, soggetto) forma = face_utils.shape_to_np(shape)#conversione in NumPy Array leftEye = shape[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.convexHull(rightEye) 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, "****************AVVISO!*********** *****", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print ("Dro wsy")

GPIO.output (cicalino, GPIO. HIGH)

altrimenti: bandiera = 0

GPIO.output (cicalino, GPIO. LOW)

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

Consigliato: