用 Java 访问网络摄像头的最佳方式
Posted
技术标签:
【中文标题】用 Java 访问网络摄像头的最佳方式【英文标题】:Best way to access web camera in Java 【发布时间】:2012-07-14 07:03:08 【问题描述】:我需要使用 Java 访问网络摄像头。这就是我想做的事情
访问网络摄像头
现在用户可以看到网络摄像头正在工作,因为他的脸在屏幕上可见 (听说有些库不显示网络摄像头的视频输出)
当用户点击保存按钮时,拍摄快照并保存
长期以来,我已经尝试了多种方法来做到这一点。
-
JMF - 现在它已经死了
FMJ - 现在它也死了
VLCJ - 太多了,因为我没有创建音乐/视频播放器,它希望安装 VLC
Xuggler - 工作太辛苦了
JMyron - 没用
JavaFX - 我认为它可以做到,但似乎不能
如果图书馆只做上面提到的事情,我什至很满意,因为这对我来说已经足够了。但我希望它也很简单。如果它不使用 DLL,那就太好了,因为它不是独立于平台的。真的很感谢它可以检测相机,而无需像 VLCJ 中那样手动传递相机名称和其他信息(因为可能有数千个相机品牌,所以我无法在其中创建一千个元素的列表)。而且,我正在创建一个桌面应用程序,而不是网络应用程序。
如果你知道这样的图书馆,请告诉我。其他库(可能不适合我的所有要求,但适合基本要求)也欢迎。请帮忙
【问题讨论】:
可能有数千个摄像头?真的吗?你是为安全公司写的还是什么?此外,包含数千个元素的列表也不错 - 您始终可以在 UI 上对其进行过滤或以某种方式使其可搜索。 @corsiKa:不,我的意思是,如果我要把它交给其他人,我不能每次都修改程序,给出他们的相机名称。您知道,应该有一种方法可以与所有(或至少列出的)相机品牌一起使用。在 VLC 中,我们不传递相机名称,它会识别它。这就是我的意思。 【参考方案1】:我想你要找的项目是:https://github.com/sarxos/webcam-capture(我是作者)
有一个与您描述的完全一样的示例 - 运行后,会出现一个窗口,在您按下“开始”按钮后,您可以看到来自网络摄像头设备的实时图像,并在单击“后将其保存到文件中”快照”(source code available,请注意角落里的FPS计数器可以关闭):
该项目是可移植的(WinXP、Win7、Win8、Linux、Mac、Raspberry Pi),不需要在 PC 上安装任何额外的软件。
API 非常好用且易于学习。示例如何捕获单个图像并将其保存为 PNG 文件:
Webcam webcam = Webcam.getDefault();
webcam.open();
ImageIO.write(webcam.getImage(), "PNG", new File("test.png"));
【讨论】:
@Bartosz,这不只是本地的吗?您如何将数据直接传递给另一个客户端以进行网络摄像头? @Pacerier,您可以使用 IP 摄像头驱动程序从远程网络摄像头获取数据(如果摄像头支持 JPEG 或 MJPEG,源代码中提供演示)或通过 WebcamStreamer 从本地摄像头公开图像(非常有限但提供 MJPEG 流的工作 Web 服务器)。源代码中还有一个示例,演示了如何使用 xuggler 将图像帧流式传输为 h.264(不过只是一个概念验证)。 @BartoszFiryn,这就是 iTalki、Google Helpout、clearance.fm、LiveNinja 等的工作原理吗?这将如何工作,因为几乎每个防火墙都阻止流量,除非它的 http(s)? @Pacerier,我不处理延迟和带宽,因为这个库不适合通过 Internet 流式传输。如果您有任何其他问题,请查看项目页面和/或随时打开新票,这样我们就不会使用不必要的 cmets 向 *** 发送垃圾邮件。 这个库实际上似乎可以工作(在 Linux 上测试)。移植到 JavaX here【参考方案2】:这已在 SO 上多次讨论过。以下是一些帮助您入门的链接:
所以:Capturing image from webcam in java?
所以:What is the best method to capture images from a live video device for use by a Java-based application?
openCVF 小程序:http://www.colorfulwolf.com/blog/2011/07/05/accessing-the-webcam-from-inside-a-java-applet/
配置:http://ganeshtiwaridotcomdotnp.blogspot.in/2011/12/opencv-javacv-eclipse-project.html
【讨论】:
感谢您的回复。那么,你是在推荐 JavaCV 吗? 另一个问题,为什么大多数 JavaCV 文章建议安装“Microsoft Visual C++ Redistributable Packages”?仅仅因为我们需要获取 DLL 或其他东西?以上是关于用 Java 访问网络摄像头的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章