我想用树莓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替代品?我必须使用其他语言吗
1条答案
按热度按时间z0qdvdin1#
您必须在删除
cv2.capture
之后删除time.sleep
。我不知道为什么,但它为我工作。