45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
import cv2
|
|
from playsound import playsound
|
|
|
|
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
|
|
eyes_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')
|
|
video = cv2.VideoCapture("video.avi")
|
|
frame_counter = 0
|
|
video_frames_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
|
|
video_fps = video.get(cv2.CAP_PROP_FPS)
|
|
thresh_hold = 2
|
|
eyes_closed_time = 0
|
|
eyes_closed_time_sec = 0
|
|
|
|
while True:
|
|
ret, frame = video.read()
|
|
faces = face_cascade.detectMultiScale(frame, 1.1, 5)
|
|
frame_counter += 1
|
|
|
|
for (x, y, w, h) in faces:
|
|
eyes_color = frame[y:y + h, x:x + w]
|
|
eyes = eyes_cascade.detectMultiScale(eyes_color, 1.1, 5, minSize=(50, 50))
|
|
if len(eyes) < 2:
|
|
eyes_closed_time += 1
|
|
eyes_closed_time_sec = eyes_closed_time / video_fps
|
|
if (eyes_closed_time_sec) >= thresh_hold:
|
|
eyes_closed_time = 0
|
|
playsound('wakeup.mp3', False)
|
|
print('You fall asleep.')
|
|
else:
|
|
eyes_closed_time = 0
|
|
eyes_closed_time_sec = 0
|
|
|
|
cv2.rectangle(frame, (5, 5), (215, 80), (0, 0, 0), -1)
|
|
cv2.rectangle(frame, (10, 10), (210, 50), (255, 255, 255), -1)
|
|
cv2.rectangle(frame, (10, 10), (int(eyes_closed_time_sec / thresh_hold * 200) + 10, 50), (0, 0, 255), -1)
|
|
cv2.putText(frame, "Somnolence", (10, 70), cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255))
|
|
cv2.imshow('Drive control', frame)
|
|
if frame_counter == video_frames_count:
|
|
frame_counter = 0
|
|
video.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
|
if cv2.waitKey(25) & 0xFF == ord('q'):
|
|
break
|
|
|
|
video.release()
|
|
cv2.destroyAllWindows() |