Opencv网络摄像头摄像头检查一段时间后的变量状态

时间:2018-03-07 17:15:23

标签: python opencv webcam gesture detection

我编写了一个代码,用于检测网络摄像头中的人体拳头。我想要的是在检查里面有一个拳头后,程序将等待2秒钟。 2秒后,如果里面还有一个拳头,那么它会放一个文字“FIST” 这是我的代码:

import cv2
import numpy as np
from detect import detect_fist

import time

cap = cv2.VideoCapture(0)
isFist = 0

while (cap.isOpened()):

    ret, img = cap.read()
    img = cv2.flip(img, 1)
    cv2.rectangle(img, (50, 50), (150, 150), (0, 255, 0), 0)
    confirm = img[50:150, 50:150] # narrow the whole webcam to a box 

    isFist = detect_fist(confirm) # a function to detect fist inside that box

    if isFist:
        timeout = int(time.time()) + 2
        while 1:
            if int(time.time()) == int(timeout):
                cv2.putText(img, "Fist", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, 2)

                break

    cv2.imshow('Gesture', img)

    k = cv2.waitKey(10)
    if k == 27:
        break

我的问题是在检测到我的拳头后,相机显示屏缓慢转动,几乎冻结。我想要的是相机仍然正常工作,并在2秒后再次检查拳头。

我建议这是由于检查条件if int(time.time()) == int(timeout)将在网络摄像头的帧速率(这真的很快)之后执行,因为显示部分无法跟随。

有人想知道存档吗?

1 个答案:

答案 0 :(得分:0)

当检测到拳头时,您的代码卡在while循环中,这就是您将图像窗口视为“卡住”的原因。我建议使用bool来跟踪状态。我修改了你的代码以显示效果,虽然我没有调试过它。

<div id = "formBody">
    <form id="newForm">
        ...
    </form>
</div>