- Необходими компоненти
- Инсталиране на OpenCV в Raspberry Pi
- Инсталиране на други задължителни пакети
- Програмиране на Raspberry Pi
- Тестване на системата за откриване на сънливост на водача
Шофьорите на камиони, които транспортират товара и тежките материали на дълги разстояния през деня и през нощта, често страдат от липса на сън. умората и сънливостта са едни от основните причини за големи аварии по магистралите. Автомобилната индустрия работи по някои технологии, които могат да открият сънливостта и да предупредят шофьора за това.
В този проект ще изградим система за заспиване и предупреждение за заспиване за драйвери, използващи модула на камерата Raspberry Pi, OpenCV и Pi. Основната цел на тази система е да проследява състоянието на лицето на водача и движенията на очите и ако водачът се чувства сънлив, тогава системата ще задейства предупредително съобщение. Това е продължението на предишното ни приложение за разпознаване на ориентири на лице и разпознаване на лица.
Необходими компоненти
Хардуерни компоненти
- Raspberry Pi 3
- Модул за камера Pi
- Микро USB кабел
- Звънец
Софтуер и онлайн услуги
- OpenCV
- Dlib
- 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 инсталирайте игра за очи
Програмиране на Raspberry Pi
Пълен код за детектор за сънливост на водача, използващ OpenCV, е даден в края на страницата. Тук обясняваме някои важни части от кода за по-добро разбиране.
Така че, както обикновено, стартирайте кода, като включите всички необходими библиотеки.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO като 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 = known_face_names =
След това създайте някои променливи, за да съхраните местоположенията на лицевите части, имената на лица и кодировките.
face_locations = face_encodings = face_names = process_this_frame = Вярно
Вътре във функцията 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 (файл, малка_кадър)
Ако разпознатото лице съвпада с лицето на изображението, извикайте функцията за очна игра, за да проследите движенията на очите. Кодът многократно ще проследява позицията на окото и очната ябълка.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) if match: 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 ("Alert! ! Сигнал !! Открита сънливост на водача ")
След това използвайте функциите 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. Превъртете надолу за работещото видео и код.