Taula de continguts:
- Pas 1: coses que necessiteu
- Pas 2: Codi de Python amb conjunt de dades del predictor de forma d'ulls (versió de PC)
- Pas 3: versió de Raspberry Pi
Vídeo: Sistema d'alerta de somnolència: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
Cada any moltes persones perden la vida a causa d’accidents de carretera mortals a tot el món i la conducció adormida és una de les principals causes d’accidents de trànsit i de mort. La fatiga i el micro son als controls de conducció solen ser la causa fonamental d’accidents greus. No obstant això, es poden detectar signes inicials de fatiga abans que es produeixi una situació crítica i, per tant, la detecció de la fatiga del conductor i la seva indicació són un tema d’investigació en curs. La majoria dels mètodes tradicionals per detectar somnolència es basen en aspectes conductuals, mentre que alguns són intrusius i poden distreure els conductors, mentre que alguns requereixen uns sensors costosos. Per tant, en aquest document es desenvolupa i s’implementa un sistema de detecció de somnolència del conductor en temps real i lleuger en aplicacions per a Android. El sistema registra els vídeos i detecta la cara del conductor en tots els fotogrames mitjançant l’ús de tècniques de processament d’imatges. El sistema és capaç de detectar fites facials, calcula la proporció d’aspecte ocular (EAR) i la proporció de tancament ocular (ECR) per detectar la somnolència del conductor en funció del llindar adaptatiu. S'han emprat algoritmes d'aprenentatge automàtic per comprovar l'eficàcia de l'enfocament proposat. Els resultats empírics demostren que el model proposat és capaç d’aconseguir una precisió del 84% mitjançant un classificador forestal aleatori.
Pas 1: coses que necessiteu
1. PI FRASSA
2. WEBCAM (CAM WEB C270 HD PER MILLORS RESULTATS)
És possible que la versió de PC necessiti alguns canvis al codi
Pas 2: Codi de Python amb conjunt de dades del predictor de forma d'ulls (versió de PC)
per detectar els ulls de manera molt efectiva en un vídeo en temps real, podem utilitzar aquest fitxer.dat següent.
drive.google.com/open?id=1UiSHe72L4TeN14VK…
Descarregueu el fitxer.dat des de l'enllaç superior i executeu el codi python següent
Codi Python
des de la importació scipy.spatial importació d'imutils importació face_utils importació d'imutils importació dlib importació cv2
def eye_aspect_ratio (ull):
A = distància.euclidiana (ull [1], ull [5]) B = distància.euclidiana (ull [2], ull [4]) C = distància.euclidiana (ull [0], ull [3]) orella = (A + B) / (2.0 * C) retorn de l'oïda = 0,25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # El fitxer Dat és el quid del codi
(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) gris = cv2.cvtColor (marc, cv2. COLOR_BGR2GRAY) subjectes = detectar (gris, 0) per a subjectes en subjectes: forma = predir (gris, subjecte) shape = face_utils.shape_to_np (forma) #converting to 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. drawContours (frame, [LeftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [RightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (marc, "**************** ALERTA! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (marc, "***************** ALERTA! *********** ***** ", (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 ()
Pas 3: versió de Raspberry Pi
quan les persones tanquen els ulls, el raspberry pi us donarà l'alerta
CONNECTEU el vostre timbre al pin 23 (veure la imatge)
des de la distància d’importació scipy.spatial
importar RPi. GPIO com a GPIO
a partir del temps importació de son
GPIO.setwarnings (fals)
GPIO.setmode (GPIO. BCM)
des d'imutils importeu face_utils
importar imutils importar dlib importar cv2
zumbador = 23
GPIO.setup (brunzidor, GPIO. OUT)
def eye_aspect_ratio (ull):
A = distància.euclidiana (ull [1], ull [5]) B = distància.euclidiana (ull [2], ull [4]) C = distància.euclidiana (ull [0], ull [3]) orella = (A + B) / (2.0 * C) retorn de l'oïda = 0,25 frame_check = 20 detect = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # El fitxer Dat és el quid del codi
(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) gris = cv2.cvtColor (marc, cv2. COLOR_BGR2GRAY) subjectes = detectar (gris, 0) per a subjectes en subjectes: forma = predir (gris, subjecte) shape = face_utils.shape_to_np (forma) #converting to 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. drawContours (frame, [LeftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [RightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (marc, "**************** ALERTA! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) cv2.putText (marc, "***************** ALERTA! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")
Sortida GPIO (brunzidor, GPIO. HIGH)
else: flag = 0
GPIO.output (brunzidor, GPIO. LOW)
cv2.imshow ("Frame", frame) key = cv2.waitKey (1) & 0xFF if key == ord ("q"): break cv2.destroyAllWindows () cap.stop ()
Recomanat:
Sistema d'alerta d'estacionament invers de cotxes Arduino - Pas a pas: 4 passos
Sistema d'alerta d'estacionament invers de cotxes Arduino | Pas a pas: en aquest projecte, dissenyaré un senzill circuit de sensor d’estacionament invers de cotxes Arduino amb Arduino UNO i el sensor d’ultrasons HC-SR04. Aquest sistema d’alerta inversa de cotxe basat en Arduino es pot utilitzar per a navegacions autònomes, intervals de robots i altres
Sistema d’alerta d’accidents mitjançant GSM, GPS i acceleròmetre: 5 passos (amb imatges)
Sistema d’alerta d’accidents que utilitza GSM, GPS i acceleròmetre: si us plau vota’m pel concurs, vota’m pel concurs Avui en dia hi ha moltes persones mortes a la carretera a causa d’un accident, la causa principal és el "retard en el rescat". Aquest problema és molt gran als països en desús, així que vaig dissenyar aquest projecte per desar el
Sistema de llum d'alerta meteorològica: 6 passos
Sistema de llum d'alerta meteorològica: el sistema d'il·luminació d'alerta meteorològica canvia d'il·luminació per indicar diferents avisos o rellotges meteorològics. Aquest sistema aprofita les dades meteorològiques de lliure accés per fer un canvi d’il·luminació per indicar l’estat del temps. Un raspberry pi (mitjançant node-red) comprova el
Sistema d'alerta de campana del passadís: 4 passos
Sistema d’alerta de campanes de passadís: a l’escola hi ha campanes que indiquen quan s’ha de produir el canvi de classe. Primer sonen per indicar quan ha d’acabar la classe i després sonen per segona vegada per indicar quan ha de començar la següent classe. Si un estudiant arriba tard, normalment no té
Sistema d'alerta de sòl de baixa humitat per a la vostra planta: 5 passos
Sistema d'alerta de sòls de baixa humitat per a la vostra planta: en diverses residències, és habitual trobar pots amb diferents tipus de plantes. I amb la gran quantitat d’activitats del dia a dia, les persones s’obliden de regar les seves plantes i acaben morint per falta d’aigua. Com a manera d’evitar aquest problema, decidim