Оглавление:

Система оповещения о сонливости: 3 шага
Система оповещения о сонливости: 3 шага

Видео: Система оповещения о сонливости: 3 шага

Видео: Система оповещения о сонливости: 3 шага
Видео: 3 Простых Шага для Пуленепробиваемого Иммунитета ! Сделай ЭТО Сейчас ! Никогда не Болей ! 2024, Ноябрь
Anonim
Система оповещения о сонливости
Система оповещения о сонливости

Ежегодно во всем мире многие люди гибнут в результате дорожно-транспортных происшествий со смертельным исходом, и сонное вождение является одной из основных причин дорожно-транспортных происшествий и смертей. Усталость и микросон при управлении автомобилем часто являются первопричиной серьезных аварий. Однако первые признаки усталости могут быть обнаружены до того, как возникнет критическая ситуация, и поэтому определение усталости водителя и ее индикация является предметом постоянных исследований. Большинство традиционных методов определения сонливости основаны на поведенческих аспектах, некоторые навязчивы и могут отвлекать водителей, а некоторые требуют дорогих датчиков. Поэтому в этой статье легкая система обнаружения сонливости водителя в режиме реального времени разработана и реализована в приложении Android. Система записывает видео и определяет лицо водителя в каждом кадре, используя методы обработки изображений. Система способна обнаруживать лицевые ориентиры, вычислять соотношение сторон глаза (EAR) и коэффициент закрытия глаз (ECR) для определения сонливости водителя на основе адаптивного определения порога. Алгоритмы машинного обучения были использованы для проверки эффективности предложенного подхода. Эмпирические результаты показывают, что предложенная модель может достигать точности 84% при использовании случайного классификатора леса.

Шаг 1. Вещи, которые вам нужны

1. малиновый PI

2. WEBCAM (ВЕБ-КАМЕРА C270 HD ДЛЯ ЛУЧШИХ РЕЗУЛЬТАТОВ)

Версия для ПК может потребовать некоторых изменений в коде

Шаг 2. Код Python с набором данных для прогнозирования формы глаз (версия для ПК)

Для более эффективного обнаружения глаз в видео в реальном времени мы можем использовать этот файл.dat ниже.

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

Загрузите файл.dat по ссылке выше и запустите указанный ниже код Python.

Код Python

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

def eye_aspect_ratio (глаз):

A = расстояние. Евклидово (глаз [1], глаз [5]) B = расстояние. Евклидово (глаз [2], глаз [4]) C = расстояние. Евклидово (глаз [0], глаз [3]) ухо = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () pred = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # Dat-файл является сутью кода

(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, в то время как True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) серый = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) темы = обнаружить (серый, 0) для объекта в субъектах: shape = прогнозировать (серый, объект) shape = face_utils.shape_to_np (shape) # преобразовывать в NumPy Array leftEye = shape [lStart: lEnd] rightEye = форма [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (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, "**************** ПРЕДУПРЕЖДЕНИЕ! ****************", (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 ()

Шаг 3: версия Raspberry Pi

Версия Raspberry Pi
Версия Raspberry Pi
Версия Raspberry Pi
Версия Raspberry Pi

когда человек закрывает глаза, Raspberry Pi предупредит вас

ПОДКЛЮЧИТЕ свой зуммер к контакту 23 (см. Рисунок)

от расстояния импорта scipy.spatial

импортировать RPi. GPIO как GPIO

от времени импортный сон

GPIO.setwarnings (Ложь)

GPIO.setmode (GPIO. BCM)

из imutils import face_utils

импорт imutils импорт dlib импорт cv2

зуммер = 23

GPIO.setup (зуммер, GPIO. OUT)

def eye_aspect_ratio (глаз):

A = расстояние. Евклидово (глаз [1], глаз [5]) B = расстояние. Евклидово (глаз [2], глаз [4]) C = расстояние. Евклидово (глаз [0], глаз [3]) ухо = (A + B) / (2.0 * C) return ear thresh = 0.25 frame_check = 20 detect = dlib.get_frontal_face_detector () predic = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat") # Dat-файл является сутью кода

(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, в то время как True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) серый = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) themes = detect (gray, 0) for subject in themes: shape = pred (gray, subject) shape = face_utils.shape_to_np (shape) #converting to NumPy Array leftEye = shape [lStart: lEnd] rightEye = форма [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (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, "**************** ПРЕДУПРЕЖДЕНИЕ! ****************", (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 (зуммер, GPIO. HIGH)

иначе: flag = 0

GPIO.output (зуммер, GPIO. LOW)

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

Рекомендуемые: