diff options
Diffstat (limited to 'function-specific-programs/ear.py')
-rw-r--r-- | function-specific-programs/ear.py | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/function-specific-programs/ear.py b/function-specific-programs/ear.py deleted file mode 100644 index a40e065..0000000 --- a/function-specific-programs/ear.py +++ /dev/null @@ -1,117 +0,0 @@ -# Using Eye aspect ratio -from scipy.spatial import distance as dist -from imutils.video import VideoStream -from imutils import face_utils -from threading import Thread -import numpy as np -import playsound -import argparse -import imutils -import time -import dlib -import cv2 - -def sound_alarm(): - print('You Sleep You Lose') - -def eye_aspect_ratio(eye): - # Computes the euclidean distances between the two sets of eyes - A = dist.euclidean(eye[1], eye[5]) - B = dist.euclidean(eye[2], eye[4]) - - # compute the euclidean distance between the horizontal - # eye landmark (x, y)-coordinates - C = dist.euclidean(eye[0], eye[3]) - - # compute the eye aspect ratio - ear = (A + B) / (2.0 * C) - # return the eye aspect ratio - return ear - -shape_predictor = "../files/shape_predictor_68_face_landmarks.dat" - - -EYE_AR_THRESH = 0.2 # If the EAR goes < this for 48 frames, it is counted as drowsiness -EYE_AR_CONSEC_FRAMES = 48 - -COUNTER = 0 -ALERT = False - -# initialize dlib's face detector (HOG-based) and then create -# the facial landmark predictor -print("Initialising Facial Landmark Predictor...") -detector = dlib.get_frontal_face_detector() -predictor = dlib.shape_predictor(shape_predictor) - -(lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] -(rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"] - -print("Starting Video Stream...") -vs = VideoStream(src=0).start() -time.sleep(1.0) - -while True: - frame = vs.read() - frame = imutils.resize(frame, width=450) - gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) - - rects = detector(gray, 0) - for rect in rects: - shape = predictor(gray, rect) - shape = face_utils.shape_to_np(shape) - - # extract the left and right eye coordinates, then use the - # coordinates to compute the eye aspect ratio for both eyes - leftEye = shape[lStart:lEnd] - rightEye = shape[rStart:rEnd] - leftEAR = eye_aspect_ratio(leftEye) - rightEAR = eye_aspect_ratio(rightEye) - - # average the eye aspect ratio together for both eyes - ear = (leftEAR + rightEAR) / 2.0 - # compute the convex hull for the left and right eye, then - # visualize each of the eyes - leftEyeHull = cv2.convexHull(leftEye) - rightEyeHull = cv2.convexHull(rightEye) - cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) - cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) - # check to see if the eye aspect ratio is below the blink - # threshold, and if so, increment the blink frame counter - if ear < EYE_AR_THRESH: - COUNTER += 1 - - # if the eyes were closed for a sufficient number of - # then sound the alarm - if COUNTER >= EYE_AR_CONSEC_FRAMES: - # if the alarm is not on, turn it on - if not ALARM_ON: - ALARM_ON = True - - # draw an alarm on the frame - cv2.putText(frame, "Sleepiness Detected!", (10, 30), - cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) - print("Sleepiness Detected!") - print("\a");print("\a");print("\a");print("\a");print("\a") - print("\a");print("\a");print("\a");print("\a");print("\a") - print("\a");print("\a");print("\a");print("\a");print("\a") - - - - else: - COUNTER = 0 - ALARM_ON = False - - cv2.putText(frame, "Ratio: {:.2f}".format(ear), (300, 30), - cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) - - # show the frame - cv2.imshow("Frame", frame) - key = cv2.waitKey(1) & 0xFF - - # if the `q` key was pressed, break from the loop - if key == ord("q"): - break - -# do a bit of cleanup -cv2.destroyAllWindows() -vs.stop()
\ No newline at end of file |