Регулирование событий в RxPY - PullRequest
0 голосов
/ 03 февраля 2019

Я читаю видеокадры из видеозахвата 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
...