https://github.com/GTruf/Driver-Drowsiness-Detector
Prototype of an intelligent safety system for detecting driver drowsiness
https://github.com/GTruf/Driver-Drowsiness-Detector
cpp cuda cudnn deep-learning driver-drowsiness-detection driver-drowsiness-detector drowsiness-detection face-recognition image-recognition machine-learning neural-network nvidia-cuda object-recognition opencv qt6 recognition-neural-network yolo yolov10 yolov5 yolov9
Last synced: about 1 month ago
JSON representation
Prototype of an intelligent safety system for detecting driver drowsiness
- Host: GitHub
- URL: https://github.com/GTruf/Driver-Drowsiness-Detector
- Owner: GTruf
- License: mit
- Created: 2023-11-05T20:30:48.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-06-16T02:27:35.000Z (10 months ago)
- Last Synced: 2024-06-17T02:01:40.034Z (10 months ago)
- Topics: cpp, cuda, cudnn, deep-learning, driver-drowsiness-detection, driver-drowsiness-detector, drowsiness-detection, face-recognition, image-recognition, machine-learning, neural-network, nvidia-cuda, object-recognition, opencv, qt6, recognition-neural-network, yolo, yolov10, yolov5, yolov9
- Language: C++
- Homepage:
- Size: 25.5 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- fucking-awesome-readme - GTruf/Driver-Drowsiness-Detector - Beautiful project logo. Concise and clear project description. Exhaustive TOC. Feature list. Project screenshots and video snippets. Comprehensive informative sections. Useful links. Clear instructions for setting up and building the project. Presence of prepared releases. (Examples)
- awesome-readme - GTruf/Driver-Drowsiness-Detector - Beautiful project logo. Concise and clear project description. Exhaustive TOC. Feature list. Project screenshots and video snippets. Comprehensive informative sections. Useful links. Clear instructions for setting up and building the project. Presence of prepared releases. (Examples)
README
![]()
Table of contents
- Overview
- Features
- Dependencies
- Try it out
- Build
- Limitations
- Project screenshots and video snippets
- Multi-language interface
- Drowsiness detection
- Fist gesture
- Palm and V gestures
- Multiple cameras
- Smart interaction with the camera
- Cross-platform
## Overview
This project is a thesis work representing a prototype of an intelligent safety system for detecting driver drowsiness
using facial video surveillance.
## Features
- 🚀 [YOLOv5](https://github.com/ultralytics/yolov5) as an object detector
- 🎮 Interactive interaction with the prototype:
- Start/stop the recognition system
- Interaction with a video camera
- Eye and gesture recognition ([V gesture ✌️](#palm-and-v-gestures), [Fist gesture ✊](#fist-gesture), [Palm gesture ✋](#palm-and-v-gestures))
- Warning of a potential emergency situation using warning sound
- 🚀 Recognition (drowsiness, gestures, etc.) takes approximately one second
- ⚙️ Multi-language user interface
- ⚙️ Cross-platform (Windows/Linux)
- ⚙️ Multithreaded application
## Dependencies
- [C++17](https://en.cppreference.com/w/cpp/17):
- 64-bit MSVC 19.15 and higher on Windows
- 64-bit GCC 11.2 and higher with [Ninja](https://ninja-build.org/) on Linux
- [CMake](https://cmake.org/) 3.21 and higher
- [OpenCV](https://opencv.org/) 4.5.4 and higher
- [Qt](https://www.qt.io/) [6.5.3](https://doc.qt.io/qt-6.5/)
- [NVIDIA drivers](https://www.nvidia.com/download/index.aspx)
- [CUDA](https://developer.nvidia.com/cuda-toolkit-archive) with [cuDNN](https://developer.nvidia.com/rdp/cudnn-archive) (more details about the versions below)
## Try it out
For convenience, [releases](https://github.com/GTruf/Driver-Drowsiness-Detector/releases) with a fully built project with
all the necessary libraries to run are prepared. On Linux, the **DDDetector** executable is located in the **bin** folder.
The project releases use [CUDA 12.2](https://developer.nvidia.com/cuda-toolkit-archive) with [cuDNN v8.9.2 (for Windows) / v8.9.5 (for Linux) for CUDA 12.x](https://developer.nvidia.com/rdp/cudnn-archive)
(cuDNN libraries are in the release, only CUDA and NVIDIA drivers are mandatory for installation on the computer).
**For Windows**, everything installs in a few clicks, you just need to download and run the installers from the official
NVIDIA website. **For Linux** (the project was tested on Ubuntu 22.04) you can use [this instruction](https://gist.github.com/denguir/b21aa66ae7fb1089655dd9de8351a202)
or others, also take a look at [these notes](#notes-for-linux).
OpenCV libraries have version [4.8.0](https://github.com/opencv/opencv/releases/tag/4.8.0) in the release with support
for the following GPU architectures: [5.0, 5.2, 6.0, 6.1, 7.0, 7.5, 8.0, 8.6, 8.9, 9.0](https://en.wikipedia.org/wiki/CUDA#GPUs_supported) and require CUDA/cuDNN of
the versions mentioned above.
## Build
To build and run the project locally, you need to have [Git](https://git-scm.com/downloads), [Python 3.5](https://www.python.org/downloads/)
and higher, and all necessary [dependencies](#dependencies) installed on your computer.
#### Notes for Linux
1. Need **binutils** and **OpenGL** packages.
2. On Linux, [RUNPATH is set for the executable](CMakeLists.txt#L85) (libraries are searched for in the **lib64**
folder at level with **bin** in the **Qt6**, **opencv**, **cuda** subfolders), so if you want to, you can put framework
libraries there, so that the linker will try to find them there first.
From your command line:
```shell
# Clone this repository
git clone https://github.com/GTruf/Driver-Drowsiness-Detector.git
# Go into the repository folder
cd Driver-Drowsiness-Detector
# --------------------------
# Build
# Template: python/python3 build.py --qt-cmake-prefix-path= --opencv-dir= -j
# Examples:
# On Windows
> python build.py --qt-cmake-prefix-path=C:\Qt\6.5.3\msvc2019_64\lib\cmake --opencv-dir=C:\Development\opencv-4.8.0\build\install -j 8
# On Linux
$ python3 build.py --qt-cmake-prefix-path=~/Qt/6.5.3/gcc_64/lib/cmake --opencv-dir=/usr/local/lib/cmake/opencv4 -j 8
# Go into the build folder after building the project
cd build
# --------------------------
# Run
# Before running, make sure that all dynamic libraries are located
# where dynamic library loaders can find them when the executable runs
# On Windows, the executable will be in the build folder and can be opened either via cmd or explorer
> DDDetector.exe
# On Linux, the executable will be in the build/bin folder
$ ./bin/DDDetector
```
## Limitations
1. The camera class when [selecting the camera device](src/Camera.cpp#L31) **on Windows** selects the **DSHOW**
(otherwise **MSMF**) API, **on Linux** it selects **V4L2**. In combination, the **MJPEG** video compression method is
used. The problem is that not all video cameras support such combinations, so in the worst case the number of frames
per second from the camera can be very small, in this case you need to choose the right API of the camera together with
the right video compression method.
2. The repository uses [Git LFS](https://git-lfs.com/) to store some [objects](.gitattributes), so if you can't get something
during the `git lfs pull`, you can download them from the releases or [contact me](https://t.me/glebchanskyy), and
I'll send them to you personally.
## Project screenshots and video snippets
Just a reminder that you can personally [launch the app](#try-it-out) and try out all of its functionality.
### Multi-language interface
https://github.com/GTruf/Driver-Drowsiness-Detector/assets/61882182/1e977208-e880-4130-b3bf-fdb5786b7d6f
### Drowsiness detection
The drowsiness detection takes about 1-1.25 seconds followed by playing the special warning sound signal. The detection
is based on the [YOLOv5](https://github.com/ultralytics/yolov5) model trained on a
[custom dataset](https://universe.roboflow.com/driver-drowsiness-detector/driver-drowsiness-detector) labeled in [Roboflow](https://roboflow.com/).
https://github.com/GTruf/Driver-Drowsiness-Detector/assets/61882182/6001eaf9-6350-44cd-a1d7-1d8b813267b1
### Fist gesture
This gesture is used to restart the recognition system.
https://github.com/GTruf/Driver-Drowsiness-Detector/assets/61882182/f136fb00-e578-4086-b81b-cab753ed7f58
### Palm and V gestures
The **palm** gesture is used to wake up the drowsiness recognition system. The **V** gesture is used to put the drowsiness
recognition system into sleep mode.
https://github.com/GTruf/Driver-Drowsiness-Detector/assets/61882182/4c09c42f-8297-4522-a44f-749a1b89e433
### Multiple cameras
https://github.com/GTruf/Driver-Drowsiness-Detector/assets/61882182/09ea8c27-c5ff-4f9b-a61d-9111b3ae7581
### Smart interaction with the camera
The application can handle turning off an active camera, no available cameras, and connecting a new camera.
https://github.com/GTruf/Driver-Drowsiness-Detector/assets/61882182/10683440-aeab-4d8f-aa15-a19f68f6010e
### Cross-platform
The application is cross-platform (Windows/Linux). For Linux, it was tested on Ubuntu 22.04.