time.sleep только для части кода внутри бесконечного цикла while - PullRequest
0 голосов
/ 30 мая 2018

Я работаю с кодом, который анализирует кадры из живого потока с помощью 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 должен захватить другой кадр и продолжить его.Работа.Я пробовал с time.sleep(30.0) внутри оператора if, но он блокирует цикл while, ожидающий 30 секунд.Есть ли способ использовать time.sleep в этом случае или другой метод, подходящий для моих нужд?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Почему бы просто не зафиксировать количество времени работы, а затем сохранить изображение, если оно превышает заданное количество времени ....

a = dt.now()
b = dt.now()
c = b - a
if c < x:
    do something
0 голосов
/ 30 мая 2018

вы могли бы сделать что-то вроде этого:

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
0 голосов
/ 30 мая 2018

Просто добавьте переменную для отслеживания вашего последнего времени сохранения:

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)
...