Я пытаюсь настроить нейронную сеть для работы на нескольких камерах одновременно (или почти по крайней мере ...).Прежде всего, я пытаюсь получить потоковую передачу 2 камер одновременно с OpenCV и модулем потоков Python.
Я придумал этот код:
import cv2
import threading
import queue
def multistream(stream, q):
ret, frame = stream.read()
q.put(frame)
if __name__ == "__main__":
camlink1 = "rtsp://......link1"
camlink2 = "rtsp://......link2"
stream1 = cv2.VideoCapture(camlink1)
stream2 = cv2.VideoCapture(camlink2)
print("stream is opened")
while True:
q = queue.Queue()
cam1 = threading.Thread(target=multistream, args=(stream1, q))
cam2 = threading.Thread(target=multistream, args=(stream2, q))
cam1.start()
cam2.start()
cam1.join()
cam2.join()
while not q.empty():
cv2.imshow("video", q.get())
Проблема в том, что cv2.imshow показывает пустое окно вместо фрейма, если я добавлю к коду print(q.get())
, он печатает маты, из которых сделан кадр, поэтому кадр корректно возвращается из многопотоковой функции в основной поток.Как исправить это?