Python:使用time.sleep与opencv一起使用而不停止视频片段

ecbunoof  于 2022-10-30  发布在  Python
关注(0)|答案(3)|浏览(303)

我使用opencv来检测手势(在这个例子中,当我抬起食指时),当手势发生时,它会打印“hi”,然后我使用time.sleep暂停打印1秒,因为它会打印到我放下食指为止,但是time.sleep会暂停整个画面,所以如果我睡5秒,画面将不会运行,直到这5秒过去。
我能做些什么来利用这段时间呢?睡觉时不要暂停录像

while True:
  #all the opencv initial stuff
  #mediapipe functions for the hand detection

  if INDEX_UP:
     print("hi")
     time.sleep(2)

  cv2.imshow("Frame", frame)
  if cv2.waitKey(1) & 0xFF == 27: break

我试图在while循环中使用time.sleep,但time.sleep会暂停视频,直到time.sleep结束。

xxls0lw8

xxls0lw81#

我尝试使用2个单独的线程来完成while循环,另一个线程用于sleep,但它没有睡觉。

def sleep():
  time.sleep(2)

def main_loop():
  while True:
  #all the opencv initial stuff
  #mediapipe functions for the hand detection

  if INDEX_UP:
     print("hi")
     th.Thread(target=sleep).start()

  cv2.imshow("Frame", frame)
  if cv2.waitKey(1) & 0xFF == 27: break

th.Thread(target=main_loop).start()
niwlg2el

niwlg2el2#

当您注意到食指抬起时,获取系统时间,加上2秒,并将其保存在名为pauseEndTime的变量中。
现在,在你的主循环中,如果你想在暂停期间避免做一些事情,用一个测试来围绕它:

if currentTime > pauseEndTime:
   ...
   do stuff
   ...

如果您想在暂停期间继续采集,只需运行采集而不进行if检查。

jdgnovmf

jdgnovmf3#

time.sleep()将在指定的时间内阻塞线程执行。Nick Bastin在answer中对此进行了描述,您也可以找到有用的示例。

相关问题