Python - многопроцессорность с функцией - PullRequest
0 голосов
/ 03 октября 2019

Я довольно новичок в Python и Computer Vision, но мне удалось настроить базовый сценарий, чтобы открыть домашнюю камеру CCTV. Он отлично работает, но у меня есть небольшая проблема в том, что он перебирает каждую камеру одну за другой, поэтому вместо обновления изображения с камеры каждую секунду он обновляется примерно каждые 5 секунд - время, необходимое для завершения цикла.

Я хочу иметь возможность использовать многопроцессорность / многопоточность, чтобы при вызове функции для каждой из моих камер она открывала новый пул, работая параллельно друг другу, следовательно, обновляя каждую камеру каждую секунду.

Как видно из приведенного ниже кода, я вызываю каждую из камер, используя одну и ту же функцию, но с разными аргументами. Я прочитал Process и перепробовал несколько вариантов, но, похоже, я не смог заставить его работать.

Я уверен, что он простой, и было бы здорово, если бы кто-томожет указать мне правильное направление.

Вот код:

# import libraries
from threading import Thread
import imutils
import cv2, time
import argparse
import numpy as np
import datetime
from imutils.video import WebcamVideoStream
from multiprocessing import Process


stream = WebcamVideoStream('rtsp://mylink1./' ).start() # To open any valid video file stream/network stream. In this case 'test.mp4' file.
stream2 = WebcamVideoStream('rtsp://mylink2./' ).start()
stream3 = WebcamVideoStream('rtsp://mylink3./' ).start()
stream4 = WebcamVideoStream('rtsp://mylink4./' ).start()
stream5 = WebcamVideoStream('rtsp://mylink5./' ).start()


def checkimage(stream,camname):

    global lastmessage

    try:
        frame = stream.read()

        (h, w) = frame.shape[:2]

        cv2.imshow(camname, frame)

        print('[INFO]Checked ' + str(camname) + ' at ' +  datetime.datetime.now().strftime("%H:%M:%S")  + '...')

    except AttributeError:
        pass

# infinite loop
while True:

    checkimage(stream,"Back Door Camera")
    checkimage(stream2,"Conservatory Camera")
    checkimage(stream3,"Front Door Camera")
    checkimage(stream4,"Garage Camera")
    checkimage(stream5,"Shed Camera")

    key = cv2.waitKey(1) & 0xFF

    # check for 'q' key-press
    if key == ord("q"):
        if 'q' key-pressed break out
        break

cv2.destroyAllWindows()
# close output window

stream.stop()
# safely close video stream.

Заранее спасибо! Chris

...