title: Blink Detection using dlib and opencv
body: <p>I have gotten this code from pyimagesearch and tried to run it but when i run the file i get these errors. Can anyone please tell me what is wrong here? I have installed all the needed packages and libraries. All conda packages are up to date. Please look in to the error codes section and have a look if you can figure out what is wrong here.</p>
  
  <pre><code>    # USAGE
      # python detect_blinks.py --shape-predictor 
      shape_predictor_68_face_landmarks.dat --video blink_detection_demo.mp4
      # python detect_blinks.py --shape-predictor 
        shape_predictor_68_face_landmarks.dat
  
  # import the necessary packages
  from scipy.spatial import distance as dist
  from imutils.video import FileVideoStream
  from imutils.video import VideoStream
  from imutils import face_utils
  import numpy as np
  import argparse
  import imutils
  import time
  import dlib
  import cv2
  
  def eye_aspect_ratio(eye):
      # compute the euclidean distances between the two sets of
      # vertical eye landmarks (x, y)-coordinates
      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
  
  # construct the argument parse and parse the arguments
  ap = argparse.ArgumentParser()
  ap.add_argument("-p", "--shape-predictor", required=True,
      help="path to facial landmark predictor")
  ap.add_argument("-v", "--video", type=str, default="",
      help="path to input video file")
  args = vars(ap.parse_args())
  
  # define two constants, one for the eye aspect ratio to indicate
  # blink and then a second constant for the number of consecutive
  # frames the eye must be below the threshold
  EYE_AR_THRESH = 0.3
  EYE_AR_CONSEC_FRAMES = 3
  
  # initialize the frame counters and the total number of blinks
  COUNTER = 0
  TOTAL = 0
  
  # initialize dlib's face detector (HOG-based) and then create
  # the facial landmark predictor
  print("[INFO] loading facial landmark predictor...")
  detector = dlib.get_frontal_face_detector()
  predictor = dlib.shape_predictor(args["shape_predictor"])
  
  # grab the indexes of the facial landmarks for the left and
  # right eye, respectively
  (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]
  (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]
  
  # start the video stream thread
  print("[INFO] starting video stream thread...")
  vs = FileVideoStream(args["video"]).start()
  fileStream = True
  # vs = VideoStream(src=0).start()
  # vs = VideoStream(usePiCamera=True).start()
  # fileStream = False
  time.sleep(1.0)
  
  # loop over frames from the video stream
  while True:
      # if this is a file video stream, then we need to check if
      # there any more frames left in the buffer to process
      if fileStream and not vs.more():
          break
  
      # grab the frame from the threaded video file stream, resize
      # it, and convert it to grayscale
      # channels)
      frame = vs.read()
      frame = imutils.resize(frame, width=450)
      gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  
      # detect faces in the grayscale frame
      rects = detector(gray, 0)
  
      # loop over the face detections
      for rect in rects:
          # determine the facial landmarks for the face region, then
          # convert the facial landmark (x, y)-coordinates to a NumPy
          # array
          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 &lt; EYE_AR_THRESH:
              COUNTER += 1
  
          # otherwise, the eye aspect ratio is not below the blink
          # threshold
          else:
              # if the eyes were closed for a sufficient number of
              # then increment the total number of blinks
              if COUNTER &gt;= EYE_AR_CONSEC_FRAMES:
                  TOTAL += 1
  
              # reset the eye frame counter
              COUNTER = 0
  
          # draw the total number of blinks on the frame along with
          # the computed eye aspect ratio for the frame
          cv2.putText(frame, "Blinks: {}".format(TOTAL), (10, 30),
              cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
          cv2.putText(frame, "EAR: {:.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) &amp; 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()
  </code></pre>
  
  <p>the errors are </p>
  
  <pre><code>usage: detect_blinks.py [-h] -p SHAPE_PREDICTOR [-v VIDEO]
  detect_blinks.py: error: the following arguments are required: -p/--shape- 
     predictor
  An exception has occurred, use %tb to see the full traceback.
  
  SystemExit: 2
  
  
  
  
  %tb
  Traceback (most recent call last):
  
    File "&lt;ipython-input-6-55db51806586&gt;", line 1, in &lt;module&gt;
      runfile('C:/Users/Rayhan/Downloads/Compressed/blink-detection/blink-detection/detect_blinks.py', wdir='C:/Users/Rayhan/Downloads/Compressed/blink-detection/blink-detection')
  
    File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
      execfile(filename, namespace)
  
    File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
      exec(compile(f.read(), filename, 'exec'), namespace)
  
    File "C:/Users/Rayhan/Downloads/Compressed/blink-detection/blink-detection/detect_blinks.py", line 39, in &lt;module&gt;
      args = vars(ap.parse_args())
  
    File "C:\ProgramData\Anaconda3\lib\argparse.py", line 1734, in parse_args
      args, argv = self.parse_known_args(args, namespace)
  
    File "C:\ProgramData\Anaconda3\lib\argparse.py", line 1766, in parse_known_args
      namespace, args = self._parse_known_args(args, namespace)
  
    File "C:\ProgramData\Anaconda3\lib\argparse.py", line 2001, in _parse_known_args
      ', '.join(required_actions))
  
    File "C:\ProgramData\Anaconda3\lib\argparse.py", line 2393, in error
      self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
  
    File "C:\ProgramData\Anaconda3\lib\argparse.py", line 2380, in exit
      _sys.exit(status)
  
  SystemExit: 2
  </code></pre>