OpenCV медленно читает видео в многопоточности
У меня есть проблема что при многопоточности opencv медленно читает видео, выдает 2 FPS, хотя ресурсы компьютера все свободные, задействованы лишь:
CPU (i7 3,6 ГГц): 1-2%, свободно остается 98%
RAM: 1ГБ / 64 ГБ
multiprocessing не подходит (или может я не корректно им пользуюсь), так как в дальнейшем будет распознавание объектов и он естественно выдает out of memory.
Я думал что проблема в кодеке видео h264 (хотя опять же повторюсь ресурсы свободны), но я все таки попробовал другие кодеки, все осталось также.
Подскажите в чем может быть проблема и какие есть варианты ее решения?
import cv2
import time
from threading import Thread,Semaphore
def start(i):
video_path = "backups/3/2/2023-06-18_20-27-50.mp4"
cap = cv2.VideoCapture(video_path, cv2.CAP_FFMPEG)
while cap.isOpened():
success, frame = cap.read()
if success:
new_time = time.time()
elapsed_time = new_time - prev_time
if i == 14:
fps = int(1/elapsed_time )
cv2.putText(frame, str(int(fps)), (7, 70), cv2.FONT_HERSHEY_SIMPLEX, 3, (100, 255, 0), 3, cv2.LINE_AA)
cv2.imshow("Inference", cv2.resize(frame,(960,540)))
prev_time = new_time
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
cv2.destroyAllWindows()
threads = []
i = 0
while i < 15:
t = Thread(target=start,args=(i,))
t.start()
threads.append(t)
i += 1
for t in threads:
t.join()
Источник: Stack Overflow на русском