- Потрібні компоненти
- Встановлення OpenCV в Raspberry Pi
- Встановлення інших необхідних пакетів
- Програмування Raspberry Pi
- Тестування системи виявлення сонливості водія
Водії вантажівок, які перевозять вантаж та важкі матеріали на великі відстані вдень та вночі, часто страждають від недосипу. втома та сонливість є одними з основних причин великих аварій на шосе. Автомобільна промисловість працює над деякими технологіями, які можуть виявити сонливість та попередити про це водія.
У цьому проекті ми збираємося створити систему зондування та оповіщення про сну для водіїв, що використовують модулі камери Raspberry Pi, OpenCV та Pi. Основною метою цієї системи є відстеження стану обличчя та рухів очей водія, а якщо водій відчуває сонливість, система спрацьовує із попереджувальним повідомленням. Це продовження нашої попередньої програми виявлення орієнтирів обличчя та розпізнавання облич.
Потрібні компоненти
Апаратні компоненти
- Raspberry Pi 3
- Модуль камери Pi
- Кабель Micro USB
- Зумер
Програмне забезпечення та Інтернет-послуги
- OpenCV
- Dlib
- Python3
Перш ніж продовжувати цей проект виявлення сонливості драйвера , спочатку нам потрібно встановити OpenCV, imutils, dlib, Numpy та деякі інші залежності в цьому проекті. Тут використовується OpenCV для цифрової обробки зображень. Найпоширенішими програмами цифрової обробки зображень є виявлення об’єктів, розпізнавання обличчя та лічильник людей.
Тут ми використовуємо лише Raspberry Pi, камеру Pi та зумер для побудови цієї системи виявлення сну.
Встановлення 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 встановити
Встановлення модуля розпізнавання обличчя : Ця бібліотека використовується для розпізнавання та управління особами з Python або командного рядка. Використовуйте команду нижче, щоб встановити бібліотеку розпізнавання облич.
Pip3 встановити розпізнавання обличчя
І нарешті, встановіть бібліотеку eye_game, використовуючи наведену нижче команду:
pip3 встановити очну гру
Програмування Raspberry Pi
Повний код для детектора сонливості драйвера за допомогою OpenCV наведено в кінці сторінки. Тут ми пояснюємо деякі важливі частини коду для кращого розуміння.
Отже, як зазвичай, почніть код, включаючи всі необхідні бібліотеки.
import face_recognition import cv2 import numpy as np time import import cv2 import RPi.GPIO as GPIO import eye_game
Після цього створіть екземпляр для отримання відеопотоку з камери pi. Якщо ви використовуєте більше однієї камери, то замініть нуль на одну у функції 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 = відомі_імена_файлів =
Потім створіть кілька змінних для зберігання розташування частин обличчя, назв облич та кодування.
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) if matches: 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 (кадр, (ліворуч, зверху), (праворуч, знизу), (0, 255, 0), 2) cv2.rectangle (кадр, (ліворуч, знизу - 35), (праворуч, знизу), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (кадр, ім'я, (зліва + 6, знизу - 6), шрифт, 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. Прокрутіть вниз для робочого відео та коду.