【问题标题】:time.sleep for only a part of the code inside infinite while looptime.sleep 仅用于无限 while 循环内的一部分代码
【发布时间】:2018-11-09 15:15:45
【问题描述】:

我正在使用一个代码,该代码使用 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),但它会阻塞等待 30 秒通过的 while 循环。在这种情况下有没有办法使用time.sleep,或者其他适合我需要的方法?

提前致谢

【问题讨论】:

    标签: python python-3.x opencv time while-loop


    【解决方案1】:

    你可以这样做:

    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
    

    【讨论】:

    • if condition == True 很傻,&& 在 Python 中不是一个东西。你的意思是if condition and time.time() - last_grab > 30:(虽然我会提醒你在这里使用time而不是datetime是愚蠢的)
    • @AdamSmith 谢谢你的收获......我整个早上都在 awk 和 python 之间来回走动,把我的语言都搞混了。
    • 别担心,我一直都在做同样的事情。我删除了身份检查(condition is True 永远不会通过)
    【解决方案2】:

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

    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)
    

    【讨论】:

      【解决方案3】:

      如果超过给定的时间量,为什么不只捕获运行时间然后保存图像......

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-30
        • 2022-01-05
        • 2017-11-09
        • 2020-05-10
        • 1970-01-01
        • 2011-09-13
        • 2015-06-25
        • 2013-05-17
        相关资源
        最近更新 更多