Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,16 +1,14 @@
|
|
1 |
import streamlit as st
|
2 |
import numpy as np
|
3 |
import cv2 as cv
|
|
|
4 |
from tensorflow.keras.preprocessing.image import img_to_array
|
5 |
import pygame
|
|
|
6 |
import time
|
7 |
|
8 |
-
# Initialize alarm
|
9 |
-
pygame.mixer.init()
|
10 |
-
pygame.mixer.music.load("alarm.wav")
|
11 |
-
|
12 |
# Load the pre-trained CNN model for drowsiness detection
|
13 |
-
#model = load_model('
|
14 |
|
15 |
# Define labels
|
16 |
labels = ['Closed', 'Open']
|
@@ -19,9 +17,18 @@ labels = ['Closed', 'Open']
|
|
19 |
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_frontalface_default.xml")
|
20 |
eye_cascade = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_eye.xml")
|
21 |
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
|
|
25 |
|
26 |
# Initialize webcam
|
27 |
cam = cv.VideoCapture(0)
|
@@ -29,10 +36,6 @@ FRAME_WINDOW = st.image([])
|
|
29 |
run = st.button("Start")
|
30 |
stop = st.button("Stop")
|
31 |
|
32 |
-
# Variables to track eye closure
|
33 |
-
drowsiness_start_time = None
|
34 |
-
alarm_triggered = False
|
35 |
-
|
36 |
# Function to preprocess the frame for model input
|
37 |
def preprocess_frame(frame):
|
38 |
frame = cv.resize(frame, (24, 24)) # Resize to match model input shape
|
@@ -42,6 +45,8 @@ def preprocess_frame(frame):
|
|
42 |
return frame
|
43 |
|
44 |
running = False
|
|
|
|
|
45 |
|
46 |
if run:
|
47 |
running = True
|
@@ -74,18 +79,21 @@ while running:
|
|
74 |
center = (x + ex + ew // 2, y + ey + eh // 2)
|
75 |
axes = (ew // 2, eh // 2)
|
76 |
cv.ellipse(frame, center, axes, 0, 0, 360, (0, 255, 0), 2)
|
77 |
-
|
78 |
if alarm_triggered:
|
79 |
pygame.mixer.music.stop()
|
80 |
alarm_triggered = False
|
81 |
else:
|
82 |
-
if
|
83 |
-
|
84 |
-
elif time.time() -
|
85 |
if not alarm_triggered:
|
86 |
-
|
|
|
|
|
|
|
87 |
alarm_triggered = True
|
88 |
-
|
89 |
# Display eye status text
|
90 |
cv.putText(frame, f'Eyes: {eye_status}', (30, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
|
91 |
|
@@ -97,7 +105,6 @@ while running:
|
|
97 |
running = False
|
98 |
cam.release()
|
99 |
cv.destroyAllWindows()
|
100 |
-
pygame.mixer.quit()
|
101 |
break
|
102 |
|
103 |
cam.release()
|
|
|
1 |
import streamlit as st
|
2 |
import numpy as np
|
3 |
import cv2 as cv
|
4 |
+
from tensorflow.keras.models import load_model
|
5 |
from tensorflow.keras.preprocessing.image import img_to_array
|
6 |
import pygame
|
7 |
+
import os
|
8 |
import time
|
9 |
|
|
|
|
|
|
|
|
|
10 |
# Load the pre-trained CNN model for drowsiness detection
|
11 |
+
#model = load_model('drowsiness.h5')
|
12 |
|
13 |
# Define labels
|
14 |
labels = ['Closed', 'Open']
|
|
|
17 |
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_frontalface_default.xml")
|
18 |
eye_cascade = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_eye.xml")
|
19 |
|
20 |
+
# Function to initialize audio
|
21 |
+
|
22 |
+
def initialize_audio():
|
23 |
+
try:
|
24 |
+
if not os.environ.get("DISPLAY"):
|
25 |
+
raise RuntimeError("No display found. Skipping audio initialization.")
|
26 |
+
pygame.mixer.init()
|
27 |
+
pygame.mixer.music.load("alarm.wav")
|
28 |
+
except Exception as e:
|
29 |
+
print(f"Audio initialization failed: {e}")
|
30 |
|
31 |
+
initialize_audio()
|
32 |
|
33 |
# Initialize webcam
|
34 |
cam = cv.VideoCapture(0)
|
|
|
36 |
run = st.button("Start")
|
37 |
stop = st.button("Stop")
|
38 |
|
|
|
|
|
|
|
|
|
39 |
# Function to preprocess the frame for model input
|
40 |
def preprocess_frame(frame):
|
41 |
frame = cv.resize(frame, (24, 24)) # Resize to match model input shape
|
|
|
45 |
return frame
|
46 |
|
47 |
running = False
|
48 |
+
closed_start_time = None
|
49 |
+
alarm_triggered = False
|
50 |
|
51 |
if run:
|
52 |
running = True
|
|
|
79 |
center = (x + ex + ew // 2, y + ey + eh // 2)
|
80 |
axes = (ew // 2, eh // 2)
|
81 |
cv.ellipse(frame, center, axes, 0, 0, 360, (0, 255, 0), 2)
|
82 |
+
closed_start_time = None
|
83 |
if alarm_triggered:
|
84 |
pygame.mixer.music.stop()
|
85 |
alarm_triggered = False
|
86 |
else:
|
87 |
+
if closed_start_time is None:
|
88 |
+
closed_start_time = time.time()
|
89 |
+
elif time.time() - closed_start_time >= 3:
|
90 |
if not alarm_triggered:
|
91 |
+
try:
|
92 |
+
pygame.mixer.music.play()
|
93 |
+
except Exception as e:
|
94 |
+
print("Alarm triggered, but no audio device found.")
|
95 |
alarm_triggered = True
|
96 |
+
|
97 |
# Display eye status text
|
98 |
cv.putText(frame, f'Eyes: {eye_status}', (30, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
|
99 |
|
|
|
105 |
running = False
|
106 |
cam.release()
|
107 |
cv.destroyAllWindows()
|
|
|
108 |
break
|
109 |
|
110 |
cam.release()
|