使用python opencv滞后和增加延迟的raspberry上的多个rtspip摄像机流

7d7tgy0s  于 2023-02-05  发布在  Python
关注(0)|答案(1)|浏览(186)

我想用树莓3b+分析来自IP摄像头(从2到6个摄像头)的图像。
我使用的是python opencv,但是延迟会增加(因为视频是x0.5,所以延迟会累积)

from threading import Thread
import cv2, time

class ThreadedCamera(object):
    def __init__(self, src=0):
        self.capture = cv2.VideoCapture(src)
        self.capture.set(cv2.CAP_PROP_BUFFERSIZE, 2)
       
        # FPS = 1/X
        # X = desired FPS
        self.FPS = 1/30
        self.FPS_MS = int(self.FPS * 1000)
        
        # Start frame retrieval thread
        self.thread = Thread(target=self.update, args=())
        self.thread.daemon = True
        self.thread.start()
        
    def update(self):
        while True:
            if self.capture.isOpened():
                (self.status, self.frame) = self.capture.read()
            time.sleep(self.FPS)
            
    def show_frame(self):
        cv2.imshow('frame', self.frame)
        cv2.waitKey(self.FPS_MS)

if __name__ == '__main__':
    src = 'rtsp://user:psword@192.168.8.108:554/Streaming/Channels/1401'
    threaded_camera = ThreadedCamera(src)
    while True:
        try:
            threaded_camera.show_frame()
        except AttributeError:
            pass

我尝试不使用FPS逻辑,结果是一样的(我尝试降低FPS,但它不起作用)。我不需要30 FPS,但我希望最低3 FPS。
我能做什么?有没有好的opencv替代品?我必须使用其他语言吗

z0qdvdin

z0qdvdin1#

您必须在删除cv2.capture之后删除time.sleep
我不知道为什么,但它为我工作。

相关问题