Autor
|
Tema: Manejar WebCam o camaraWeb desde JAVA (Leído 42,521 veces)
|
josco
Desconectado
Mensajes: 199
|
bueno, sigo en las mismas , como en la escuela solo nos ensenan a programar en java con netbeans, y no nos ensenan a crear botones desde cero, tengo dudas respecto al ultimo codigo , ya le intente de muchas maneras pero no lo puedo hacer jalar. bueno te explico las dudas: 1.- no se donde poner exactamente este codigo: clase ejemplo implements ActionListener{
public CamaraWeb ver; ver = new CamaraWeb();
public void actionPerformed(ActionEvent e){ if(e.getSource()==jButton1){ this.jLabel1.setLayout(null); this.jLabel1.add(ver.VerCamara(0, 0, 140, 180)); } if(e.getSource()==jButton2){ int resultado; resultado=ver.Fotografiar("fotosjava", true, "imagen1"); if(resultado==1){ //Se tomo la fotografia }else{ //Error en la fotografia } } }
} donde dice: clase ejemplo implements ActionListener{ no es en clase class?? este codigo va en la misma clase CamaraWeb?? o en el jframe?? o donde?? bueno te dejo un video para que veas lo que hago puedes adelantarle al minuto 7:30 es la parte donde termino de matar moscas a canonazos jaja, y empiezo a intentar con tu codigo: el video lo puedes descargar de aqui: http://www.megaupload.com/?d=3KPBBLV1pesa como 27 MB espero no te moleste, ojala y me puedas ayudar saludosss
|
|
|
En línea
|
|
|
|
cyberserver
Desconectado
Mensajes: 162
Lo que una mente crea, otra lo destruye
|
OK MEN ya entendi lo siento si te confundi. por cierto estuvo chido el video se ve que ya te dominas el NetBeans!!!! Mira segun lo que yo pude ver (corrigeme si me equivoco). Tus metodos para los eventos del boton los genera automaticamente el IDE pero estos se van agregarndo a tu clase que se llama ventana.java dentro esta tambien el public static void main (String[] args). Mira el error que te manda mi clase es por k estas instanciando dos veces( instancias es cuando crear un objeto de tipo de la clase CamaraWeb objeto=new CamaraWeb()), por decirlo de otro cuando ases esto automaticamente la clase por medio del constructor inicializa la camaraweb sin que tu te des cuenta pero tu no puedes verla asta que llames al evento VerCamara(), entonces si instancias 2 veces estas cargando una camara web que ya en uso la primera ves.!!! es por eso que te marca ese error de capture device in use Entonces para solucionar este error y juntarlo con tu codigo tenemos que declarar una variable GLOBAL(esta se declara fuera de cualquier metodo y su funcion es k pueda ser accesible desde cualquier metodo de la clase). Declarar una Variable global: class ventana{
public CamaraWeb Ver=new CamaraWeb();
public static void main (String[] args) {
}
}
en el codigo de arriva declaramos a Ver de tipo CamaraWeb como Variable GLOBAL entonces podremos acceder y hacer uso de ella desde cualquier metodo que este dentro de la clase ventana. ahora pues. para resolver el problema de tu codigo tendremos que hacer esto. class ventana{
public CamaraWeb Ver=new CamaraWeb(); //Es Ver con malluscula la primera no te vallas a confundir abajo
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: this.jLabel1.setLayout(null); this.jLabel1.add(Ver.VerCamara(0, 0, 140, 180)); }
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: int resultado=Ver.Fotografiar("fotosjava", true, "imagen1"); if(resultado==0){ JOptionPane.showMessageDialog(null,"Error en la Fotografia"); }
}
public static void main (String[] args) {
} } Y Bingo, con esto resolvimos el dilema de instanciar dos veces a la clase...... viste que solo lo hisimos una ves con el objeto o variable "Ver"..... Espero haber sido lo mas claro posible, y cualquier duda hasmela saber. atte: CyberServer
|
|
« Última modificación: 19 Mayo 2010, 06:21 am por cyberserver »
|
En línea
|
|
|
|
josco
Desconectado
Mensajes: 199
|
gracias men. ya funciona a la perfeccion este es el codigo de la ventana: me sale un warning el declarar: public CamaraWeb Ver = new CamaraWeb(); pero ya funciona aqui esta todo el codigo de la ventana: package camara;
import javax.swing.JOptionPane;
/* * To change this template, choose Tools | Templates * and open the template in the editor. */
/* * ventana.java * * Created on 18/05/2010, 12:53:18 PM */
/** * * @author Noe */
public class ventana extends javax.swing.JFrame {
/** Creates new form ventana */ public CamaraWeb Ver = new CamaraWeb();
public ventana() { initComponents();
}
/** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {
jLabel1 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText(" "); jLabel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jButton1.setText("ver la cam"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });
jButton2.setText("Fotografiar"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } });
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(21, 21, 21) .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 206, Short.MAX_VALUE) .addComponent(jButton2) .addGap(27, 27, 27)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(44, Short.MAX_VALUE) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 301, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(60, 60, 60)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(19, 19, 19) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 218, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton1) .addComponent(jButton2)) .addContainerGap()) );
pack(); }// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: this.jLabel1.setLayout(null); this.jLabel1.add(Ver.VerCamara(0, 0, 300, 250)); }
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: int resultado=Ver.Fotografiar("fotosjava", true, "imagen1"); if(resultado==0){ JOptionPane.showMessageDialog(null,"Error en la Fotografia"); } }
/** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ventana().setVisible(true); } }); }
// Variables declaration - do not modify public javax.swing.JButton jButton1; public javax.swing.JButton jButton2; public javax.swing.JLabel jLabel1; // End of variables declaration
}
y dejo tambien el proyecto en netbeans. lo pueden descargar de aca: http://www.4shared.com/get/293555022/a77f647f/camara_web_netbeans_proyect.htmlgracias por la ayuda cyberserver. ahora si va a quedar bien chido mi proyecto de la biblioteca jaja
|
|
|
En línea
|
|
|
|
|
gochiman
Desconectado
Mensajes: 1
|
Amigo esta muy bien tu clase... te cuento que yo estoy desarrollando un aplicacion y basicamente hago lo mismo que tu ..pero mi aplicacion difiere un tanto.. yo uso (o pretento usar) varias webcam o fuenets de capturas... el problema viene con JMF registry
Código:
CamaraWeb(){ Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true ); try{ ml = new MediaLocator("vfw://0"); p = Manager.createRealizedPlayer(ml); video = p.getVisualComponent(); p.start(); if ( video != null ){ componente=video; } }catch(Exception e){ JOptionPane.showMessageDialog(null,"Error de Comunicacion con la WebCam " + e); } }
pues bien... para manejar varios dispositvos no hago esa asigancion fija al MediaLocator.. sino uso el metodo getDeviceList(Format).... bien esto me funciona pasando como formtao el RGB, pero solo me devuelve una posicion al vector... es decir ; solo ve una camara; y desde el JMF registry al agregar dispositivos y ponerlo a detectar solo me detecta uno-... y claro lo llama vfw:.......:0 = vfw://0 yo necesitaria poder usar el vfw://1 //2 // 3
no se si me he explicado.... yo estoy convencido que el codigo no es el problema sino lo es el hecho que el registry solo me muestra cualquier webcam como un dispositivo vfw://0
en resumidas cuentas... como harias tu para manejar varias camaras? ¿han tenido ese problema antes? ¿como se puede solucionar?
A: las camaras las reconoce y son compatibles ya que he probado la aplicacion corriendo una sola camara y lo hace a la perfecccion indistintamente de cual este conectada...
Si me pueden ayudar lo agradeceria mill veces he visto cualqueir cantidad de foros y de verdad ya no se como solucionar esto...
|
|
|
En línea
|
|
|
|
Nakatsukasa Itero
Desconectado
Mensajes: 22
Shark
|
he estado viendo su post y a mi jefe le gustó y descargo e implementó la captura de la fotografía con camaras web y java pero dice que en un futuro quiere implementar los sistemas que creamos de tal forma que el cliente no deba hacer pasos extras de instalacion, simplemente el del sistema, entonces se encontró que cada vez que debemos de instalar un sistema tenemos que fijarnos en el sistema operativo para tener los componentes/librerias necesarios, entonces surge la duda en que si hay alguna libreria ue sea multiplataforma que no tenga que instalarse, sino que ya vaya (o podamos) empaquetada con el proyecto y que incluso si eso se puede, por medio de un asistene que nosotros empezamos a implementar (como un instalador) solo descargue la aplicacion de la pagina de la empresa y el asistente mismo le instala la aplicacion ya "compilada". dijo que encontro una libreria con un nombre que no recuerdo que tenia una "L" que segun el leyó la susodicha letra es por Linux, pero no ha encontrado nada parecido o su homónima para Ventanas alguien tiene alguna idea. por su ayuda en ambas o alguna de las preguntas se los agradezco
|
|
|
En línea
|
Kanashimi no Itero
|
|
|
Proteus1989
|
Sabéis porque me puede dar este error cuando se lanza el hilo? at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:206) at com.sun.media.protocol.vfw.VFWCapture.<clinit>(VFWCapture.java:19) at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.java:241) at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:763) at java. lang. Thread. run(Unknown Source )
|
|
|
En línea
|
|
|
|
Iwan
Desconectado
Mensajes: 2
|
Hola, tenía un código muy parecido al tuyo cyberserver pero me aparecía el error "java.io.IOException: Could not connect to capture device" así que he probado a copiar el tuyo literalmente, el caso es que en el momento de la llamada p = Manager.createRealizedPlayer(ml); sigo teniendo exactamente el mismo problema: me salta una ventana con titulo "Origen de video" y dentro una pestaña que dice "origen de la captura". En ella selecciono la única opción que es el nombre de mi webcam me da la excepción y entonces me salta nuevamente la ventana me vuelve a dar la excepcion y ya salta a la excepción propia del contructor. He consultado ya en mil sitios pero no encuentro solución... alguna sugerencia??
Un saludo y gracias de antemano
|
|
|
En línea
|
|
|
|
josco
Desconectado
Mensajes: 199
|
Descarga el proyecto que esta para netbeans lo hice yo josco mas arriiva esta. ese deberia funcionar
|
|
|
En línea
|
|
|
|
Iwan
Desconectado
Mensajes: 2
|
No se, es todo muy raro, ahora me sigue dando el mismo error pero parece que traga con él, se abre el JFrame que se tiene que abrir pero en el Jpanel que añado el componente aparece una pantalla rosa. Cuando minimizo el JFrame, en la parte que estaba al Jpanel y sobre cualquier tipo de ventana (escritorio, navegador, otras ventanas, el propio NetBean) aparece una captura de la webCam correspondiente al momento de minimizar la ventana... Dejo el código por si sirviese de ayuda para solucionar esto que me trae ya de cabeza...: el actionPerformance que llama al Jframe: private void VideoCamActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: //Se pide el nombre del nuevo directorio. Y se crean los directorios de las //distintas emociones en él. IODialog entradaSalida = new IODialog(); String pathBaseDD; String directorioFuente = entradaSalida.readLine("Introduce el \n" + "nombre de la nueva base de datos");
pathBaseDD = CreaDirectoriosBaseDatos(directorioFuente); // Se crea el objeto VentanaWebCam h1 = new VentanaWebCam(); // se añade al jDesktopPane jDesktopPane1.add(h1); h1.SetPath(pathBaseDD); //se muestra en pantalla h1.setVisible(true); }
la parte del JFrame implicada: public VentanaWebCam() { initComponents(); VideoPanel.add(video.Componente()); }
La clase que maneja la webCam: public class VideoJMF { //Controlador universal de windows private String dispositivo = "vfw:Microsoft WDM Image Capture (Win32):0"; private Player player = null;
public Component Componente(){ Component componente_video; try { // Se obtiene el dispositivo MediaLocator localizador = new MediaLocator("vfw:\\Device\\0000008b");
player = Manager.createRealizedPlayer(localizador); //Aqui sale la ventana //que me pregunta por el dispositivo de captura de video y da el error //java.io.IOException: Could not connect to capture device sin embargo ya solo //sale una vez y la aplicacion sigue su curso. Salvo por el problema de la pantallita //rosa :S
player.start(); } catch (IOException ex) { Logger.getLogger(VideoJMF.class.getName()).log(Level.SEVERE, null, ex); } catch (NoPlayerException ex) { Logger.getLogger(VideoJMF.class.getName()).log(Level.SEVERE, null, ex); } catch (CannotRealizeException ex) { Logger.getLogger(VideoJMF.class.getName()).log(Level.SEVERE, null, ex); } //Si se pudo crear el PLAYER, se obtiene el componente de video if ((componente_video = player.getVisualComponent()) != null) { //se da un tamaño al componente //componente_video.setSize(320, 240); return componente_video; } else { JOptionPane.showMessageDialog(null,"No se pudo crear el video..."); return null; } }
}
Saludos
|
|
« Última modificación: 1 Mayo 2012, 20:19 pm por Iwan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Manejar archivo .txt desde java (ingresar datos, modificar datos, buscar datos y
Java
|
chuystoty
|
9
|
106,463
|
20 Mayo 2012, 06:13 am
por ELMED
|
|
|
Manejar webcam en VS 2010
.NET (C#, VB.NET, ASP)
|
eldiegofg
|
4
|
5,811
|
8 Junio 2010, 05:21 am
por 43H4FH44H45H4CH49H56H45H
|
|
|
Manejar plc con java?
Java
|
josco
|
3
|
6,701
|
18 Noviembre 2010, 20:50 pm
por josco
|
|
|
Manejar SMF desde Java
Java
|
undercode2
|
1
|
2,656
|
30 Julio 2011, 03:11 am
por Leyer
|
|
|
Camaraweb java
Java
|
mything
|
1
|
1,797
|
13 Junio 2014, 09:23 am
por adastra
|
|