繁体   English   中英

time.sleep在无限while循环内仅一部分代码

[英]time.sleep for only a part of the code inside infinite while loop

我正在使用通过OpenCV分析实时流中的帧的代码,如果满足条件,则将当前帧保存到文件中。

用于逐帧分析视频的无限循环如下所示:

while True:
  ret,frame = stream.read()
  if conditionisMet :
     pil_image = Image.fromarray(frame)
     pil_image.save("/path/to/folder/image.jpg")
  cv2.imshow("LiveStream", frame)

我要补充的是,如果再次过快地满足条件(20-30秒),则不必保存图像,而while循环必须获取另一帧并继续其工作。 我已经尝试在if语句中使用time.sleep(30.0) ,但是它阻塞了while循环,等待30秒过去。 在这种情况下,是否可以使用time.sleep或其他适合我需要的方法?

提前致谢

您可以执行以下操作:

last_grab=time.time()-30  # this to get things started
while True:
    if condition and time.time()-last_grab > 30:
        last_grab=time.time()
        # Do things here
    else:
        continue

只需添加一个变量来跟踪您的上次保存时间:

last_save_time = time.time()

while True:
  ret,frame = stream.read()

  if conditionisMet and time.time() - last_save_time() > 20:
     pil_image = Image.fromarray(frame)
     pil_image.save("/path/to/folder/image.jpg")

     # update last save time
     last_save_time = time.time()

  cv2.imshow("LiveStream", frame)

为什么不只是捕获运行时间,如果大于给定时间,则保存图像。

a = dt.now()
b = dt.now()
c = b - a
if c < x:
    do something

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM