- Необходимые компоненты
- Установка OpenCV в Raspberry Pi
- Установка других необходимых пакетов
- Программирование Raspberry Pi
- Тестирование системы обнаружения сонливости водителя
Водители грузовиков, которые перевозят грузы и тяжелые грузы на большие расстояния днем и ночью, часто страдают от недосыпания. Усталость и сонливость - одни из основных причин крупных аварий на шоссе. Автомобильная промышленность работает над некоторыми технологиями, которые могут обнаруживать сонливость и предупреждать о ней водителя.
В этом проекте мы собираемся создать систему определения сна и оповещения для драйверов с использованием модуля камеры Raspberry Pi, OpenCV и Pi. Основная цель этой системы - отслеживать состояние лица водителя и движения глаз, и если водитель чувствует себя сонным, система выдаст предупреждающее сообщение. Это расширение нашего предыдущего приложения для определения ориентиров и распознавания лиц.
Необходимые компоненты
Компоненты оборудования
- Raspberry Pi 3
- Модуль камеры Pi
- Кабель Micro USB
- Зуммер
Программное обеспечение и онлайн-сервисы
- OpenCV
- Длиб
- Python3
Прежде чем продолжить этот проект по обнаружению сонливости драйверов , сначала нам нужно установить OpenCV, imutils, dlib, Numpy и некоторые другие зависимости в этом проекте. OpenCV используется здесь для обработки цифровых изображений. Наиболее распространенными приложениями цифровой обработки изображений являются обнаружение объектов, распознавание лиц и счетчик посетителей.
Здесь мы используем только Raspberry Pi, Pi Camera и зуммер для создания этой системы обнаружения сна.
Установка OpenCV в Raspberry Pi
Перед установкой OpenCV и других зависимостей Raspberry Pi необходимо полностью обновить. Используйте следующие команды, чтобы обновить Raspberry Pi до последней версии:
sudo apt-get update
Затем используйте следующие команды, чтобы установить необходимые зависимости для установки OpenCV на Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Наконец, установите OpenCV на Raspberry Pi, используя следующие команды.
pip3 установить opencv-contrib-python == 4.1.0.25
Если вы новичок в OpenCV, ознакомьтесь с нашими предыдущими руководствами по OpenCV с Raspberry pi:
- Установка OpenCV на Raspberry Pi с помощью CMake
- Распознавание лиц в реальном времени с помощью Raspberry Pi и OpenCV
- Распознавание номерных знаков с использованием Raspberry Pi и OpenCV
- Оценка размера толпы с использованием OpenCV и Raspberry Pi
Мы также создали серию руководств по OpenCV, начиная с начального уровня.
Установка других необходимых пакетов
Прежде чем программировать Raspberry Pi для детектора сонливости, давайте установим другие необходимые пакеты.
Установка dlib: dlib - это современный набор инструментов, содержащий алгоритмы машинного обучения и инструменты для решения реальных проблем. Используйте команду ниже, чтобы установить dlib.
pip3 установить dlib
Установка NumPy: NumPy - это основная библиотека для научных вычислений, которая содержит мощный объект n-мерного массива, предоставляет инструменты для интеграции C, C ++ и т. Д.
pip3 установить numpy
Установка модуля face_recognition: эта библиотека используется для распознавания лиц и управления ими из Python или командной строки. Используйте команду ниже, чтобы установить библиотеку распознавания лиц.
Pip3 установить face_recognition
И, наконец, установите библиотеку eye_game, используя следующую команду:
pip3 установить eye-game
Программирование Raspberry Pi
Полный код для детектора сонливости водителя с использованием OpenCV приведен в конце страницы. Здесь мы объясняем некоторые важные части кода для лучшего понимания.
Итак, как обычно, запустите код, включив все необходимые библиотеки.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
После этого создайте экземпляр для получения видеопотока с пи-камеры. Если вы используете более одной камеры, замените ноль на одну в функции cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Теперь в следующих строках введите имя файла и путь к нему. В моем случае и код, и файл находятся в одной папке. Затем используйте кодировку лица, чтобы получить местоположение лица на картинке.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
После этого создайте два массива для сохранения лиц и их имен. Я использую только одно изображение; вы можете добавить в код другие изображения и пути к ним.
known_face_encodings = known_face_names =
Затем создайте несколько переменных для хранения местоположений частей лица, имен лиц и кодировок.
face_locations = face_encodings = face_names = process_this_frame = True
Внутри функции while захватите видеокадры из потоковой передачи и уменьшите размер кадров, а также преобразуйте захваченный кадр в цвет RGB для распознавания лиц.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
После этого запустите процесс распознавания лиц, чтобы сравнить лица на видео с изображением. А также получить расположение частей лица.
если process_this_frame: face_locations = face_recognition.face_locations (rgb_small_frame) face_encodings = face_recognition.face_encodings (rgb_small_frame, face_locations) cv2.imwrite (файл, small_frame)
Если распознанное лицо совпадает с лицом на изображении, вызовите функцию игры для глаз, чтобы отслеживать движения глаз. Код будет постоянно отслеживать положение глаза и глазного яблока.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) при совпадении: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Если код не обнаруживает движения глаз в течение 10 секунд, он активирует сигнал тревоги, чтобы разбудить человека.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Предупреждение! ! Предупреждение !! Обнаружена сонливость водителя ")
Затем используйте функции OpenCV, чтобы нарисовать прямоугольник вокруг лица и поместить на него текст. Также покажите видеокадры с помощью функции cv2.imshow .
cv2.rectangle (frame, (слева, сверху), (справа, снизу), (0, 255, 0), 2) cv2.rectangle (frame, (слева, снизу - 35), (справа, снизу), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (frame, name, (left + 6, bottom - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow («Видео», кадр) Установите клавишу «S», чтобы остановить код. если cv2.waitKey (1) & 0xFF == ord ('s'): перерыв
Тестирование системы обнаружения сонливости водителя
Когда код будет готов, подключите камеру Pi и зуммер к Raspberry Pi и запустите код. Примерно через 10 секунд появится окно с прямой трансляцией с камеры Raspberry Pi. Когда устройство распознает лицо, оно напечатает ваше имя на рамке и начнет отслеживать движение глаз. Теперь закройте глаза на 7-8 секунд, чтобы проверить будильник. Когда счет становится больше 10, включается сигнал тревоги, предупреждающий вас о ситуации.
Вот как вы можете создать Детектор сонливости, используя OpenCV и Raspberry Pi. Прокрутите вниз до рабочего видео и кода.