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

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

我熟悉Java Media Framework ,但遗憾的是,我认为我们可以认为该API是有效的无效API。我也熟悉Axis Box ,虽然我真的很喜欢他们的解决方案,但是希望对我的特定兴趣点提供任何关键的反馈。

这是我为讨论目的定义“最佳”的方式:

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

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

回答这个问题:在这一点上,我非常倾向于购买Axis视频编码器之类的设备,而不是试图直接在软件或PC上捕获视频。但是,如果有人有其他选择,我很想听听他们的意见。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

FMJ绝对可以捕获视频并将其转换为MJPEG帧。

收藏
评论

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

还有关于从Camera 观看实时视频的文章, 以及JavaCV的配置:

我认为这将满足您的要求。

收藏
评论

关于JMF的死法,您是否知道FMJ的实现 ?我不知道它是否有资格成为“最佳”解决方案,但值得在讨论中加入。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号