Application portable sur java pour travailler avec une caméra Web


Ce serait génial si je pouvais obtenir des conseils sur mon problème: je travaille avec une application qui devrait montrer à l'utilisateur une liste de caméras PC connectées. Par exemple, en utilisant mon ordinateur portable, j'ai une caméra Web intégrée et une caméra USB. Lors de l'exécution de l'application, l'utilisateur doit pouvoir sélectionner le périphérique souhaité et créer une photo avec lui.

J'ai travaillé avec ce problème pendant plusieurs jours et fait des recherches en utilisant les frameworks existants suivants: JMF, FMJ, VLCJ, Xuggler, JMyron, JavaFX, JavaCV.

Certains d'entre eux ont été obsolètes; d'autres nécessitent l'installation du SDK pour chaque PC client. La principale exigence de mon application est la portabilité, cependant, et cela me fait porter d'utiliser des SDK externes.

Est-il possible de terminer cette tâche en utilisant uniquement Java?

En ce moment, mon application ne devrait fonctionner que sur Windows OS.

Donc, pourrais-je avoir quelques conseils sur la façon de résoudre mon problème?

Cordialement, Evgeniy

Author: alvonellos, 2012-09-16

1 answers

Je suis désolé d'avoir posté la question si tôt. Je viens de réglé ce problème. J'ai utilisé LTI-CIVIL. Il n'a pas été mis à jour depuis 5 ans... Quoi qu'il en soit, cela fonctionne bien pour tous mes web camers. J'ai changé un peu l'un des exemples d'utilisation pour basculer entre les dispositifs existants. Voici mon code:

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

De plus, la taille de mon projet n'est que d'environ 3 Mo avec all .bibliothèques dll pour Windows OS

J'espère que cela aiderait quelqu'un.

Cordialement, Evgeniy

 0
Author: evgeniy44, 2012-09-16 21:33:47