Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 如何在三秒钟内检测到闭着的眼睛?_Python_Opencv - Fatal编程技术网

Python 如何在三秒钟内检测到闭着的眼睛?

Python 如何在三秒钟内检测到闭着的眼睛?,python,opencv,Python,Opencv,我发现了脸、眼睛、眼睛等部位。正常情况下,我可以看到脸、眼睛区域和两只眼睛。当我看到脸的时候,眼睛区域却看不到两只眼睛,那个时候检测到眼睛是闭着的。现在,我想检测眼睛何时闭上三秒。有人可以给我一个解决方案。我尝试使用time.sleep()函数,但它不起作用。它使视频流进程停止 cas_path = os.getcwd() eye_path = os.getcwd() two_eyes_path = os.getcwd() cas_path += "/haarcascade_frontalfa

我发现了脸、眼睛、眼睛等部位。正常情况下,我可以看到脸、眼睛区域和两只眼睛。当我看到脸的时候,眼睛区域却看不到两只眼睛,那个时候检测到眼睛是闭着的。现在,我想检测眼睛何时闭上三秒。有人可以给我一个解决方案。我尝试使用time.sleep()函数,但它不起作用。它使视频流进程停止

cas_path = os.getcwd()
eye_path = os.getcwd()
two_eyes_path = os.getcwd()

cas_path += "/haarcascade_frontalface_alt.xml"
eye_path += "/haarcascade_mcs_eyepair_big.xml"
two_eyes_path += "/haarcascade_eye.xml"


faceCascade = cv2.CascadeClassifier(cas_path)
eyesCascade = cv2.CascadeClassifier(eye_path)
twoeyesCascade = cv2.CascadeClassifier(two_eyes_path)

class VideoCamera(object):

    def __init__(self):

    self.status = "Sharing ?"
    self._image = np.zeros((100,200))
    self.video = cv2.VideoCapture(0)
    (self.video).set(3, 200)
    (self.video).set(4, 160)
    #success, self._image = self.video.read()
    # If you decide to use video.mp4, you must have this file in the folder
    # as the main.py.
    # self.video = cv2.VideoCapture('video.mp4')

def __del__(self):
    self.video.release()
def get_frame(self):
    global s
    s = ''
    global string
    string = ''
    success, image = self.video.read()
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.3,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE
    )


    count  = 0

    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (255, 255, 0), 2)          
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = image[y:y+h, x:x+w]
        eyes = eyesCascade.detectMultiScale(roi_gray)
        if eyes is not():
            for (ex,ey,ew,eh) in eyes:
                cv2.rectangle(roi_color,(ex -10 ,ey - 10),(ex+ew + 10,ey+eh + 10),(0,255,0),2)
                twoeyes = twoeyesCascade.detectMultiScale(roi_gray)
                firsttime = 1
                if twoeyes is not():
                    for (exx,eyy,eww,ehh) in twoeyes:
                        cv2.rectangle(roi_color,(exx-5 ,eyy -5  ),(exx+eww -5,eyy+ehh -5 ),(0,0, 255),2)


    ret, jpeg = cv2.imencode('.jpg', image)
    self.string = jpeg.tostring()
    self._image = image
    return jpeg.tostring()
def GetBw(self):
    image = self._image
    ret, jpeg = cv2.imencode('.jpg', image)
    self.string = jpeg.tostring()
    return jpeg.tostring()

您将需要为此特定应用程序使用计时器。sleep()基本上只是停止程序,它不跟踪时间。这应该适用于您想要的:

closed = False
timer = 0
if detect(eyes_closed) and not closed:
   timer = time.time()
   closed = True
else if closed:
    if time.time() - timer > 3000:
        print "Eyes have been closed for 3 seconds!"
else:
    closed = False
我在OpenCV中没有做太多的工作,所以我只是假设detect(eyes_closed)检测到一组闭着的眼睛,您必须自己更正。
如果检测到眼睛闭了3秒钟,将打印一条消息

问题是?你能帮我检测一下闭着的眼睛三秒钟吗?你试过什么?你的具体问题是什么?“请为我编码X!”只会给你带来下行票。这是我第一次使用stackoverflow。如果我的问题让您不高兴,我真的很抱歉。我已经尝试使用函数time.sleep(),但它会使进程视频流停止。这是我根据您的想法编写的代码。closed=False timer=0如果twoeyes不是():对于twoeyes中的(exx,eyy,eww,ehh):cv2.矩形(roi_颜色,(exx-5,eyy-5),(exx+eww-5,eyy+ehh-5),(0255255),2)elif twoeyes是()且未关闭:timer=time.time()打印计时器关闭=真elif未关闭():打印str(time.time()-timer)如果time.time()-timer>3000:print“眼睛已经闭了3秒!”否则:closed=False,但它在“elif closed is not()”中不工作: