Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用dlib和opencv进行眨眼检测_Python 3.x_Opencv_Image Processing_Dlib - Fatal编程技术网

Python 3.x 使用dlib和opencv进行眨眼检测

Python 3.x 使用dlib和opencv进行眨眼检测,python-3.x,opencv,image-processing,dlib,Python 3.x,Opencv,Image Processing,Dlib,我从pyimagesearch获得了这段代码,并尝试运行它,但当我运行该文件时,出现了这些错误。谁能告诉我这里怎么了?我已经安装了所有需要的软件包和库。所有康达包装都是最新的。请查看“错误代码”部分,看看是否能找出此处的错误 # USAGE # python detect_blinks.py --shape-predictor shape_predictor_68_face_landmarks.dat --video blink_detection_demo.mp4

我从pyimagesearch获得了这段代码,并尝试运行它,但当我运行该文件时,出现了这些错误。谁能告诉我这里怎么了?我已经安装了所有需要的软件包和库。所有康达包装都是最新的。请查看“错误代码”部分,看看是否能找出此处的错误

    # 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 < 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 >= 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) & 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()
#用法
#python detect_blinks.py--形状预测器
形状预测器面部地标.dat--视频闪烁检测演示.mp4
#python detect_blinks.py--形状预测器
形状\u预测器\u 68\u面\u地标.dat
#导入必要的包
从scipy.spatial导入距离作为距离
从imutils.video导入文件VideoStream
从imutils.video导入视频流
从imutils导入面\u utils
将numpy作为np导入
导入argparse
导入imutils
导入时间
导入dlib
进口cv2
def眼宽比(眼):
#计算两组数据之间的欧几里德距离
#垂直眼地标(x,y)-坐标
A=距离欧几里德(眼睛[1],眼睛[5])
B=距离欧几里德(眼睛[2],眼睛[4])
#计算水平线之间的欧氏距离
#眼睛地标(x,y)-坐标
C=距离欧几里德(眼睛[0],眼睛[3])
#计算眼睛的纵横比
ear=(A+B)/(2.0*C)
#返回眼睛纵横比
回音耳
#构造参数并解析参数
ap=argparse.ArgumentParser()
ap.add_参数(“-p”,“--shape predictor”,required=True,
help=“面部地标预测器路径”)
ap.add_参数(“-v”,”--video),type=str,default=“”,
help=“输入视频文件的路径”)
args=vars(ap.parse_args())
#定义两个常数,一个用于表示眼睛纵横比
#闪烁,然后第二个常数表示连续闪烁的次数
#帧眼睛必须低于阈值
眼距阈值=0.3
眼睛连续帧=3
#初始化帧计数器和总闪烁次数
计数器=0
总数=0
#初始化dlib的人脸检测器(基于HOG),然后创建
#面部标志预测器
打印(“[INFO]正在加载面部地标预测器…”)
探测器=dlib.获取正面探测器()
predictor=dlib.shape\u predictor(args[“shape\u predictor”])
#抓取左右两侧面部标志的索引
#分别是右眼
(lStart,lEnd)=面部特征。面部标志物[“左眼”]
(rStart,rEnd)=面部特征。面部标志物[“右眼”]
#启动视频流线程
打印(“[INFO]正在启动视频流线程…”)
vs=FileVideoStream(args[“video”])。start()
fileStream=True
#vs=VideoStream(src=0).start()
#vs=VideoStream(usePiCamera=True).start()
#fileStream=False
时间。睡眠(1.0)
#循环播放视频流中的帧
尽管如此:
#如果这是一个文件视频流,那么我们需要检查
#缓冲区中还有更多要处理的帧吗
如果fileStream而非vs.more():
打破
#从线程视频文件流中抓取帧,调整大小
#并将其转换为灰度
#渠道)
frame=vs.read()
frame=imutils.resize(frame,width=450)
灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
#检测灰度帧中的面
rects=检测器(灰色,0)
#环面检测
对于矩形中的矩形:
#确定面部区域的面部地标,然后
#将面部地标(x,y)-坐标转换为NumPy
#排列
形状=预测器(灰色、矩形)
形状=面形状。形状到形状(形状)
#提取左眼和右眼坐标,然后使用
#用于计算双眼的眼睛纵横比的坐标
leftEye=形状[lStart:lEnd]
右眼=形状[rStart:rEnd]
左眼=眼睛与纵横比(左眼)
右眼=眼睛与纵横比(右眼)
#平均双眼的眼睛长宽比
ear=(左耳+右耳)/2.0
#计算左眼和右眼的凸包,然后
#想象每一只眼睛
leftEyeHull=cv2.convexHull(左眼)
右眼外壳=cv2.凸面外壳(右眼)
cv2.绘制轮廓(框架,[leftEyeHull],-1,(0,255,0,1)
cv2.图纸轮廓(框架,[rightEyeHull],-1,(0,255,0,1)
#检查眼睛纵横比是否低于眨眼
#阈值,如果是,则增加闪烁帧计数器
如果耳朵<眼睛>耳朵>脱粒:
计数器+=1
#否则,眼睛纵横比不低于眨眼
#门槛
其他:
#如果闭上眼睛的时间足够长
#然后增加闪烁的总次数
如果计数器>=眼睛连续帧:
总数+=1
#重置眼框计数器
计数器=0
#绘制帧上闪烁的总次数以及
#计算的帧的眼睛纵横比
putText(帧,“闪烁:{}).格式(总计),(10,30),
cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)
putText(框架,“EAR:{.2f}).格式(EAR),(300,30),
cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)
#显示框架
cv2.imshow(“帧”,帧)
key=cv2.waitKey(1)和0xFF
#如果按下'q'键,则断开循环
如果键==ord(“q”):
打破
#清理一下
cv2.destroyAllWindows()
vs.stop()
错误是

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 "<ipython-input-6-55db51806586>", line 1, in <module>
    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 <module>
    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
用法:detect_blinks.py[-h]-p SHAPE_预测器[-v VIDEO]
detect_blinks.py:错误:需要以下参数:-p/--shape-
预测器
发生异常,请使用%tb查看完整回溯。
系统出口:2
%结核病
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
runfile('C:/Users/Rayhan/Downloads/Compressed/blink detection/blink detection\u blinks.py',wdir='C:/Users/Rayhan/Downloads/Compressed/blink detection/blink detection')
文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercustomiz