问题描述
我在 Ubuntu 上的 OpenCV 4.4.0.46 中捕获并处理 IP 摄像机 RTSP 流。 不幸的是,处理需要相当多的时间,大约每帧 0.2 秒,并且流很快就会延迟。 视频文件必须保存 5 分钟,但通过此延迟视频文件仅保存 3-4 分钟。
我们能否加快处理速度以克服延误?
我有两个 IP 摄像头,它们有两个不同的 fps_rate(摄像头 1 有 18000,摄像头 2 有 20 fps)
我正在不同的 Ubuntu PC 上实现此代码
- Linux 上的 Python 3.8.5(默认,2020 年 7 月 28 日,12:59:40)[GCC 9.3.0]
- Django==3.1.2
- Ubuntu = 18.04 和 20.04
- opencv-contrib-python==4.4.0.46
- opencv-python==4.4.0.46
name
解决方法
我看到有两种方法可以解决这个问题。
-
您可以拥有一个单独的线程,专用于从 RTSP 流读取帧并将其存储在缓冲区中。您的处理发生在主线程中,并将从该缓冲区请求帧,该缓冲区将移交最旧的帧。这将确保您不会丢失任何帧。但是,由于与相机的帧速率相比,您的处理步骤非常缓慢,因此您的缓冲区中可能会出现数千张图片,这可能会导致“内存不足”错误。
-
由于您似乎最关心的是使用您的处理步骤创建视频而不是实时显示,您可以先保存 5 分钟的视频(从 read() 直接转到 write(),无需任何处理) 完成后,您可以从该视频文件中读取并在闲暇时处理这些帧,因为此处的延迟不会导致您跳过帧。