Я читаю видеокадры из видеозахвата OpenCV и хотел бы оставить некоторые, чтобы поддерживать актуальность в случае медленной обработки.
Как я могу убедиться, что кадры не накапливаются в памяти, используяследующий код?
class ImageSource(Subject):
def arlo(cameraId: int, login: str, passwd: str):
return SyncSource(ArloSource(cameraId, login, passwd))
def file(path: str):
return SyncSource(FileSource(path))
где:
class SyncSource(ImageSource):
def __init__(self, source: ImageSource):
super().__init__()
source.observe_on(EventLoopScheduler()) \
.subscribe(self)
и:
class FileSource(CaptureSource):
def __init__(self, path: str):
super().__init__(VideoCapture(path))
и:
class ArloSource(CaptureSource):
def __init__(self, cameraId: int, login: str, passwd: str):
arlo = Arlo(login, passwd)
basestations = arlo.GetDevices('basestation')
cameras = arlo.GetDevices('camera')
streamUrl = arlo.StartStream(basestations[0], cameras[cameraId])
super().__init__(VideoCapture(streamUrl))
где:
class CaptureSource(ImageSource):
def __init__(self, capture: VideoCapture):
super().__init__()
self.thread = Thread(target = self.read, args = [capture])
self.thread.start()
def read(self, capture: VideoCapture):
while(True):
ok, frame = capture.read()
if(ok):
self.on_next(Image(frame))
else:
self.on_completed()
break