我编写了一个代码,用于检测网络摄像头中的人体拳头。我想要的是在检查里面有一个拳头后,程序将等待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)
将在网络摄像头的帧速率(这真的很快)之后执行,因为显示部分无法跟随。
有人想知道存档吗?
答案 0 :(得分:0)
当检测到拳头时,您的代码卡在while循环中,这就是您将图像窗口视为“卡住”的原因。我建议使用bool来跟踪状态。我修改了你的代码以显示效果,虽然我没有调试过它。
<div id = "formBody">
<form id="newForm">
...
</form>
</div>