【问题标题】:OpenCV VideoCapture / V4L2 latency when grabbing a new webcam image抓取新网络摄像头图像时的 OpenCV VideoCapture / V4L2 延迟
【发布时间】:2014-12-04 09:40:53
【问题描述】:

对于我正在进行的计算机视觉项目,我需要使用 Logitech C920 网络摄像头抓取图像。我正在使用 OpenCV 的 VideoCapture 来做到这一点,但我面临的问题是我在某个时刻拍摄的图像没有显示相机看到的最新内容。也就是说,如果我在时间戳 t 拍摄图像,它会显示相机在时间戳 (t - delta) 看到的内容。

我通过编写一个程序来增加一个计数器并将其显示在屏幕上。我将相机对准屏幕并让它记录下来。当计数器达到某个值(例如 10000)时,它会抓取图像并将其保存为文件名“counter_value.png”(例如 10000.png)。这样我就能够将计数器的当前值与相机看到的当前值进行比较。我注意到大部分时间延迟在 4-5 帧左右,但这不是一个固定值。

我看到了关于这个问题的类似帖子,但没有一个真正有帮助。有些人建议将帧抓取例程放入单独的线程并更新“current_frame”Mat 变量。我试过了,但由于某种原因,问题仍然存在。其他人提到相机在 Windows 上运行良好(但我需要使用 Linux)。我尝试在 Windows 上运行相同的代码,确实延迟只有大约 1 帧(这也可能是相机没有看到计数器,因为屏幕更新速度不够快)。

然后我决定运行一个仅基于 V4L2 代码的简单网络摄像头查看器,认为问题可能来自 OpenCV。我再次遇到了同样的延迟,这让我相信驱动程序正在使用某种缓冲区来缓存图像。

我是V4L2的新手,我真的需要尽快解决这个问题,所以我的问题是:

  1. 有没有人找到使用 V4L2(可能还有 OpenCV)获取最新图像的解决方案?
  2. 如果无法使用 V4L2 解决此问题,是否有人知道在 Linux 上解决此问题的另一种方法?

问候,

米海

【问题讨论】:

    标签: delay webcam video-capture latency v4l2


    【解决方案1】:

    看起来在VideoCapture::grab() 调用和实际拍摄帧之间总会有延迟。这是因为帧缓冲是在硬件/SO 级别完成的,您无法避免。

    OpenCV 提供VideoCapture::get( CV_CAP_PROP_POS_MEC) ) 方法为您提供捕获帧的确切时间,但这只有在相机支持的情况下才有可能。

    最近在V4L OpenCV实现中发现了一个问题: http://answers.opencv.org/question/61099/is-it-possible-to-get-frame-timestamps-for-live-streaming-video-frames-on-linux/

    几天前修复了一个问题: https://github.com/Itseez/opencv/pull/3998

    最后,如果您的设置正确,您就可以知道拍摄一帧的时间是多少(并因此进行补偿)。

    【讨论】:

      【解决方案2】:

      问题可能出在 Linux UVC 驱动程序上,但我一直在 Ubuntu 12.04 和 14.04 机器上使用 Microsoft LifeCam Cinemas 进行机器视觉,并且没有看到 4-5 帧延迟。不过,我在弱光条件下操作它们,在这种情况下,它们会将帧速率降低到 7.5 fps。

      另一个可能的罪魁祸首是网络摄像头延迟,具体取决于所使用的格式。 C920 似乎支持 H.264(很少有网络摄像头支持),因此罗技可能已尽最大努力使这项工作顺利进行,但 OpenCV 似乎不支持 Linux 上的 H.264;请参阅此answer 了解它支持的格式。同样的问题也有一个 answer 带有内核 hack(!) 来解决 UVC 驱动程序的问题。

      PS:为了检查我的案例中实际使用的格式,我添加了

      fprintf(stderr, ">>> palette: %d\n", capture->palette);
      

      在 OpenCV 代码中的 this line

      【讨论】:

        猜你喜欢
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2014-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        相关资源
        最近更新 更多