Foro de elhacker.net

Programación => Java => Mensaje iniciado por: ZeroVzla en 23 Febrero 2010, 17:44 pm



Título: [SOLUCIONADO]Tomar una foto desde una webcam
Publicado por: ZeroVzla en 23 Febrero 2010, 17:44 pm
Hola a todos, de ante mano muchas gracias por tomarse la molestia de leer este post...

Estoy creando una aplicacion en java que por dadas causas necesita tomar una foto desde una camara web u otro tipo de camara que se conecte a la pc. El problema es que no tengo ni la mas remota idea de como hacerlo, si pudieran guiarme un poco en este tema (utilizar la camara web u otro tipo de camara en java) se los agradeceria con el alma :D..

Muchas Gracias!!!

 


Título: Re: Tomar una foto desde una webcam
Publicado por: ZeroVzla en 12 Marzo 2010, 04:46 am
  
   Ya resolvi xD... y por si alguien quiere saber como tomar la foto les dejo este codigo (que no es mio por si acaso) a fin de contribuir con algo :D

Primero deben descargar e instalar el JMF siguiendo este enlace:
http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html (http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html)

    Luego ya pueden ejecutar el codigo:

Código
  1. import javax.swing.*;
  2. import java.io.*;
  3. import javax.media.*;
  4. import javax.media.format.*;
  5. import javax.media.util.*;
  6. import javax.media.control.*;
  7. import java.awt.*;
  8. import java.awt.image.*;
  9. import java.awt.event.*;
  10. import com.sun.image.codec.jpeg.*;
  11.  
  12. public class SwingCapture extends Panel implements ActionListener
  13. {
  14.  public static Player player = null;
  15.  public CaptureDeviceInfo di = null;
  16.  public MediaLocator ml = null;
  17.  public JButton capture = null;
  18.  public Buffer buf = null;
  19.  public Image img = null;
  20.  public VideoFormat vf = null;
  21.  public BufferToImage btoi = null;
  22.  public ImagePanel imgpanel = null;
  23.  
  24.  public SwingCapture()
  25.  {
  26.    setLayout(new BorderLayout());
  27.    setSize(320,550);
  28.  
  29.    imgpanel = new ImagePanel();
  30.    capture = new JButton("Capture");
  31.    capture.addActionListener(this);
  32.  
  33.    String str1 = "vfw:Logitech USB Video Camera:0";
  34.    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
  35.    di = CaptureDeviceManager.getDevice(str2);
  36.    ml = di.getLocator();
  37.  
  38.    try
  39.    {
  40.      player = Manager.createRealizedPlayer(ml);
  41.      player.start();
  42.      Component comp;
  43.  
  44.      if ((comp = player.getVisualComponent()) != null)
  45.      {
  46.        add(comp,BorderLayout.NORTH);
  47.      }
  48.      add(capture,BorderLayout.CENTER);
  49.      add(imgpanel,BorderLayout.SOUTH);
  50.    }
  51.    catch (Exception e)
  52.    {
  53.      e.printStackTrace();
  54.    }
  55.  }
  56.  
  57.  public static void main(String[] args)
  58.  {
  59.    Frame f = new Frame("SwingCapture");
  60.    SwingCapture cf = new SwingCapture();
  61.  
  62.    f.addWindowListener(new WindowAdapter() {
  63.      public void windowClosing(WindowEvent e) {
  64.      playerclose();
  65.      System.exit(0);}});
  66.  
  67.    f.add("Center",cf);
  68.    f.pack();
  69.    f.setSize(new Dimension(320,550));
  70.    f.setVisible(true);  
  71.  
  72.  }
  73.  
  74.  
  75.  public static void playerclose()
  76.  {
  77.    player.close();
  78.    player.deallocate();
  79.  }
  80.  
  81.  public void actionPerformed(ActionEvent e)
  82.  {
  83.    JComponent c = (JComponent) e.getSource();
  84.  
  85.    if (c == capture)
  86.    {
  87.      // Grab a frame
  88.      FrameGrabbingControl fgc = (FrameGrabbingControl)
  89.      player.getControl("javax.media.control.FrameGrabbingControl");
  90.      buf = fgc.grabFrame();
  91.  
  92.      // Convert it to an image
  93.      btoi = new BufferToImage((VideoFormat)buf.getFormat());
  94.      img = btoi.createImage(buf);
  95.  
  96.      // show the image
  97.      imgpanel.setImage(img);
  98.  
  99.      // save image
  100.      saveJPG(img,"c:\\test.jpg");
  101.    }
  102.  }
  103.  
  104.  class ImagePanel extends Panel
  105.  {
  106.    public Image myimg = null;
  107.  
  108.    public ImagePanel()
  109.    {
  110.      setLayout(null);
  111.      setSize(320,240);
  112.    }
  113.  
  114.    public void setImage(Image img)
  115.    {
  116.      this.myimg = img;
  117.      repaint();
  118.    }
  119.  
  120.    public void paint(Graphics g)
  121.    {
  122.      if (myimg != null)
  123.      {
  124.        g.drawImage(myimg, 0, 0, this);
  125.      }
  126.    }
  127.  }
  128.  
  129.  public static void saveJPG(Image img, String s)
  130.  {
  131.    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
  132.    Graphics2D g2 = bi.createGraphics();
  133.    g2.drawImage(img, null, null);
  134.  
  135.    FileOutputStream out = null;
  136.    try
  137.    {
  138.      out = new FileOutputStream(s);
  139.    }
  140.    catch (java.io.FileNotFoundException io)
  141.    {
  142.      System.out.println("File Not Found");
  143.    }
  144.  
  145.    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  146.    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
  147.    param.setQuality(0.5f,false);
  148.    encoder.setJPEGEncodeParam(param);
  149.  
  150.    try
  151.    {
  152.      encoder.encode(bi);
  153.      out.close();
  154.    }
  155.    catch (java.io.IOException io)
  156.    {
  157.      System.out.println("IOException");
  158.    }
  159.  }
  160.  
  161. }
  162.  

