Я довольно новичок в 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