katkarrohit203 commited on
Commit
36103fb
·
verified ·
1 Parent(s): 3cd6984

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +104 -82
app.py CHANGED
@@ -1,82 +1,104 @@
1
- import cv2 as cv
2
- import numpy as np
3
- import time
4
- import pygame
5
- import streamlit as st
6
-
7
- classes = ['Closed', 'Open'] # Class labels for eyes only
8
-
9
- # Load face and eye cascade classifiers
10
- face_cascade = cv.CascadeClassifier("haarcascade files/haarcascade_frontalface_default.xml")
11
- eye_cascade = cv.CascadeClassifier("haarcascade files/haarcascade_eye.xml")
12
-
13
- # Initialize alarm
14
- pygame.mixer.init()
15
- pygame.mixer.music.load("alarm.wav")
16
-
17
- # Track eye closure duration
18
- closed_start_time = None
19
- alarm_triggered = False
20
-
21
- # Prepare the frame for eye detection
22
- def prepare_frame(frame):
23
- global closed_start_time, alarm_triggered
24
- gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # Convert to grayscale for better detection
25
- faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5)
26
- eye_status = 'Closed'
27
-
28
- for (x, y, w, h) in faces:
29
- face_roi = frame[y:y+h, x:x+w]
30
- roi_gray = gray_frame[y:y+h, x:x+w]
31
- eyes = eye_cascade.detectMultiScale(roi_gray, scaleFactor=1.1, minNeighbors=5)
32
-
33
- # If two or more eyes detected, classify as 'Open'
34
- if len(eyes) >= 2:
35
- eye_status = 'Open'
36
- if alarm_triggered:
37
- pygame.mixer.music.stop()
38
- alarm_triggered = False
39
- closed_start_time = None
40
- else:
41
- if closed_start_time is None:
42
- closed_start_time = time.time()
43
- elif time.time() - closed_start_time >= 3:
44
- if not alarm_triggered:
45
- pygame.mixer.music.play()
46
- alarm_triggered = True
47
-
48
- # Draw a rectangle around the entire face
49
- cv.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
50
- break # Stop after detecting the first face to avoid multiple rectangles
51
-
52
- cv.putText(frame, eye_status, (20, 50), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
53
- return frame, eye_status
54
-
55
- # Streamlit interface
56
- st.title("Real-time Eye Detection and Drowsiness Alert")
57
- st.markdown("**Close your eyes for 3 seconds to trigger the alarm.**")
58
-
59
- FRAME_WINDOW = st.image([])
60
- run = st.button("Start Detection")
61
- stop = st.button("Stop Detection")
62
-
63
- cap = cv.VideoCapture(0)
64
-
65
- while run:
66
- ret, frame = cap.read()
67
- if not ret:
68
- st.warning("Failed to access webcam.")
69
- break
70
-
71
- frame = cv.flip(frame, 1) # Flip frame horizontally
72
- frame, eye_status = prepare_frame(frame)
73
- frame = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
74
- FRAME_WINDOW.image(frame)
75
-
76
- if stop:
77
- cap.release()
78
- cv.destroyAllWindows()
79
- break
80
-
81
- cap.release()
82
- cv.destroyAllWindows()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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('drowiness_new6.h5')
14
+
15
+ # Define labels
16
+ labels = ['Closed', 'Open']
17
+
18
+ # Load face and eye cascade classifiers
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
+ st.title("Real-time Eye Detection and Drowsiness Alert")
23
+ st.markdown("**Close your eyes for 3 seconds to trigger the alarm.**")
24
+
25
+
26
+ # Initialize webcam
27
+ cam = cv.VideoCapture(0)
28
+ 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
39
+ frame = frame.astype("float") / 255.0 # Normalize
40
+ frame = img_to_array(frame)
41
+ frame = np.expand_dims(frame, axis=0)
42
+ return frame
43
+
44
+ running = False
45
+
46
+ if run:
47
+ running = True
48
+
49
+ while running:
50
+ ret, frame = cam.read()
51
+ if not ret:
52
+ st.warning("Failed to access webcam.")
53
+ break
54
+
55
+ frame = cv.flip(frame, 1)
56
+ gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # Convert to grayscale
57
+
58
+ # Detect faces
59
+ faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5)
60
+ eye_status = 'Closed'
61
+
62
+ for (x, y, w, h) in faces:
63
+ face_roi = frame[y:y+h, x:x+w]
64
+ roi_gray = gray_frame[y:y+h, x:x+w]
65
+ eyes = eye_cascade.detectMultiScale(roi_gray, scaleFactor=1.1, minNeighbors=5)
66
+
67
+ # Draw rectangle around face
68
+ cv.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
69
+
70
+ # Draw ellipses around detected eyes
71
+ if len(eyes) > 0:
72
+ eye_status = 'Open'
73
+ for (ex, ey, ew, eh) in eyes:
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
+ drowsiness_start_time = None
78
+ if alarm_triggered:
79
+ pygame.mixer.music.stop()
80
+ alarm_triggered = False
81
+ else:
82
+ if drowsiness_start_time is None:
83
+ drowsiness_start_time = time.time()
84
+ elif time.time() - drowsiness_start_time >= 2:
85
+ if not alarm_triggered:
86
+ pygame.mixer.music.play()
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
+
92
+ frame = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
93
+ FRAME_WINDOW.image(frame)
94
+
95
+ # Stop condition
96
+ if stop:
97
+ running = False
98
+ cam.release()
99
+ cv.destroyAllWindows()
100
+ pygame.mixer.quit()
101
+ break
102
+
103
+ cam.release()
104
+ cv.destroyAllWindows()