Ha y por si quieren saber el nombre de su dispositivo o camara web aqui les dejo un metodo que se los muestra ( este si lo hice yo xD.. )

Código
  1. public void devices(){
  2.    Vector devices = new Vector (CaptureDeviceManager.getDeviceList(null));
  3.    for(int i=0;i<devices.size();i++)
  4.    System.out.println(devices.elementAt(i));
  5.  }
  6.  

Bueno Saludos!!!!! Por cierto ya es obvio que se puede cerrar el tema :D


Título: Re: Tomar una foto desde una webcam
Publicado por: Amerikano|Cls en 13 Marzo 2010, 21:35 pm
Mil gracias men!!!  ;-) ;-)


Título: Re: Tomar una foto desde una webcam
Publicado por: ZeroVzla en 19 Junio 2010, 00:36 am
Citar
JavIut

Hola amigo probe tu codigo pero no logro conseguir o no logra conseguir ningun Capture Device ya he instalado JMF y incluso lo he usado el programa y funciona y toma video y todo.. y he visto que acepta lo siguiente
Name = vfw:Microsoft WDM Image Capture (Win32):0

Locator = vfw://0

Output Formats---->

pero cuando lo uso en el codigo me dice que no existe.. y monto los devices y no me muestra ninguno me puedes dar un clue.. Christian Ortiz Vzla



Hola broht..

Mmmmm bueno no entendi muy bien  :huh:.... Cuando dices que haz usado el programa y funciona t refieres a que con el codigo que esta en el foro si se ve el video y toma la foto????

"no logro conseguir o no logra conseguir ningun Capture Device"?? t refieres a que la salida de metodo devices sólo t devuelve Name = vfw:Microsoft WDM Image Capture (Win32):0??

"pero cuando lo uso en el codigo me dice que no existe.. "?? cuando lo usas en el codigo de tu programa??????

"y monto los devices y no me muestra ninguno"?? t refieres a que conectas la cámara a tu computador??..

Por favor se un poco mas específico :D...

