gpt4 book ai didi

java - Java 上的可移植应用程序,可与网络摄像头一起使用

转载 作者:可可西里 更新时间:2023-11-01 10:49:03 26 4
gpt4 key购买 nike

如果我能就我的问题获得建议,那就太好了:我正在使用一个应用程序,该应用程序应向用户显示连接的 PC 摄像头列表。例如,使用我的笔记本电脑时,我有一个内置网络摄像头和一个 USB 摄像头。运行应用程序时,用户应该能够选择所需的设备并使用它创建照片。

我已经处理这个问题好几天了,并使用以下现有框架进行了研究:JMF、FMJ、VLCJ、Xuggler、JMyron、JavaFX、JavaCV。

其中一些已被弃用;其他则需要为每台客户端 PC 安装 SDK。然而,我的应用程序的主要要求是可移植性,这让我厌倦了使用外部 SDK。

是否可以仅使用 Java 来完成此任务?

现在我的应用程序应该只能在 Windows 操作系统上运行。

那么,请问我可以就如何解决我的问题提出一些建议吗?

问候,叶夫根尼

最佳答案

很抱歉我这么早发布了这个问题。我刚刚解决了这个问题。我用的是 LTI-CIVIL。它已经 5 年没有更新了……无论如何,它对我所有的网络摄像头都很好用。我已经更改了一些使用示例以在现有设备之间切换。这是我的代码:

    public class CaptureFrame extends ImageFrame
{
private Map <String, String>cams = new HashMap<String, String>();
public static void main(String[] args) throws CaptureException
{
new CaptureFrame(DefaultCaptureSystemFactorySingleton.instance()).run();
}

private CaptureSystem system;
private CaptureStream captureStream;
private final CaptureSystemFactory factory;
private volatile boolean disposing = false;

public CaptureFrame(CaptureSystemFactory factory)
{
super("LTI-CIVIL");
this.factory = factory;
}

public void run() throws CaptureException
{
initCapture();

setLocation(200, 200);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
try
{
disposeCapture();
} catch (CaptureException e1)
{
e1.printStackTrace();
}
System.exit(0);
}
});
setVisible(true);
pack();

system = factory.createCaptureSystem();
system.init();
List <CaptureDeviceInfo>list = system.getCaptureDeviceInfoList();
String[] possibilities = new String[list.size()];
int i=0;
for (CaptureDeviceInfo info : list){
possibilities[i] = info.getDescription();
cams.put(info.getDescription(), info.getDeviceID());
i++;
}
String s = (String) JOptionPane.showInputDialog(
this,
"Please, choose needed web camera:\n",
"Select one...",
JOptionPane.PLAIN_MESSAGE,
null,
possibilities, null);
captureStream = system.openCaptureDeviceStream(cams.get(s));
captureStream.setObserver(new MyCaptureObserver());
setSize(captureStream.getVideoFormat().getWidth(), captureStream.getVideoFormat().getHeight());
startCapture();
}



public void initCapture() throws CaptureException
{
system = factory.createCaptureSystem();
system.init();
}

public void startCapture() throws CaptureException
{
captureStream.start();
}

public void disposeCapture() throws CaptureException
{
disposing = true;
if (captureStream != null)
{ System.out.println("disposeCapture: stopping capture stream...");
captureStream.stop();
System.out.println("disposeCapture: stopped capture stream.");
captureStream.dispose();
captureStream = null;
}
if (system != null)
system.dispose();
System.out.println("disposeCapture done.");
}

class MyCaptureObserver implements CaptureObserver
{
public void onError(CaptureStream sender, CaptureException e)
{
e.printStackTrace();
}

public void onNewImage(CaptureStream sender, com.lti.civil.Image image)
{
if (disposing)
return;
try
{
setImage(AWTImageConverter.toBufferedImage(image));
}
catch (Throwable t)
{ t.printStackTrace();
}
}
}
}

此外,我的项目大小只有大约 3 MB,包含适用于 Windows 操作系统的所有 .dll 库

希望对大家有帮助

问候,叶夫根尼

关于java - Java 上的可移植应用程序,可与网络摄像头一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com