Driver Drowsiness Detection

Driver Drowsiness Detection – IT and Computer Engineering Guide

1. Project Overview

Objective: Develop a system to detect driver drowsiness using a webcam and alert mechanisms to prevent accidents.
Scope: Utilize computer vision and deep learning techniques to analyze real-time video frames for signs of drowsiness.

2. Prerequisites

Knowledge: Basic understanding of Python programming, convolutional neural networks (CNNs), and OpenCV.
Tools: Python, TensorFlow/Keras, OpenCV, and NumPy.
Hardware: A webcam or camera module for capturing video.

3. Project Workflow

- Dataset Collection: Use labeled datasets with images of open and closed eyes, and yawning.

- Data Preprocessing: Resize, normalize, and augment the image data for training.

- Model Development: Build a CNN model to classify frames as drowsy or alert.

- Integration: Integrate the model with OpenCV for real-time video analysis.

- Alert System: Implement an alert mechanism to notify the driver when drowsiness is detected.

4. Technical Implementation

Step 1: Import Libraries


import cv2
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import time

Step 2: Load and Preprocess Data


# Load images and labels
data_dir = 'dataset/'
categories = ['Open_Eyes', 'Closed_Eyes']

data = []
for category in categories:
    path = os.path.join(data_dir, category)
    class_num = categories.index(category)
    for img in os.listdir(path):
        try:
            img_array = cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE)
            resized_img = cv2.resize(img_array, (64, 64))
            data.append([resized_img, class_num])
        except Exception as e:
            pass

# Prepare data
X, y = zip(*data)
X = np.array(X).reshape(-1, 64, 64, 1) / 255.0
y = np.array(y)

Step 3: Train the Model


# Build CNN model
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 1)),
    MaxPooling2D(2, 2),
    Conv2D(64, (3, 3), activation='relu'),
    MaxPooling2D(2, 2),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(2, activation='softmax')
])

# Compile model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Train model
model.fit(X, y, epochs=10, validation_split=0.2, batch_size=32)

Step 4: Real-Time Detection with OpenCV


# Load the trained model
model.load_weights('drowsiness_model.h5')

# Initialize webcam
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    resized_frame = cv2.resize(gray_frame, (64, 64)).reshape(1, 64, 64, 1) / 255.0
    prediction = model.predict(resized_frame)
    if np.argmax(prediction) == 1:
        cv2.putText(frame, "Drowsy", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
        print("Alert: Drowsiness Detected!")
    else:
        cv2.putText(frame, "Alert", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.imshow("Drowsiness Detection", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

5. Results and Insights

Evaluate the system's accuracy in detecting drowsiness and analyze its real-time performance. Document areas for improvement.

6. Challenges and Mitigation

Lighting Variations: Use robust preprocessing to handle changes in lighting conditions.
Real-Time Processing: Optimize the model and code for faster frame analysis.

7. Future Enhancements

Integrate additional features like head pose estimation or blinking rate for more robust detection.
Deploy the system on embedded devices like Raspberry Pi for portable use.

8. Conclusion

The Driver Drowsiness Detection system combines computer vision and deep learning to enhance road safety, demonstrating the potential of AI in real-time applications.