Ahora bien, y sin animos de ofender tus conocimientos, debes tener el driver de la camara instalado aparte del JMF. Otra cosa el metodo "devices()" t muestra los controladores de video pero la salida "vfw:Microsoft WDM Image Capture (Win32):0" se refiere al controlador universal de windows, lo que quiere decir que puedes utilizar este para conectarte con la webcam, que de echo es con ese que se conecta el codigo del post..

Seria bueno que me mandaras la salida del metodo "devices()" :D.. al igual que tu codigo a ver si podemos resolver xD... Tambien recuerda que estamos en un foro y que tu problema le puede surgir a otra persona, y si resolvemos solo por los mp's los demas no podrán ver la solución, por eso lo voy a poner como respuesta al post y por alli deberias postear lo que t pedi....

Bueno un saludo broth.. See us!!!!  ZeroVzla....


Título: Re: Tomar una foto desde una webcam
Publicado por: Debci en 19 Junio 2010, 00:47 am
Sensacional tengo algo parecido que use en mi troyano...

Jejeje sed buenos...

Saludos


Título: Re: Tomar una foto desde una webcam
Publicado por: ZeroVzla en 19 Junio 2010, 01:09 am
Mmmmm capturar la imagen de la webcam remota con ese no se puede xD... ya que depende del JMF... Sería interesante ver como hicistes :D...

Saludos.. See us!! ZeroVzla...


Título: Re: Tomar una foto desde una webcam
Publicado por: Debci en 23 Junio 2010, 21:39 pm
Mmmmm capturar la imagen de la webcam remota con ese no se puede xD... ya que depende del JMF... Sería interesante ver como hicistes :D...

Saludos.. See us!! ZeroVzla...
Como que no?
Sencillamente en el programa servidor en el pc victima, realiza la captura y transforma la imagen en una matriz de datos tipo byte y la transfieres por stream, asi de sencillo.


Y comentarte tambien que se pueden incluir las libs dentro del mismo jar para compactarlo todo.

Saludos


Título: Re: Tomar una foto desde una webcam
Publicado por: ZeroVzla en 25 Junio 2010, 05:29 am
Mmmm....  Ok lo de enviar la imagen si lo pude digerir xD... pero como harias para capturar la imagen sin el JMF instalado????


Título: Re: Tomar una foto desde una webcam
Publicado por: Debci en 25 Junio 2010, 08:33 am
Mmmm....  Ok lo de enviar la imagen si lo pude digerir xD... pero como harias para capturar la imagen sin el JMF instalado????
Siempre puede generar el servidor con la libreria integrada, o subirla despues y ejecutarla, por algo es un troyano.

Saludos


Título: Re: Tomar una foto desde una webcam
Publicado por: ZeroVzla en 29 Junio 2010, 06:02 am
Mmmmm.. si bueno... xD... es que tenia la duda de que si se debia instalar obligado el prog en la maquina porque una vez utlice en mi prog una libreria para manejar puertos seriales y si lo ejecutaba desde el compilador todo fino, pero si generaba el jar con todo y librerias incluidas en el y lo ejecutaba me daba error porque no agarraba esa libreria.. tenia que pasar la libreria al system32 de windows en ese caso en particular y asi si corria.. igual tal vez era sólo mi ignorancia aflorando xD.. jeje...


Título: Re: Tomar una foto desde una webcam
Publicado por: Debci en 29 Junio 2010, 08:38 am
Mmmmm.. si bueno... xD... es que tenia la duda de que si se debia instalar obligado el prog en la maquina porque una vez utlice en mi prog una libreria para manejar puertos seriales y si lo ejecutaba desde el compilador todo fino, pero si generaba el jar con todo y librerias incluidas en el y lo ejecutaba me daba error porque no agarraba esa libreria.. tenia que pasar la libreria al system32 de windows en ese caso en particular y asi si corria.. igual tal vez era sólo mi ignorancia aflorando xD.. jeje...
Porque resulta que hay librerias que ademas añaden librerias de sistemas, tipo .dll o .o

Saudos