Ошибка при попытке буферизировать видео в opencv с использованием нескольких потоковPython

Программы на Python
Anonymous
Ошибка при попытке буферизировать видео в opencv с использованием нескольких потоков

Сообщение Anonymous »

Я пытаюсь прочитать видео в буфер, используя потоки OpenCV, и получаю "Assertion fctx->async_lock failed at libavcodec/pthread_frame.c:167" причина, по которой я хочу использовать для этого потоки, заключается в том, что я могу одновременно считывать в список множество кадров, чтобы это было быстро. Мне нужны все кадры, и я не могу пропустить ни одного кадра. Я думал, что несколько кадров мой код работает в однопоточном режиме, то есть с «потоками».buffer_refill = 1".import threading
import cv2

cap = cv2.VideoCapture('data/temp/testing/test.mp4')
frames = []
total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
frames_left = total_frames
threads = []

print(total_frames)

min_buffer = 120
buffer_refill = 60

def buffer():
print('buffer')
frame = cap.grab()
ret, frame = cap.retrieve()
frames.append(frame)

def get_buffer(num):
global frames_left
for i in range(num):
frames_left -= 1
if frames_left > 0:
t = threading.Thread(target=buffer)
t.start()
threads.append(t)
for thread in threads:
thread.join()
print('block')

while(cap.isOpened()):
if frames_left > 0 and len(frames) < min_buffer:
get_buffer(buffer_refill)
else:
cv2.imshow('Frame',frames[0])
frames.pop(0)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()


Подробнее здесь: https://stackoverflow.com/questions/735 ... le-threads

Вернуться в «Python»