从实时视频设备捕获图像以供基于Java的应用程序使用的最佳方法是什么?

我正在研究某些场景的半实时检测的图像处理问题。我的目标是让实况视频以我的Java代码的方式到达Motion JPEG帧。

我熟悉Java Media Framework,可悲的是,我认为我们可以认为这是一个有效的API。我也很熟悉Axis boxes,而我真的很喜欢他们的解决方案,我会感谢任何有关我具体兴趣点的重要反馈。

这是为了这个讨论的目的定义“最好的”

>延迟 – 如果我使用这个视频流来控制相机,如果可能,我想保持我的往返延迟不到100毫秒。这是我的控制输入与我看到可见变化的时间之间的时间。编辑一段时间后:要记住的另一件事是,相机控制可能是手动和自动(事件触发器)的组合。即使高质量的饲料分开存档,我们也需要立即看到这些照片。
>免费/开放源代码优于不免费。
>可调整的编解码器参数 – 我需要能够调整编解码器在某些情况下。有时高速的低分辨率流实际上更容易处理。
>“与Java集成” – 将此解决方案挂钩到我的代码有多少麻烦?我通过套接字发送数据包吗?点击网址?安装Direct3D / JNI组合?
> Windows / Linux /两者? – 我更喜欢操作系统不可知的解决方案,因为我必须提供多种操作系统,但可能有一个解决方案是最适合一个但不是另一个。

注意:我知道其他图像/视频捕获编解码器,这不是这个问题的重点。由于帧精度的损失,我对流式API(例如,MPEG4)特别不感兴趣。但是,如果有一个解决方案,我的问题提供另一个帧准确的数据流,请进来。

这个问题的后续行动:在这一点上,我非常倾向于购买诸如Axis video encoders之类的电器,而不是直接在软件或PC上捕获视频。但是,如果有人有替代品,我很乐意听到他们的意见。

最佳答案
这个JavaCV实现工作正常。

码:

import com.googlecode.javacv.OpenCVFrameGrabber;

import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

public class CaptureImage {
    private static void captureFrame() {
        // 0-default camera, 1 - next...so on
        final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        try {
            grabber.start();
            IplImage img = grabber.grab();
            if (img != null) {
                cvSaveImage("capture.jpg", img);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        captureFrame();
    }
}

还有post on viewing live video从Camera。和configuration for JavaCV :

我认为这将符合您的要求。

转载注明原文:从实时视频设备捕获图像以供基于Java的应用程序使用的最佳方法是什么? - 代码日志