gpt4 book ai didi

python - 在 OpenCV 中跳过帧并寻找 RTSP 流的结尾

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:45 24 4
gpt4 key购买 nike

我在 Raspberry Pi 上的 OpenCV 3.4.2 中捕获和处理 IP 摄像机 RTSP 流。不幸的是,处理需要相当多的时间,大约每帧 0.2 秒,并且流很快就会延迟。

我不介意跳过一些帧,所以我正在寻找一种方法在捕获和处理下一帧之前寻找到流的末尾。

vcap = cv2.VideoCapture("rtsp://{IPcam}/12")

while(1):
ret, frame = vcap.read()
time.sleep(0.2) # <= Simulate processing time
cv2.imshow('VIDEO', frame)
if cv2.waitKey(1) == 27:
break
vcap.seek_to_end() # <== How to do this?

我怎样才能 vcap.seek_to_end() catch 流,丢弃丢失的帧,并开始处理最新的帧?

谢谢!

最佳答案

试试这个:

vcap = cv2.VideoCapture("rtspsrc location=rtsp://{IPcam}/12 ! decodebin ! videoconvert ! appsink max-buffers=1 drop=true")

这使用 gstreamer 来抓取您的相机源,并将保持长度为 1 的缓冲区并在收到新的传入帧时丢弃最旧的。然后,每次调用 vcap.read() 时,您都应该获得最新的帧。

如果您发现 CPU 使用率非常高,您也可以尝试在 Raspberry Pi 上使用 OMX 解码器,因为这将在 GPU 上解码视频(假设它是 h264):! rtph264depay ! h264解析! omxh264dec ! appsink max-buffers=1 drop=true

您可能需要重新编译 OpenCV,因为默认情况下它是使用 FFMPEG 支持编译的,而不是 gstreamer。这相当简单,只需将 -D WITH_GSTREAMER=ON -D WITH_FFMPEG=OFF 传递给 cmake 命令即可。确保安装了 gstreamer 开发库 apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

关于python - 在 OpenCV 中跳过帧并寻找 RTSP 流的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51722319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com