在Java中访问网络摄像头的最佳方式

2022-08-31 15:55:37

我需要使用 Java 访问网络摄像头。这就是我想做的

  1. 访问网络摄像头

  2. 现在,用户可以看到网络摄像头的工作,因为他的脸在屏幕上可见(听说那里有一些库,不显示网络摄像头的视频输出)

  3. 当用户单击保存按钮时,拍摄快照并保存

很长一段时间以来,我已经尝试了许多方法来做到这一点。

  1. JMF - 现在它已经死了
  2. FMJ - 现在它也死了
  3. VLCJ - 太多了,因为我没有创建音乐/视频播放器,它希望安装VLC
  4. 徐格勒 - 太多和辛苦的工作
  5. JMyron - 不起作用
  6. JavaFX - 我以为它能做到,但似乎做不到

如果图书馆只做上面提到的事情,我甚至很满意,因为这对我来说已经足够了。但我希望它也能很简单。如果它不使用DLL,那就太好了,因为如果它不使用DLL,它就不是独立于平台的。如果它可以检测相机,而不必像VLCJ那样手动传递相机名称和其他信息,真的很感激(因为可能有成千上万的相机品牌,所以我无法在其中创建一千个元素的列表)。而且,我正在创建一个桌面应用程序,而不是Web应用程序。

如果您知道这样的图书馆,请好心地让我知道。其他库(可能不适合我的所有要求,但适合基本要求)也欢迎。请帮忙


答案 1

我认为您正在寻找的项目是:https://github.com/sarxos/webcam-capture(我是作者)

有一个完全按照您描述的示例 - 运行后,会出现窗口,按下“开始”按钮后,您可以看到来自网络摄像头设备的实时图像,并在单击“快照”后将其保存到文件(源代码可用,请注意,角落中的FPS计数器可以禁用):

snapshot

该项目是便携式的(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"));

答案 2

推荐