微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 opencv + python 中处理帧时直播流被延迟

如何解决在 opencv + python 中处理帧时直播流被延迟

我在 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

解决方法

我看到有两种方法可以解决这个问题。

  1. 您可以拥有一个单独的线程,专用于从 RTSP 流读取帧并将其存储在缓冲区中。您的处理发生在主线程中,并将从该缓冲区请求帧,该缓冲区将移交最旧的帧。这将确保您不会丢失任何帧。但是,由于与相机的帧速率相比,您的处理步骤非常缓慢,因此您的缓冲区中可能会出现数千张图片,这可能会导致“内存不足”错误。

  2. 由于您似乎最关心的是使用您的处理步骤创建视频而不是实时显示,您可以先保存 5 分钟的视频(从 read() 直接转到 write(),无需任何处理) 完成后,您可以从该视频文件中读取并在闲暇时处理这些帧,因为此处的延迟不会导致您跳过帧。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。