Drowsiness Detection using Python OpenCV


In today's fast−paced world, road accidents due to driver drowsiness have become a major problem. The danger of accidents caused by drowsy driving can be reduced using modern technologies, including drowsiness detection using Python and OpenCV. When paired with OpenCV, a strong computer vision package, Python, a versatile programming language, provides an effective method for detecting tiredness in drivers. Python OpenCV enables the development of a trustworthy system that can notify drivers by monitoring facial features and identifying indicators of tiredness, such as eye closures or head motions, thus preventing accidents and ensuring road safety.

In this article, we will look in depth at sleepiness detection using Python OpenCV. We'll look into methods for detecting eye closures and assessing blinking frequency. In addition, we will go over how to set up an alarm system to notify drivers as soon as drowsiness is identified.

Understanding Drowsiness Detection

Monitoring the driver's facial expressions for signs of weariness, such as eye closing or head motions, is a crucial part of drowsiness detection. This procedure is essential for guaranteeing driver security and averting any mishaps. A reliable and effective framework for developing sleepiness detection systems is provided by Python and OpenCV.

Python is an excellent choice for jobs involving image processing and computer vision since it offers a large variety of features and libraries. Python is enhanced by the complete tools and algorithms provided by OpenCV, a potent computer vision library, for the analysis and processing of visual input.

Developers may quickly access and modify video feeds from cameras or webcams by utilizing Python and OpenCV, enabling real−time surveillance of the driver's facial features. This makes it possible to spot tiny changes in head movements or eye closure that signify sleepiness.

Developers can train classifiers to precisely recognize particular facial traits, such as closed eyes, using OpenCV's sophisticated image processing methods, such as Haar cascades. The sleepiness detection system can help the driver stay aware and prevent potential accidents by detecting and analyzing these aspects in real−time and sending timely alerts to them.

Detecting Eye Closures

Identifying eye closures is the initial step in detecting drowsiness. To accomplish this objective, OpenCV provides a number of image−processing algorithms. Haar cascades, for example, are capable of recognizing objects in photos or movies. We can utilize Haar cascades to recognize eyes in particular.

We can develop a classifier that can correctly detect eyeballs in an image by training the Haar cascade with positive and negative examples of eyes. Once the eyes are identified, we may keep a watch on them to see if they are open or closed. A motorist is drowsy if both eyes are closed for a predetermined amount of time.

Example

import cv2
import numpy as np

# Load the pre-trained Haar cascade classifier for eye detection
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# Capture video feed from the webcam or external camera
cap = cv2.VideoCapture(0)

while True:
    # Read the current frame
    ret, frame = cap.read()
    
    # Convert the frame to grayscale for eye detection
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # Detect eyes in the grayscale frame
    eyes = eye_cascade.detectMultiScale(gray, 1.3, 5)
    
    for (x, y, w, h) in eyes:
        # Draw rectangles around the detected eyes
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    # Display the frame with eye rectangles
    cv2.imshow('Drowsiness Detection', frame)
    
    # If 'q' is pushed, the loop will end.
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the video recording, then shut the window.
cap.release()
cv2.destroyAllWindows()

Measuring Blinking Frequency

Monitoring the frequency of eye blinking is another important part of detecting tiredness. We can identify drowsy patterns by analyzing the time delay between consecutive blinks. We can use OpenCV to track eye movements and correctly measure the time between blinks.

Example

import cv2
import time

# Variables to track blinking frequency
blink_counter = 0
blink_start_time = None

# Load the pre-trained Haar cascade classifier for eye detection
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# Capture video feed from the webcam or external camera
cap = cv2.VideoCapture(0)

while True:
    # Read the current frame
    ret, frame = cap.read()
    
    # Convert the frame to grayscale for eye detection
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # Detect eyes in the grayscale frame
    eyes = eye_cascade.detectMultiScale(gray, 1.3, 5)
    
    for (x, y, w, h) in eyes:
        # Draw rectangles around the detected eyes
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    # Measure the time duration between consecutive blinks
    if len(eyes) == 0:
        if blink_start_time is None:
            blink_start_time = time.time()
        else:
            if time.time() - blink_start_time > 0.3:
                blink_counter += 1
                blink_start_time = None
    else:
        blink_start_time = None
    
    # Display the frame with eye rectangles and blinking frequency
    cv2.putText(frame, f"Blinks: {blink_counter}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    cv2.imshow('Drowsiness Detection', frame)
    
    # If 'q' is pushed, the loop will end.
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the video recording, then shut the window.
cap.release()
cv2.destroyAllWindows()

Alerting the Driver

When drowsiness is identified, it is critical to immediately inform the driver in order to avoid potential accidents. Python has numerous alerting techniques, such as sound alarms, vibrating seats, and visual notifications. When the system detects indicators of drowsiness, these notifications can be triggered automatically.

Example

import cv2
import time
import playsound

# Variables to track blinking frequency
blink_counter = 0
blink_start_time = None

# Load the pre-trained Haar cascade classifier for eye detection
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# Capture video feed from the webcam or external camera
cap = cv2.VideoCapture(0)

# Alert sound file
alert_sound = 'alert.wav'

while True:
    # Read the current frame
    ret, frame = cap.read()
    
    # Convert the frame to grayscale for eye detection
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # Detect eyes in the grayscale frame
    eyes = eye_cascade.detectMultiScale(gray, 1.3, 5)
    
    for (x, y, w, h) in eyes:
        # Draw rectangles around the detected eyes
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    # Measure the time duration between consecutive blinks
    if len(eyes) == 0:
        if blink_start_time is None:
            blink_start_time = time.time()
        else:
            if time.time() - blink_start_time > 0.3:
                blink_counter += 1
                blink_start_time = None
    else:
        blink_start_time = None
    
    # In case of drowsiness, inform the driver.
    if blink_counter >= 10:
        playsound.playsound(alert_sound)
        blink_counter = 0
    
    # Display the frame with eye rectangles and blinking frequency
    cv2.putText(frame, f"Blinks: {blink_counter}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    cv2.imshow('Drowsiness Detection', frame)
    
    # If 'q' is pushed, the loop will end.
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the video recording, then shut the window.
cap.release()
cv2.destroyAllWindows()

Conclusion

In the area of driver safety, Python OpenCV is a useful tool for sleepiness detection. Developers may build reliable algorithms to monitor facial features and find sleepiness indicators, such as closed eyes, by utilizing the capabilities of computer vision and image processing capabilities. When eyeballs are detected using Haar cascades, closed eyes—a crucial sign of sleepiness—can be accurately identified. Furthermore, counting the number of times a light blinks makes it easier to spot trends and assess the driver's level of attentiveness. Python OpenCV provides prompt action by integrating alarm mechanisms like sound alerts or visual messages, potentially reducing accidents brought on by driver inattention. This technology will continue to be crucial in improving road safety and saving lives as it develops further.

Updated on: 20-Jul-2023

514 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements