OpenCV многопоточное захват с нескольких камер - PullRequest
0 голосов
/ 13 октября 2019

Я работаю над проектом безопасности для многопоточного захвата с OpenCV4 (python3) и несколькими камерами. Каждая камера (кадры) обрабатывается индивидуально для обнаружения объектов и, наконец, потоковой передачи их в сеть. Поскольку у python нет «case», и я делаю это таким образом, это правильный способ или как оптимизированный способ сделать это?

<code>
# this is the start function
def start_cams():
    ...
    # get list of active cams
    cam_active = get_camera()  # i.e. 4 cameras
    for i in range(len(cam_active)):
        t = threading.Thread(target=process_cam, name=cam_active[i],
                             args=(cam_active[i],))
        t.daemon = True
        t.start()

# this is the capture and process function
def process_cam(cam_id):
    global lock, vs_cam_1, vs_cam_2, vs_cam_3, vs_cam_4
    global out_1, out_2, out_3, out_4
    ...
    if cam_id == "cam_4":
        vs_cam_4 = VideoProc(source=cam_src, backend=cv2.CAP_FFMPEG).start()
    elif cam_id == "cam_3":
        vs_cam_3 = VideoProc(source=cam_src, backend=cv2.CAP_FFMPEG).start()
    elif cam_id == "cam_2":
        vs_cam_2 = VideoProc(source=cam_src, backend=cv2.CAP_FFMPEG).start()
    elif cam_id == "cam_1":
        vs_cam_1 = VideoProc(source=cam_src, backend=cv2.CAP_FFMPEG).start()
   ...
   # object detection code here
   ...
    with lock:
        if cam_id == "cam_4":
            out_4 = frame.copy()
        elif cam_id == "cam_3":
            out_3 = frame.copy()
        elif cam_id == "cam_2":
            out_2 = frame.copy()
        elif cam_id == "cam_1":
            out_1 = frame.copy()

# this is the output stream function
def generate_stream(cam_id):
    global lock, out_1, out_2, out_3, out_4
    while True:
        with lock:
            if cam_id == "cam_1":
                ...
                # encode the frame in JPEG format
                (flag, encodedFrame) = cv2.imencode(".jpg", out_1)
    ...
    yield(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + \
          bytearray(encodedFrame) + b'\r\n')
</code>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...