簡體   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