Inicializar WebCam do Windows - JMF

Olá, sou novo aqui no fórum, inclusive me cadastrei nele por ver que ele se destaca na área. No momento curso ciência da computação na UEZO/RJ e estou pegando um projeto na Iniciação Científica e estou com certa dificildade no manuseio da biblioteca JMF.

A proposta inicial, seria desenvolver um sistema em Java + MatLab, aonde o programa principal em java captaria a imagem pela placa de video, o usuario então iria acionar um JButton para capturar uma foto de uma microcamera na área biomédica e trabalharia com certas ferramentas que disponibilizaremos no programa para a edição da imagem (ai que entra o matlab que é ÓTIMO para o trabalho em cima de matrizes).

Bom, parando com toda essa enrolação, começando o projeto agora, já desenvolvi a interface e algumas funções que farão parte do todo, mas para o ‘teste’ utilizarei a captura da imagem de uma webcam para simular como se fosse a ‘tal’ microcamera que mais pra frente instalaremos.

mas eu não estou conseguindo abrir a webcam em um JPanel (que no início era a minha primeira proposta).

Peguei um código ‘pré’ pronto em um fórum, que no caso, funcionando a webcam em qualquer código, eu adapto para o meu sistema, mas nem isso eu estou conseguindo.

De acordo com os códigos que peguei, inclusive no GUJ, o código era pra funcionar, mas não funciona.

A minha webcam está corretamente instalada e funciona perfeitamente em qualquer software que a requisite-a.

A primeira linha que identifica o erro diz:

  • javax.media.NoPlayerException: Cannot find a Player for :vfw:0

Lendo na internet sobre esse erro, vi que o erro esteja talvez no “VTW:0” que pode ser vários valores de acordo com o sistema e webs.

Testei também:

  • vfw:Logitech USB Video Camera:0
  • vfw:Microsoft WDM Image Capture (Win32):0
  • Microsoft WDM Image Capture:0
  • vtw://0

E continua no mesmo erro.

Li também sobre o JMStudio, baixei ele e compilei pelo próprio DOS, mesmo com alguns erros rodou, e quando botei pra identificar os “devices” ele não identificou nenhum nesse modelo, apenas o JavaSound Audio Capture.

Quaquer ajudar será bem vindo, ainda sou meio ‘inexperiente’ em java e to apanhando MUITO aqui, já perdi diversas noites de sono e não consigo sair disso :S

Vou botar o código aqui também.

[code]import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JOptionPane;

public class CapturaFoto extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
public static Player player = null;
public CaptureDeviceInfo di = null; // @jve:decl-index=0:
public MediaLocator ml = null; // @jve:decl-index=0:
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
private JButton captura = null;

public CapturaFoto() {
    super();
    initComponents();
    initialize();
    this.setSize(600,530);
    setLocation(170, 05);
}
private void initialize() {
    this.setLayout(new BorderLayout());
    this.setSize(600,500);
    this.add(getCaptura(), BorderLayout.SOUTH);
    this.setVisible(true);
    String str2 = "vfw:\\0";
    di = CaptureDeviceManager.getDevice(str2);
    ml =  new MediaLocator("vfw:\\0");
    try {
        player = Manager.createRealizedPlayer(ml);
        player.start();
        Component comp;
        if ((comp = player.getVisualComponent()) != null) {
            add(comp, BorderLayout.NORTH);
        }
        add(captura, BorderLayout.SOUTH);
        } catch (Exception e) {
        e.printStackTrace();
    }

}

public void gravaImg (Image imagem) throws IOException{
    String caminho = "C:/photos"+"00"+".JPG";
try {
        ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));
        JOptionPane.showMessageDialog(this, "Imagem Capturada!");
    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, "não foi possivel encontrar " + "o dispositivo para a captura da imagem.");
        e.printStackTrace();
    }
}
private JButton getCaptura() {
    if (captura == null) {
        captura = new JButton("Captura");
        captura.setBounds(10, 10, 600, 500);
        captura.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                FrameGrabbingControl fgc = (FrameGrabbingControl) player
                        .getControl("javax.media.control.FrameGrabbingControl");
                buf = fgc.grabFrame();
                btoi = new BufferToImage((VideoFormat) buf.getFormat());
                img = btoi.createImage(buf);
                try {
                    gravaImg(img);
                } catch (IOException ex) {
                    Logger.getLogger(CapturaFoto.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }
    return captura;
}

class ImagePanel extends javax.swing.JPanel {

    private static final long serialVersionUID = 1L;
    public Image myimg = null;

    public ImagePanel() {
        JOptionPane.showMessageDialog(null, "setando a classe");
        setLayout(null);
        setSize(630,530);
    }

    public void setImage(Image img) {
        this.myimg = img;
        repaint();
    }

    @Override
    public void paint(Graphics g) {
        if (myimg != null) {
            g.drawImage(myimg, 0, 0, this);
        }
    }
}

private void initComponents() {

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setTitle("Capturar Foto");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 607, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 489, Short.MAX_VALUE)
    );

    pack();
}


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new CapturaFoto().setVisible(true);
        }
    });
}

}[/code]

[size=18]Ninguém? : ([/size]

Estou com o mesmo problema!
Já pesquisei na internet mas não consegui nada ainda.
A minha Webcam é a Microsoft Life Cam NX-6000.
Se alguém puder ajudar eu agradeço muito!

Consegui botar pra funfar aqui.

Reiniciei o sistema, desinstalei todos aplicativos java, inclusive o JMF, reinstalei a webcam, reinstalei os aplicativos java (já com as versões atualizadas) e o JMF, reiniciei novamente o sistema e funfou.

Estranho, deve ter sido algum erro de compatibilidade de versões, não sei …

‘’/

Abraços!

Consegui capturar imgem via webcam…ufa…so que me deparei com outro problema…a webcam que tinha testado…era uma antiguinda da creative…funcionou mas como a resolução ja tava surrada, comprei outra, agora, um da microsoft… lifecam vx-2000 e essa bandida…nao fica ativa(com o ledzinho ligado) como ficava a creative…alguem sabe como ativar essa webcam via java ou mesmo via windows/USB…

Rodrigo Pescador