实时摄像机输入到Julia-lang

时间:2019-01-31 20:52:04

标签: camera julia real-time

TLDR:如何在Julia中实现低延迟,低cpu影响的网络摄像头?

编辑:我还将其发布在julia devs forum

我是朱莉娅的新手。我对处理来自已连接网络摄像头的视频提要感兴趣,并希望我能从Julia中获得什么样的表现。

我正在使用Linux Ubuntu 16.04。

我发现通过video4linux获取摄像头输入的唯一方法是通过VideoIO,它在我的系统上运行。该视频的延迟高达4秒,是无法接受的。我认为这是由驱动程序和/或libav对帧进行缓冲(或者是ffmpeg,我不知道)给出的。使用任何具有其名称的相机API,我都应该能够访问所获取的最新相机框架...或者至少设置Im从中弹出框架的队列的大小。似乎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秒的滞后。显然有一些队列是从中弹出帧的。

1 个答案:

答案 0 :(得分:1)

另请参阅Julia中的Video4Linux包装器,该包装器可与Images.jl配合使用: https://github.com/Affie/Video4Linux.jl

它尚未注册,但已经存在了一段时间。可以使用SharedArrays.jl在Julia中使此过程成为多线程,或者可能是从Julia 1.3开始使用新的Composible Threading模型。

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