Índice:

Sistema de alerta de sonolência: 3 etapas
Sistema de alerta de sonolência: 3 etapas

Vídeo: Sistema de alerta de sonolência: 3 etapas

Vídeo: Sistema de alerta de sonolência: 3 etapas
Vídeo: FISIOLOGIA DO SONO PARTE 1/2 [Neuro 07] 2024, Novembro
Anonim
Sistema de alerta de sonolência
Sistema de alerta de sonolência

Todos os anos, muitas pessoas perdem a vida devido a acidentes rodoviários fatais em todo o mundo e a sonolência ao volante é uma das principais causas de acidentes rodoviários e morte. A fadiga e o microssono nos controles de direção costumam ser a causa raiz de acidentes graves. No entanto, os sinais iniciais de fadiga podem ser detectados antes que surja uma situação crítica e, portanto, a detecção de fadiga do motorista e sua indicação é um tópico de pesquisa em andamento. A maioria dos métodos tradicionais para detectar sonolência é baseada em aspectos comportamentais, enquanto alguns são intrusivos e podem distrair os motoristas, enquanto alguns requerem sensores caros. Portanto, neste artigo, um sistema leve de detecção de sonolência do motorista em tempo real é desenvolvido e implementado no aplicativo Android. O sistema grava os vídeos e detecta o rosto do motorista em cada quadro, empregando técnicas de processamento de imagem. O sistema é capaz de detectar pontos de referência faciais, calcula Eye Aspect Ratio (EAR) e Eye Closure Ratio (ECR) para detectar a sonolência do motorista com base no limiar adaptativo. Algoritmos de aprendizado de máquina têm sido empregados para testar a eficácia da abordagem proposta. Os resultados empíricos demonstram que o modelo proposto é capaz de atingir uma precisão de 84% usando o classificador florestal aleatório.

Etapa 1: Coisas que você precisa

1. RASPBERRY PI

2. WEBCAM (C270 HD WEB CAM PARA MELHORES RESULTADOS)

A versão do PC pode precisar de algumas mudanças no código

Etapa 2: conjunto de dados Python Code With Eyes Shape Predictor (versão para PC)

para detectar olhos de forma muito eficaz em um vídeo em tempo real, podemos usar este arquivo.dat abaixo.

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

Baixe o arquivo.dat do link acima e execute o código python abaixo

Código Python

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

def eye_aspect_ratio (olho):

A = distância.euclidiana (olho [1], olho [5]) B = distância.euclidiana (olho [2], olho [4]) C = distância euclidiana (olho [0], olho [3]) orelha = (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") # O arquivo Dat é o ponto crucial do código

(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 enquanto True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) cinza = cv2.cvtColor (quadro, cv2. COLOR_BGR2GRAY) assuntos = detectar (cinza, 0) para o assunto em assuntos: forma = prever (cinza, assunto) forma = face_utils.shape_to_np (forma) #convertendo para NumPy Array leftEye = forma [lIniciar: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) orelha = (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 (frame, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** 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 ()

Etapa 3: versão Raspberry Pi

Versão Raspberry Pi
Versão Raspberry Pi
Versão Raspberry Pi
Versão Raspberry Pi

quando a pessoa fecha os olhos então o pi de framboesa vai te alertar

CONECTE sua campainha ao pino 23 (veja a imagem)

da distância de importação scipy.spatial

importar RPi. GPIO como GPIO

do tempo importar dormir

GPIO.setwarnings (False)

GPIO.setmode (GPIO. BCM)

de imutils import face_utils

import imutils import dlib import cv2

campainha = 23

GPIO.setup (campainha, GPIO. OUT)

def eye_aspect_ratio (olho):

A = distância.euclidiana (olho [1], olho [5]) B = distância.euclidiana (olho [2], olho [4]) C = distância euclidiana (olho [0], olho [3]) orelha = (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") # O arquivo Dat é o ponto crucial do código

(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 enquanto True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) cinza = cv2.cvtColor (quadro, cv2. COLOR_BGR2GRAY) assuntos = detectar (cinza, 0) para o assunto em assuntos: forma = prever (cinza, assunto) forma = face_utils.shape_to_np (forma) #convertendo para NumPy Array leftEye = forma [lIniciar: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) orelha = (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 (frame, "**************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ALERTA! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO.output (campainha, GPIO. HIGH)

else: flag = 0

GPIO.output (campainha, GPIO. LOW)

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

Recomendado: