Я пытаюсь прочитать кадры, используя imageio
API.У меня есть reader
как объект, который я получил, используя imageio.get_reader(video_path,"ffmpeg")
.У меня есть следующая функция чтения кадров:
def read_frames(reader, frame_q, use_webcam):
if use_webcam:
time.sleep(15)
frame_cnt = 0
while True:
#if frame_cnt % 5 == 0:
# ret, frame = reader.read()
# cur_img = frame[:,:,::-1]
# frame_q.put(cur_img)
#else:
# ret, frame = reader.read()
ret, frame = reader.read()
cur_img = frame[:,:,::-1] # bgr to rgb from opencv reader
frame_q.put(cur_img)
if frame_q.qsize() > 100:
time.sleep(1)
else:
time.sleep(DELAY/1000.)
#print(cur_img.shape)
else:
#for cur_img in reader: # this is imageio reader, it uses rgb
nframes = reader.get_length() **#getting error here**
# if nframes == float('inf') or nframes ==float('-inf'):
# return float("nan")
# return int(nframes)
for ii in range(nframes):
while frame_q.qsize() > 500: # so that we dont use huge amounts of memory
time.sleep(1)
cur_img = reader.get_next_data()
frame_q.put(cur_img)
#shape = cur_img.shape
#noisy_img = np.uint8(cur_img.astype(np.float) + np.random.randn(*shape) * 20)
#frame_q.put(noisy_img)
if ii % 100 == 0:
print("%i / %i frames in queue" % (ii, nframes))
print("All %i frames in queue" % (nframes))
Traceback:
Traceback (most recent call last):
File "/home/prashantb/anaconda3/envs/demo/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/home/prashantb/anaconda3/envs/demo/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "multiprocess_detect_actions.py", line 67, in read_frames
for ii in range(nframes):
TypeError: 'float' object cannot be interpreted as an integer
Я пытался использовать float('inf')
, как прокомментировано в коде, но это бесполезно в этом случае.Я также попытался преобразовать значение с плавающей точкой в целое число, но оно показало ту же ошибку.Буду признателен за ваш совет по этому вопросу.спасибо.