Spaces:
Sleeping
Sleeping
""" | |
app.py | |
""" | |
import os | |
import sys | |
from pathlib import Path | |
import gradio as gr | |
import numpy as np | |
import mediapipe as mp | |
import tensorflow as tf | |
import cv2 | |
# Add the path to the model directory | |
sys.path.append("model/data") | |
from mp_process import process_mp_img | |
model = tf.keras.models.load_model("model/training/saved_models/en_model_v0.h5") | |
def preprocess_frame(frame): | |
""" | |
Preprocess the frame to be compatible with the model | |
""" | |
frame = cv2.resize(frame, (224,224), interpolation = cv2.INTER_AREA) | |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
frame = frame / 255.0 | |
return np.expand_dims(frame, axis=0) | |
def detect_drowsiness(frame): | |
""" | |
returns features and/or processed image | |
""" | |
annotated_img, eye_feature, mouth_feature, mp_drowsy = process_mp_img(frame) | |
# Preprocess the frame | |
preprocessed_frame = preprocess_frame(frame) | |
# Make predictions using the model | |
prediction = model.predict(preprocessed_frame) | |
# Threshold the prediction to classify drowsiness | |
model_drowsy = prediction[0][0] >= 0.5 | |
# Return the result | |
return annotated_img, "Drowsy" if not model_drowsy else "Awake", "Drowsy" if mp_drowsy else "Awake",eye_feature, mouth_feature | |
# Define the input component as an Image component | |
input_image = gr.Image(shape=(480, 640), source="webcam", label="live feed") | |
# Define the output components as an Image and a Label component | |
output_image = gr.Image(shape=(480,640),label="Drowsiness Detection") | |
output_model = gr.Label(label="Drowsiness Status - en_model_v0.h5") | |
output_mp = gr.Label(label="Drowsiness Status - MediaPipe") | |
output_eye = gr.Textbox(label="Eye Aspect Ratio") | |
output_mouth = gr.Textbox(label="Mouth Aspect Ratio") | |
iface = gr.Interface( | |
fn=detect_drowsiness, | |
inputs=input_image, | |
title="antisomnus - driver drowsiness detection", | |
outputs=[output_image,output_model, output_mp, output_eye, output_mouth], | |
capture_session=True, | |
) | |
# Launch the Gradio interface | |
iface.launch() | |