Inicializar WebCam do Windows - JMF

4 respostas
T

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.

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

4 Respostas

T

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

F

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!

T

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!

P

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

Criado 10 de setembro de 2010
Ultima resposta 5 de dez. de 2011
Respostas 4
Participantes 3