【问题标题】:Real-time camera input to Julia-langJulia-lang 的实时摄像头输入
【发布时间】:2019-01-31 20:52:04
【问题描述】:

TLDR:如何在 Julia 中实现低延迟、低 CPU 影响的网络摄像头采集?

编辑:我也在julia devs forum上发布了这个

我是 Julia 的新手。我有兴趣处理来自连接网络摄像头的视频源,看看我可以从 Julia 中获得什么样的性能。

我正在使用 Linux Ubuntu,16.04。

我发现通过 video4linux 获取网络摄像头输入的唯一方法是通过 VideoIO,它在我的系统上运行。然而,视频有一个不可接受的延迟,最长为 4 秒。我假设这是由驱动程序和/或 libav 的帧缓冲给出的(或者是 ffmpeg,我不知道)。使用任何名副其实的相机 api,我应该能够访问获取的最新相机帧......或者至少设置我从中弹出帧的队列的大小。似乎 VideoIO 中没有这样的选项,或者我错过了它。

能够向非技术人员展示 Julia 作为一种高性能语言对我来说真的很重要......所以这种延迟会毁掉我希望完成的演示。

编辑:这是我的一些代码:

module myViewCam
export myView

import VideoIO, ImageView;

function myView() 
        camera = VideoIO.opencamera();
        buf = VideoIO.read(camera);
        guidict = ImageView.imshow(buf);
        while !eof(camera)
            VideoIO.read!(camera, buf);
            ImageView.imshow(guidict["gui"]["canvas"], buf);
            sleep(0.00001);
        end
    end
end

假设上面是 Julia 提示符下 myViewCam.jl 的内容(“REPL”),我输入:

include("myViewCam.jl");
myViewCam.myView();

请注意,这是对“VideoIO.viewcam()”函数的修复,它似乎无法开箱即用。

在我的系统上,这使 Julia 线程的 cpu 使用率达到了大约 100%,在视频流开始时有大约 4 秒的延迟,但随着时间的推移,这会变得均匀,直到它达到大约 0.5 秒的延迟。显然有一些队列从中弹出帧。

【问题讨论】:

  • 不足以成为答案,但看起来 VideoIO 将 DEFAULT_CAMERA_DEVICEDEFAULT_CAMERA_FORMAT 包装成一个适用于文件和设备的 AVInput 对象。尝试挖掘AVInput 属性并查看/减小缓冲区大小。或者确保您的其他代码不会导致延迟......
  • @stillearningsomething,我在 VideoIO 的 repo 中查看了相同的 jl 文件。如果没有大量的时间投入,您的建议是无法完成的,最终导致了 api 的更新。关于我的代码,还没有什么可说的。我用几种不同的方式修改了 VideoIO.viewcam(),都产生了相同的延迟。这显然是在引擎盖下排队框架的问题,可能在驱动程序中。
  • @stillearningsomething,添加了一些代码来看看
  • 我认为这将是一个需要解决的重要话题。我不可能是唯一一个想要在 Julia 中进行实时视频处理的人。我也在 julia discourse 论坛上发布了这个问题:discourse.julialang.org/t/…
  • OpenCV 工作吗?如果是这样,那么github.com/opencv/opencv_contrib/tree/master/modules/juliagithub.com/opencv/opencv_contrib/blob/master/modules/julia/… 您需要编写代码来转换为 julia 图像格式。主要只是置换最后两个数组维度,然后使用正确的颜色。

标签: camera julia real-time


【解决方案1】:

另请参阅 Julia 中的 Video4Linux 包装器,它适用于 Images.jl: https://github.com/Affie/Video4Linux.jl

它还没有注册,但已经存在了一段时间。在 Julia 中,可以使用 SharedArrays.jl 或可能是自 Julia 1.3 以来新的可组合线程模型使该进程成为多线程。

PS,这个供应商特定的相机接口包也存在:https://github.com/JuliaCameras/RealSense.jl

【讨论】:

  • 这看起来更适合作为评论而不是作为答案
  • 我现在没有时间对此进行测试,但是在引用的 repo 中有看起来正确的代码示例。而且多线程的方法听起来也不错。
  • 我希望有人能提高效率(多线程部分),然后将其推送到 VideoIO 上游。
猜你喜欢
  • 2013-05-14
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
相关资源
最近更新 更多