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秒的滞后。显然有一些队列是从中弹出帧的。
答案 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