OpenCV обнаружение сонливости.

Чтобы создать средство обнаружения сонливости с использованием OpenCV и Python, вы можете выполнить следующие действия:

Шаг 1: Установите необходимые библиотеки
Убедитесь, что у вас установлены OpenCV и dlib. Вы можете использовать pip для их установки:

pip install opencv-python
pip install dlib

Шаг 2: Импортируйте необходимые библиотеки
В вашем скрипте на Python импортируйте необходимые библиотеки:

import cv2
import dlib
from scipy.spatial import distance

Шаг 3: Загрузите датчики лица и глаз
Загрузите предварительно подготовленные детекторы лиц и глаз, предоставляемые dlib:

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

Примечание: Файл “shape_predictor_68_face_landmarks.dat” является предварительно обученной моделью для определения лицевых ориентиров. Вы можете скачать его с веб-сайта dlib (http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 ).

Шаг 4: Определите вспомогательные функции
Определите несколько вспомогательных функций для расчета соотношения сторон глаз (ушей) и обнаружения сонливости:

def eye_aspect_ratio(eye):
    A = distance.euclidean(eye[1], eye[5])
    B = distance.euclidean(eye[2], eye[4])
    C = distance.euclidean(eye[0], eye[3])
    ear = (A + B) / (2.0 * C)
    return ear

def detect_drowsiness(ear, threshold):
    if ear < threshold:
        return True
    else:
        return False

Шаг 5: Запустите видеопоток
Инициализируйте видеозахват:

cap = cv2.VideoCapture(0)  # 0 for webcam, or provide a video file path
while True:
    ret, frame = cap.read()
    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)
    
    for face in faces:
        landmarks = predictor(gray, face)
        left_eye = []
        right_eye = []
        
        for n in range(36, 42):
            x = landmarks.part(n).x
            y = landmarks.part(n).y
            left_eye.append((x, y))
        
        for n in range(42, 48):
            x = landmarks.part(n).x
            y = landmarks.part(n).y
            right_eye.append((x, y))
        
        left_ear = eye_aspect_ratio(left_eye)
        right_ear = eye_aspect_ratio(right_eye)
        avg_ear = (left_ear + right_ear) / 2
        
        if detect_drowsiness(avg_ear, threshold=0.3):
            cv2.putText(frame, "Drowsy", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
        
        for (x, y) in left_eye:
            cv2.circle(frame, (x, y), 1, (0, 255, 0), -1)
        
        for (x, y) in right_eye:
            cv2.circle(frame, (x, y), 1, (0, 255, 0), -1)

    cv2.imshow("Drowsiness Detector", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Шаг 6: Запустите скрипт
Сохраните скрипт с расширением .py

Шаг 7: Установка порогового значения EAR Настройте пороговое значение EAR, чтобы определить, когда глаза считаются закрытыми или частично закрытыми. Значение 0.3, используемое в примере выше, является примерным и может потребоваться настройка в зависимости от конкретной ситуации и условий освещения.

threshold = 0.3  # Значение порога для определения сонливости

Шаг 8: Запуск детектора сонливости Запустите скрипт и проверьте его работу. Он будет захватывать видеопоток с веб-камеры (если используется cap = cv2.VideoCapture(0)) или видеофайла (если вы предоставите путь к файлу). При обнаружении сонливости будет выводиться текст “Drowsy” на изображение.

cap.release()
cv2.destroyAllWindows()

Обратите внимание, что этот код представляет собой базовую реализацию детектора сонливости и может быть улучшен или доработан для вашего конкретного случая. Например, вы можете добавить функциональность определения зевоты или моргания, настроить параметры обнаружения или добавить предупреждающий сигнал при обнаружении сонливости.

Также обратите внимание, что эта реализация не является полностью надежной и не может гарантировать 100% точность. Она может служить вспомогательным инструментом для определения сонливости, но не заменяет осторожность и безопасность при вождении или выполнении других задач, требующих бдительности.

Убедитесь, что у вас есть файл “shape_predictor_68_face_landmarks.dat”, необходимый для работы детектора лиц и ключевых точек лица. Вы можете скачать его с веб-сайта dlib (http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2).

Оставьте комментарий