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

2024-02-06

我正在研究某些场景的半实时检测的图像处理问题。我的目标是让实时视频以 Motion JPEG 帧的形式出现在我的 Java 代码中somehow.

我熟悉Java媒体框架 http://java.sun.com/javase/technologies/desktop/media/jmf/遗憾的是,我认为我们可以认为这是一个实际上已死的 API。我也熟悉轴盒 http://www.axis.com/而且,虽然我真的很喜欢他们的解决方案,但我会感谢任何有关我的具体兴趣点的批评反馈。

出于本次讨论的目的,我是这样定义“最佳”的:

  • 延迟 - 如果我使用此视频流控制摄像机,如果可能的话,我希望将往返延迟保持在 100 毫秒以内。这是通过我的控制输入到我看到可见变化的时间之间的时间来衡量的。一段时间后编辑:另一件事要记住的是相机控制可能是手动和自动(事件触发器)的组合。我们需要立即查看这些图片,即使高质量的 feed 是单独存档的。
  • 免费/开源总比不免费好。
  • 可调整的编解码器参数 - 我需要能够针对某些情况调整编解码器。有时,高速低分辨率流实际上更容易处理。
  • 与 Java 的“集成”——将这个解决方案挂接到我的代码上有多麻烦?我是否通过套接字发送数据包?点击网址?安装 Direct3D / JNI 组合?
  • Windows / Linux / 两者? - 我更喜欢与操作系统无关的解决方案,因为我必须交付多种操作系统版本,但可能有一个解决方案最适合其中一种,但不适用于另一种。

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

追问:此时此刻,我强烈倾向于购买诸如安讯士视频编码器 http://www.axis.com/products/video/video_server/index.htm而不是尝试直接在软件中或在 PC 上捕获视频。但是,如果有人有替代方案,我很想听听。


这个 JavaCV 实现工作得很好。

CODE:

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();
    }
}

还有关于观看直播视频的帖子 http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/javacv-capture-save-flip-show-live.html来自相机。并且JavaCV 的配置: http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/opencv-javacv-eclipse-project.html

我想这会满足你的要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