Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CAPTURE DE PHOTOS À PARTIR D'UNE WEBCAM


Information sur la source

Catégorie :Multimedia Niveau : Débutant Date de création : 30/08/2004 Date de mise à jour : 22/10/2004 13:52:03 Vu : 26 652

Note :
7,25 / 10 - par 4 personnes
7,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (69)
Ajouter un commentaire et/ou une note

Description

Ca faisait longtemps que je cherchait, mais j'ai enfin trouvé !
Ce code permet de prendre une photos à partir d'une webcam et de l'enregistrer sur votre disque dur. Je met le code tel que je l'ai trouvé (après vérifications, bien entendu).
Je tiens à préciser que ce code n'est pas de moi.

Il y a besoin du JMF ( Java Media Framework ), que l'on peut trouver sur le site de sun :  http://java.sun.com/products/java-media/jmf/
 

Source

  • import java.awt.BorderLayout;
  • import java.awt.Component;
  • import java.awt.Dimension;
  • import java.awt.Frame;
  • import java.awt.Graphics;
  • import java.awt.Graphics2D;
  • import java.awt.Image;
  • import java.awt.Panel;
  • import java.awt.event.ActionEvent;
  • import java.awt.event.ActionListener;
  • import java.awt.event.WindowAdapter;
  • import java.awt.event.WindowEvent;
  • import java.awt.image.BufferedImage;
  • import java.io.FileOutputStream;
  • 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.JComponent;
  • import com.sun.image.codec.jpeg.JPEGCodec;
  • import com.sun.image.codec.jpeg.JPEGEncodeParam;
  • import com.sun.image.codec.jpeg.JPEGImageEncoder;
  • public class SwingCapture extends Panel implements ActionListener
  • {
  • public static Player player = null;
  • public CaptureDeviceInfo di = null;
  • public MediaLocator ml = null;
  • public JButton capture = null;
  • public Buffer buf = null;
  • public Image img = null;
  • public VideoFormat vf = null;
  • public BufferToImage btoi = null;
  • public ImagePanel imgpanel = null;
  • public SwingCapture()
  • {
  • setLayout(new BorderLayout());
  • setSize(320,550);
  • imgpanel = new ImagePanel();
  • capture = new JButton("Capture");
  • capture.addActionListener(this);
  • String str1 = "vfw:Logitech USB Video Camera:0";
  • String str2 = "vfw:Microsoft WDM Image Capture (Win32):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(capture,BorderLayout.CENTER);
  • add(imgpanel,BorderLayout.SOUTH);
  • }
  • catch (Exception e)
  • {
  • e.printStackTrace();
  • }
  • }
  • public static void main(String[] args)
  • {
  • Frame f = new Frame("SwingCapture");
  • SwingCapture cf = new SwingCapture();
  • f.addWindowListener(new WindowAdapter() {
  • public void windowClosing(WindowEvent e) {
  • playerclose();
  • System.exit(0);}});
  • f.add("Center",cf);
  • f.pack();
  • f.setSize(new Dimension(320,550));
  • f.setVisible(true);
  • }
  • public static void playerclose()
  • {
  • player.close();
  • player.deallocate();
  • }
  • public void actionPerformed(ActionEvent e)
  • {
  • JComponent c = (JComponent) e.getSource();
  • if (c == capture)
  • {
  • // Grab a frame
  • FrameGrabbingControl fgc = (FrameGrabbingControl)
  • player.getControl("javax.media.control.FrameGrabbingControl");
  • buf = fgc.grabFrame();
  • // Convert it to an image
  • btoi = new BufferToImage((VideoFormat)buf.getFormat());
  • img = btoi.createImage(buf);
  • // show the image
  • imgpanel.setImage(img);
  • // save image
  • saveJPG(img,"c:\\test.jpg");
  • }
  • }
  • class ImagePanel extends Panel
  • {
  • public Image myimg = null;
  • public ImagePanel()
  • {
  • setLayout(null);
  • setSize(320,240);
  • }
  • public void setImage(Image img)
  • {
  • this.myimg = img;
  • repaint();
  • }
  • public void paint(Graphics g)
  • {
  • if (myimg != null)
  • {
  • g.drawImage(myimg, 0, 0, this);
  • }
  • }
  • }
  • public static void saveJPG(Image img, String s)
  • {
  • BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
  • Graphics2D g2 = bi.createGraphics();
  • g2.drawImage(img, null, null);
  • FileOutputStream out = null;
  • try
  • {
  • out = new FileOutputStream(s);
  • }
  • catch (java.io.FileNotFoundException io)
  • {
  • System.out.println("File Not Found");
  • }
  • JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  • JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
  • param.setQuality(0.5f,false);
  • encoder.setJPEGEncodeParam(param);
  • try
  • {
  • encoder.encode(bi);
  • out.close();
  • }
  • catch (java.io.IOException io)
  • {
  • System.out.println("IOException");
  • }
  • }
  • }
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;

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.JComponent;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class SwingCapture extends Panel implements ActionListener  
{ 
  public static Player player = null; 
  public CaptureDeviceInfo di = null; 
  public MediaLocator ml = null; 
  public JButton capture = null; 
  public Buffer buf = null; 
  public Image img = null; 
  public VideoFormat vf = null; 
  public BufferToImage btoi = null; 
  public ImagePanel imgpanel = null; 
   
  public SwingCapture()  
  { 
    setLayout(new BorderLayout()); 
    setSize(320,550); 
     
    imgpanel = new ImagePanel(); 
    capture = new JButton("Capture"); 
    capture.addActionListener(this); 
     
    String str1 = "vfw:Logitech USB Video Camera:0"; 
    String str2 = "vfw:Microsoft WDM Image Capture (Win32):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(capture,BorderLayout.CENTER); 
      add(imgpanel,BorderLayout.SOUTH); 
    }  
    catch (Exception e)  
    { 
      e.printStackTrace(); 
    } 
  } 


   
  public static void main(String[] args)  
  { 
    Frame f = new Frame("SwingCapture"); 
    SwingCapture cf = new SwingCapture(); 
     
    f.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
      playerclose(); 
      System.exit(0);}}); 
     
    f.add("Center",cf); 
    f.pack(); 
    f.setSize(new Dimension(320,550)); 
    f.setVisible(true); 
  } 
   
   
  public static void playerclose()  
  { 
    player.close(); 
    player.deallocate(); 
  } 
   

  public void actionPerformed(ActionEvent e)  
  { 
    JComponent c = (JComponent) e.getSource(); 
     
    if (c == capture)  
    { 
      // Grab a frame 
      FrameGrabbingControl fgc = (FrameGrabbingControl) 
      player.getControl("javax.media.control.FrameGrabbingControl"); 
      buf = fgc.grabFrame(); 
       
      // Convert it to an image 
      btoi = new BufferToImage((VideoFormat)buf.getFormat()); 
      img = btoi.createImage(buf); 
       
      // show the image 
      imgpanel.setImage(img); 
       
      // save image 
      saveJPG(img,"c:\\test.jpg"); 
    } 
  } 
   
  class ImagePanel extends Panel  
  { 
    public Image myimg = null; 
     
    public ImagePanel()  
    { 
      setLayout(null); 
      setSize(320,240); 
    } 
     
    public void setImage(Image img)  
    { 
      this.myimg = img; 
      repaint(); 
    } 
     
    public void paint(Graphics g)  
    { 
      if (myimg != null)  
      { 
        g.drawImage(myimg, 0, 0, this); 
      } 
    } 
  } 
   

  public static void saveJPG(Image img, String s) 
  { 
    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = bi.createGraphics(); 
    g2.drawImage(img, null, null); 

    FileOutputStream out = null; 
    try 
    {  
      out = new FileOutputStream(s);  
    } 
    catch (java.io.FileNotFoundException io) 
    {  
      System.out.println("File Not Found");  
    } 
     
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); 
    param.setQuality(0.5f,false); 
    encoder.setJPEGEncodeParam(param); 
     
    try  
    {  
      encoder.encode(bi);  
      out.close();  
    } 
    catch (java.io.IOException io)  
    { 
      System.out.println("IOException");  
    } 
  } 
   
} 

Historique

22 octobre 2004 13:52:03 :
Cela fait plusieurs fois que l'on me pose des questions sur un problème, qui est causé par l'absence du JMF, alors je précise qu'il y en a besoin, et où on peut le télécharger.

Commentaires et avis

signaler à un administrateur
Commentaire de era le 03/11/2004 17:05:19

je cherche a recuperer le stream video
si tu as une idee laisse un message
merci

signaler à un administrateur
Commentaire de tableur le 10/02/2005 18:47:23

j arrive pas à faire tourner ton code j'ai une erreur
si tu peux  m aider?
il me dit :
IM_CAP.java [38:1] class SwingCapture is public, should be declared in a file named SwingCapture.java
public class SwingCapture extends Panel implements ActionListener  
       ^
1 error
Errors compiling IM_CAP.
voila merci

signaler à un administrateur
Commentaire de mageti le 11/02/2005 09:37:05

Comment as-tu appellé ton fichier.java ? apparament, tu l'aurais appellé "IM_CAP.java", mais Java aurait préféré que tu l'appelle "swingcapture.java". Je ne suis pas sûr que ce soit bien ça, mais essayes.

signaler à un administrateur
Commentaire de dassault le 05/05/2005 23:05:27

salut lorsque je compile ta source j'ai le message d'erreur suivant :
:\chat_tcp\chat TCP\Mplayer.java:59: invalid method declaration; return type required
    public  SwingCapture()  


bon j'ai change le nom de ton application desole pour cela.........

ok, A+

signaler à un administrateur
Commentaire de mageti le 06/05/2005 20:40:27

Je ne vois pas trop, as-tu vérifié que tu as changé le nom de l'application partout dans les source, c'est-à-dire, est-ce que tu as bien modifié tous les "SwingCapture" apparaissant dans la source par des "Mplayer" ?
Pour l'instant, je ne vois que ça. Sinon, si ce n'est pas ça, je vois pas du tout.

signaler à un administrateur
Commentaire de dassault le 07/05/2005 00:37:28

desole , pour le desagrement ton application marche nickel; le probleme c'etait juste un pb du changement de nom

a+

signaler à un administrateur
Commentaire de Master_364 le 03/07/2005 12:14:40

Ce code est excellent même s'il n'est pas forcément très utile. Cependant, il manque légèrement de commentaires, mçeme si ce code n'est pas de toi, puisque tu l'as mis sur ce site, c'est que tu l'as sûrement compris et il serait bon d'en faire profiter aux autres. Egalement, attention à ne pas mettre dans de mauvaises mains puisqu'une fois modifié avec des flux et des sockets, on peut facilement visionner la webcam de quelqu'un d'autre depuis son pc.

signaler à un administrateur
Commentaire de Master_364 le 03/07/2005 12:14:50

Ce code est excellent même s'il n'est pas forcément très utile. Cependant, il manque légèrement de commentaires, mçeme si ce code n'est pas de toi, puisque tu l'as mis sur ce site, c'est que tu l'as sûrement compris et il serait bon d'en faire profiter aux autres. Egalement, attention à ne pas mettre dans de mauvaises mains puisqu'une fois modifié avec des flux et des sockets, on peut facilement visionner la webcam de quelqu'un d'autre depuis son pc.

signaler à un administrateur
Commentaire de vivi_2701 le 01/08/2005 10:35:42

Bonjour,

J'ai fait pratiquement la même chose que vous.
Mon component contenant l'image a une taille de 352*288.
Je voudrais pouvoir prendre un flux video de resolution 640*800 par exemple.
Est ce que vous savez comment on peut faire cela???

PS: je ne veut pas changer la taille du component par un setSize car je perdrais de la qualité mais bien préciser une résolution.

Merci

signaler à un administrateur
Commentaire de mageti le 26/08/2005 18:09:06

Salut,
désolé pour le retard dans les réponses (vacances obligent).
Pour modifier la résolution du flux vidéo, je crois que ce n'est pas tout simple; je cherche toujours. Je crois que ça doit venir de la webcam directement : le capteur est comme cela. Par contre si c'est une webcam qui fait aussi appareil-photo (avec X millions de pixels) ça doit venir de l'algorithme qui gère le capteur CCD directement dans l'appareil photo (en quelque sorte son système d'exploitation), et là, je sais pas faire. Il y a aussi une autre limite : la vitesse de transmition du flux entre le PC et la webcam.
Désolé, mais je crois que ça se fais pas, par contre, si tu trouves, je veux bien changer d'avis et je suis aussi preneur.

signaler à un administrateur
Commentaire de MarcelT le 11/11/2005 22:03:32

Bonjour,
J'ai essayé le programme
J'ai réussi à le compiler sans erreur avec JDK 5
J'ai inclus le fichier .class dans un html
Par contre, quand je l'exécute sur IE5, je reçois le message "Applet SwingCapture notinited"
et ensuite "Echec du chargement de l'applet java"

Merci d'éclairer ma lanterne

signaler à un administrateur
Commentaire de mageti le 12/11/2005 22:10:16

Bonjour,
Alors, désolé, ma je n'ai jamais essayé d'en faire un applet. Je ne m'y connais pas trop. Par contre, je pense (je n'ai pas vraiment cherché, donc, je pense) que ça doit bien exister un applet "tout fait" sur le net. Je ne pourrais pas t'être d'une bien plus grande aide, mille excuses.

signaler à un administrateur
Commentaire de thanatos67 le 25/01/2006 16:05:43

Bonjour. Je suis un débutant en java.
En éxécutant le programme j'obtient bien les images venant de la webcam, mais comment faire pour prendre une photo?
Je ne sais pas si il doit y avoir un bouton, mais chez moi il n'y en a pas. Donc je ne peux donner aucun ordre de capture.

Merci de me répondre.

signaler à un administrateur
Commentaire de mageti le 25/01/2006 16:24:12

Normalement, il doit y avoir un bouton "capture" au milieu, et en appuyant dessus, on prend une photo. As-tu une erreur, lors de la compilation ou de l'exécution ? En l'état, je ne voit pas à quoi ça peut être dû.

signaler à un administrateur
Commentaire de mageti le 26/01/2006 20:30:01

Alors là, j'avoue que je ne vois pas du tout. Personnellement, j'utilise eclipse et tout fonctionne avec une compilation sous jdk 1.4.2. Je vois pas, désolé...

signaler à un administrateur
Commentaire de thanatos67 le 31/01/2006 08:37:34

désolé de te déranger encore une fois, mais en cherchant j'ai vu que pour certaines API il etait conseillé de modifier le PATH ou le CLASSPATH, malheureusement je ne sais pas ce qu'il faut y changer. Une telle modification peut-elle apporter un changement? si tu n'en sais rien, je tenterais de me débrouiller tout seul.

signaler à un administrateur
Commentaire de thanatos67 le 31/01/2006 16:32:15

C'EST BON !!!
C'est JBuilderX qui posait problème. Il en est arrivé à ne plus executer correctement.
Par contre en ligne de commande, il n'y a plus de pb. Et le bouton "Capture" est apparu. C'est d'ailleur un mystère encore non résolue puisque je n'ai apporté aucune modification sur le fichier ou sur les librairies depuis.

Merci encore.

signaler à un administrateur
Commentaire de sixest le 05/02/2006 12:44:09

Salut,
voici ce que le debugger affiche à la compilation du code source :

"SwingCapture.SwingCapture is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener"

que faut il faire pour corriger l' erreur ?
merci

signaler à un administrateur
Commentaire de mageti le 05/02/2006 15:35:04

heu, tu as recopié le code tel que, ou tu l'a modifié avant de le compiler ? je ne vois rien d'"abstract" dans le code. Je ne vois pas trop d'ou ça pourrait venir cette erreur.

signaler à un administrateur
Commentaire de sixest le 05/02/2006 15:57:33

Le problème est résolu. Le nom de la class principale n' avait pas le même nom que le fichier java. Le code fonctionne correctement.

Est-ce que tu pourrais m' indiquer comment enregistrer sur le disquel' image extraite du flux video dans un autre format que jpeg - tiff ou BMP par exemple - ?

signaler à un administrateur
Commentaire de mageti le 05/02/2006 20:19:36

essaies de t'inspirer de ça : http://www.javafr.com/code.aspx?ID=26783

signaler à un administrateur
Commentaire de sixest le 06/02/2006 18:43:04

merci pour le code.
une nouvelle erreur apparait l' éxecution de mon programme :

lorsque l' on clique sur un bouton, la méthode suivante est appelée :

imageProcessingObject = (ImgIntfc02)Class.forName"ProgramTest").newInstance();

mais le message apparait :

java.lang.ClassNotFoundException: ProgramTest

qu' est ce que cela signifie ?
merci

signaler à un administrateur
Commentaire de mageti le 06/02/2006 19:06:26

Je pense que ça veut dire qu'il ne trouve pas ta classe nommée "ProgramTest". Soit ton progamme ne cherche pas au bon endroit, soit la classe "ProgramTest" n'existe pas du tout.

signaler à un administrateur
Commentaire de sixest le 06/02/2006 19:49:12

La classe ProgramTest implémente une interface nommée ImgIntfc02 :

class ProgramTest extends Frame implements ImgIntfc02{...}

j' ai placé le code de la classe ProgramTest dans le même code source que la classe principale qui appelle ProgrameTest. Le message apparait toujours.
est-ce que ça ne serait pas un problème d' accès (public, abstract) de cette classe ProgramTest ?

<b>

signaler à un administrateur
Commentaire de sixest le 06/02/2006 19:49:50

La classe ProgramTest implémente une interface nommée ImgIntfc02 :

class ProgramTest extends Frame implements ImgIntfc02{...}

j' ai placé le code de la classe ProgramTest dans le même code source que la classe principale qui appelle ProgrameTest. Le message apparait toujours.
est-ce que ça ne serait pas un problème d' accès (public, abstract) de cette classe ProgramTest ?

<b>

signaler à un administrateur
Commentaire de mageti le 06/02/2006 21:03:30

Bon question ! Je n'en sais rien. Es-tu bien sûr que c'est comme ça qu'il faut appeler ton ProgramTest ? Si tu ne trouves pas, vas plutôt sur le forum, il est plus visité et plus d'"experts" le sillonent. parce que la, je vois pas, mais alors pas du tout.

signaler à un administrateur
Commentaire de sixest le 06/02/2006 21:06:48

merci quand même. je galère depuis ce matin.
Finalement j' ai intégré le code de ProgramTest directement dans la classe principale et.. ça marche.
Pourquoi se compliquer la vie ?

signaler à un administrateur
Commentaire de bagnoula le 17/02/2006 21:10:12

merci je suis cap-bon j'ai des problèmes avec cette classe

signaler à un administrateur
Commentaire de mageti le 17/02/2006 21:23:47

Tu n'aurais pas un peu plus de précision ?
(Heu, je ne pourrais pas te répondre très vite, je vais passer une semaine sans PC)

signaler à un administrateur
Commentaire de mango54 le 08/03/2006 16:20:00

Bonjour mageti j'ai un probléme avec la partie capture de votre programme.
Voila je créé une application de vidéo surveillance. Pour visualiser la scéne je créé un dataSource, qui est ensuite utilisé pour créer mon player "player = Manager.createRealizedPlayer(ds);" ds represente le dataSource. je demarre le player etc...

le probléme c'est que le bout de code suivant ne finctionne pas chez moi

FrameGrabbingControl fgc = (FrameGrabbingControl)
      player.getControl("javax.media.control.FrameGrabbingControl");
      buf = fgc.grabFrame();
        
      // Convert it to an image
      btoi = new BufferToImage((VideoFormat)buf.getFormat());
      img = btoi.createImage(buf);

Vous savez d'ou le probléme peut venir.
Merci d'avance pour vos réponses.
Sébastien.

signaler à un administrateur
Commentaire de newrose le 03/05/2006 14:46:26

A la compilation j'ai des erreurs à commencer par celle-ci :
SwingCapture.java:26: cannot find symbol
symbol : class Player
location : class SwingCapture

2 jours que je cherche et je crise. Help !

signaler à un administrateur
Commentaire de mageti le 03/05/2006 18:50:37

Heu, tu as bien installé le JMF ?

signaler à un administrateur
Commentaire de newrose le 04/05/2006 10:54:16

Oui, je l'ai même désinstallé, ré-installé au cas où...

signaler à un administrateur
Commentaire de mageti le 04/05/2006 13:04:47

Je ne vois pas d'où viens ta class Palyer, il n'y en a pas dans le code proposé ci-dessus. Normalement, le Player est un objet, pas une class.

signaler à un administrateur
Commentaire de newrose le 04/05/2006 13:54:37

Oui mais justement les erreurs suivantes portent sur CaptureDeviceInfo, MediaLocator, etc... soit à chacunes des déclarations d'objet du début

signaler à un administrateur
Commentaire de mageti le 04/05/2006 20:10:25

Je pense avoir compris. Il doit y avoir une erreur dans la déclaration du classpath dans les variables d'environnement.
Vas dans le panneau de configuration > Système > onglet Avancé > Variables d'environnement. Tu doit avoir au moins un classpath, avec dedans le chemin vers le dossier d'installation de ton java. Vérifies s'il y a aussi celui du JMF, sinon, rajoutes-le à la suite, un peu comme ça : F:\PROGRA~1\Java\JMF21~1.1E\lib\jmf.jar;F:\PROGRA~1\Java\JMF21~1.1E\lib
Si ce n'est pas ça, je ne vois pas. Ou alors, tu copies le jmf.jar là où est ton appli.
Si ça ne marche toujours pas, alors là, heu...

signaler à un administrateur
Commentaire de newrose le 05/05/2006 10:17:53

"Si ça ne marche toujours pas, alors là, heu... "

donc : "heu..." !!!

Bin oui ça marche toujours pas, le classpath est ok et même en mettant jmf.jar dans le même dossier que SwingCapture.java ça ne marche pas !

signaler à un administrateur
Commentaire de newrose le 05/05/2006 15:12:54

J'AI TROUVE !
Bon en cherchant un peu je me suis apperçu qu'un autre programme utilisant CaptureDeviceInfo fonctionnait. j'ai donc remis les mêmes "import" et ai obtenu 4 erreurs. c'est là que j'ai constaté que mes import était différent du source ci-dessus. visiblement un changement provoqué automatiquement par Eclipse (ou autre EDI) qui propose de faire automatiquement les imports...
Voilà pour info et désolé pour le dérangement.

signaler à un administrateur
Commentaire de ludm le 05/10/2006 11:25:11

Mageti, tu as écris que tu as eu des problèmes sur ce bout de code :

FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
        
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);


Moi aussi, il me met une erreur. Tu as trouvé d'où ca venait ?

signaler à un administrateur
Commentaire de mageti le 06/10/2006 08:45:09

Salut Ludm,
alors, c'est NewRose qui avaitun problème et qui l'a résolu, pas moi... Sinon, pour le tien, c'est quoi, exactement, le message d'erreur, parce que, là, je suis pas devin. Sinon, as-tu essayé de voir si un autre programme utilisait ta webcam, comme c'était le cas pour NewRose ?

signaler à un administrateur
Commentaire de ludm le 07/10/2006 03:38:00

Salut Mageti, en effet j'ai lu trop vite.

J'ai le code suivant, lecteur étant un player vidéo :

Buffer buf = null;
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
lecteur.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
btoi.createImage(buf);

ca plante sur la dernière ligne et ca me sort ca :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at MagicLecteur.actionPerformed(MagicLecteur.java:666)

signaler à un administrateur
Commentaire de mageti le 08/10/2006 18:49:28

Normal. "java.lang.NullPointerException"-> tu cherches à faire une opération sur un objet null. Ici cet objet null, c'est justement rien du tout. Dans le code que j'ai mis :

FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);

tu peux voir qu'à la dernière ligne, c'est "img=btoi.createImage(buf)" et pas btoi.createImage(buf)" tout seul. Ton erreur vient de là. A un moment donné, tu as sûrement dû mal recopier le code.

signaler à un administrateur
Commentaire de ludm le 09/10/2006 00:05:22

En fait je me suis trompé en copaint collant dans le forum, j'ai bien :
BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());
       Image img = btoi.createImage(buf);

Mais le problème viet du fait que ma vidéo est en mpg et que ca fonctionne pas avec le mpeg, j'ia mis un avi, j'ai plus ce problème.

signaler à un administrateur
Commentaire de grigri2 le 16/12/2006 16:15:12

Bonjour, j'ai une erreur lorsque j'installe le JMF. l'erreur est du à javaw.exe Lorsque j'exécute le code, la meme erreure revient. Savez-vous comment faire? Merci

signaler à un administrateur
Commentaire de mageti le 17/12/2006 08:19:01

Désolé, je ne sait pas comment faire si vous ne me donnez pas l'erreur... La seule chose que je peut recommander, là, v'est de rénstaller au moins le JMF (voire le JDK).

signaler à un administrateur
Commentaire de grigri2 le 17/12/2006 10:41:28

salut
C'est un problème détecter par Windows. Il ouvre une fenêtre qui dit ceci:

javaw.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.
Voulez-vous envoyer le rapport d'erreur.

Je ne peux pas vous en dire plus. J'ai déjà essayer de réinstaller JMF et j'ai meme formatter mon PC. Mais rien n'y fait.
Merci
vincent

signaler à un administrateur
Commentaire de grigri2 le 17/12/2006 13:51:12

C'est bon, j'ai trouvé le problème, j'ai télécharger la dernière version du pilote et du programme pour ma webcam et maintenant c'est ok.

signaler à un administrateur
Commentaire de info2222 le 08/04/2007 17:03:13

mon compilateur peut pas accepte ces 02 ligne

#  ml = new MediaLocator("vfw://0");
# player = Manager.createRealizedPlayer(ml);

jai un projet utilise le webcam si vous aves des document sur la camera ou sur   jMF   me les enveyer
mon email inffo2222@yahoo.fr

merci

signaler à un administrateur
Commentaire de info2222 le 08/04/2007 17:16:19

salut
j'ai trouver un pbm dans le 02 lignes suivantes:


ml = new MediaLocator("vfw://0");

player = Manager.createRealizedPlayer(ml);
la classe manager est persent je pense que le pbm est dans createRealizedPlayer

je veut des document svp sur des jmf

merci

signaler à un administrateur
Commentaire de mageti le 08/04/2007 22:06:25

1. merci d'écrire français, ce n'est absolument pas engageant.Merci d'avance;
2. les seuls documents sur le JMF que j'utilise se trouve dans la documentation officielle sur le site de Java plus un peu de recherche sur internet avec google;
3. êtes-vous sûr d'avoir bien installé le JMF ?

signaler à un administrateur
Commentaire de info2222 le 11/04/2007 03:24:30

hello
j'ai enfin trouve la solution de ce pbm s'est un peu facile apres de efforts personnel sans aide enfin

thank you very much MAGETI

signaler à un administrateur
Commentaire de faffou87 le 16/11/2007 14:27:59

trés bien

signaler à un administrateur
Commentaire de gui8676 le 06/12/2007 20:13:31

Bonjour,

Je trouve ce code tres bien.

Par contre je voudrais l'utiliser sous mon ubuntu. Or il y a un problème:
#  String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
#  di = CaptureDeviceManager.getDevice(str2);
Ceci ne fonctionne pas, normal je suis sous Ubuntu. Qu'est ce que je dois modifier

Merci d'avance de vos reponses

Guillaume

signaler à un administrateur
Commentaire de mageti le 06/12/2007 20:57:19

Bonjour,
pour un fonctionnement sous ubuntu et linux en général, je pense qu'il faut remplacer
"vfw:Microsoft WDM Image Capture (Win32):0"
par
"/dev/video" ou "/dev/video0"
je n'ai pas testé, mais, à priori, ça devrait marcher, car c'est là que se trouve le flux vidéo qui sort d'une webcam, en général.
Tenez-moi au courant, comme ça je pourrais ajouter ça dans les possibilités du code.

signaler à un administrateur
Commentaire de gui8676 le 11/12/2007 13:49:54

Merci de ta reponse MAGETI mais cela ne fonctionne toujours pas
Ce qu'il faut change c'est le "vfw://0" de ml = new MediaLocator("vfw://0");

Guillaume

signaler à un administrateur
Commentaire de mageti le 12/12/2007 10:10:52

Bon, alors,  essaie avec "v4l://0" au lieu de "vfw://0", en espérant que ça va fonctionner cette fois-ci. (bien entendu, il faut que les bons drivers soient installés, notamment ceux de Video4Linux)

signaler à un administrateur
Commentaire de gui8676 le 28/12/2007 00:11:58

J'ai essayé ce que tu m'as dit mais ca ne fonctionne toujours pas  et je laisse tomber.
En tout cas merci pour ton aide

signaler à un administrateur
Commentaire de gui8676 le 09/01/2008 13:50:26

Bonjour,

Quand j'utilise deux webcam differentes je n'obtiens pas les memes
dimensions pour la photo prise (320x240 ou 600x480). Comment puis je faire pour changer ca si c'est possible car je n'ai rien trouvé dans le code pour modifier cela.

Merci d'avance.

signaler à un administrateur
Commentaire de mageti le 09/01/2008 18:14:54

Bonjour,
Si la lecture de la JavaDoc ne te dérange pas, tu peux voir sur cette page : http://java.sun.com/products/java-media/jmf/2.1.1/apidocs/javax/media/SizeChangeEvent.html
j'avoue que pour le moment, je n'ai pas trop le temps de chercher beaucoup (cause : révisions pour des partiels, essentiellement)

signaler à un administrateur
Commentaire de grigri2 le 09/01/2008 19:08:40

Pour ta résolution qui n'est pas la même. C'est a cause du programme qui  gère ta webcam(le programme qui est donnée avec la webcam).
Je crois qu'il est aussi possible de définir la taille mais je ne sais pas si avec cette API on arrive. Je sais qu'avec les caméras réseau c'est possible. J'espère que j'ai pu t'aidé.

signaler à un administrateur
Commentaire de gui8676 le 09/01/2008 23:52:41

Merci de vos reponses,

Tout d'abord quan je change la resolution de la webcam dans le programme de gestion, cela fonctionne bien dans les applications classique de la webcam mais pas quand j'utilise ce code.

J'ai regardé la javadoc de SizeChangeEvent, donc j'ai créé un objet de type SizeChangeEvent comme ceci:

SizeChangeEvent sce = new SizeChangeEvent(player, 800, 600, 2.0f);

Mais apres je ne sais pas quoi faire de ce "sce"???

Encore merci de votre aide.

signaler à un administrateur
Commentaire de gui8676 le 21/02/2008 23:54:11

Bonjour,

Maintenant, j'aimerais remplacer ma webcam par mon camescope, donc j'ai branché mon camescope en USB et installé les drivers.

J'ai un logiciel livré avec qui me permet de l'utiliser en webcam et ca fonctionnne tres. Je l'utilise aussi comme webcam pour msn mais avec ce code ca ne fonctionne pas

J'ai l'erreur suivante:
java.io.IOException: Could not connect to capture device
java.io.IOException: Could not connect to capture device
javax.media.NoPlayerException: Error instantiating class: com.sun.media.protocol.vfw.DataSource : java.io.IOException: Could not connect to capture device
        at javax.media.Manager.createPlayerForContent(Manager.java:1362)
        at javax.media.Manager.createPlayer(Manager.java:417)
        at javax.media.Manager.createRealizedPlayer(Manager.java:553)

Avez vous une idee de ce qu'il faut modifier??
Merci d'avance

signaler à un administrateur
Commentaire de mageti le 22/02/2008 17:18:00

Bonjour,
La javadoc indique que ce genre d'erreurs arrive quand le programme ne peut pas se connecter à la webcam, typiquement parce qu'un autre programme l'utilise ou que ce n'est pas le même emplacement que précédemment.

signaler à un administrateur
Commentaire de Kiosquec le 13/03/2008 18:40:16

Merci pour ce programme, qui fonctionne... partiellement sur mon PC.
Quand je lance MMWebCam.java sous Eclipse, j'obtiens :

upload de l'image
Exception in thread "Timer-0" java.lang.NullPointerException
at com.javafr.webcamlive.mmwebcam.SwingCapture.saveJPG(SwingCapture.java:138)
at com.javafr.webcamlive.mmwebcam.SwingCapture.Capture(SwingCapture.java:113)
at com.javafr.webcamlive.mmwebcam.ThreadTask.run(ThreadTask.java:55)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)

J'ai déjà eu ce problème avec certaines versions de programmes de capture d'image via la Webcam, fondées sur le même principe. (On en retrouve un tronc commun sur divers sites). Quand un bouton " Capture " existe, la capture fonctionne. Quand la photo doit être capturée automatiquement, ça se plante. Bizarrement, au début, quand je n'avais pas paramétré FTP, le programme de capture semblait fonctionner, au prix d'une pile d'erreurs d'upload. La fenêtre de capture affichait bien un cliché par seconde. Mais c'est désormais le grand blanc, même quand je remets la version brute de décoffrage qui tournait à peu près (hormis l'upload).

Par ailleurs, j'aimerais avoir une description de l'installation complète du logiciel. Que faut-il mettre sur le PC client ? Que faut-il sur le PC Serveur ? Que faut-il lancer  et comment ? Je suppose qu'il s'agit de questions triviales, mais comme je débute, j'ai toujours beaucoup de difficultés à trouver ce qu'il faut mettre ici ou là, notamment dès qu'il est question d'applets. Par exemple, je ne vois pas bien comment et surtout où index.php va chercher l'image à afficher. (Ce serait bien lié à un paramétrage du serveur ftp, non ? Genre dossier commun).

signaler à un administrateur
Commentaire de Kiosquec le 14/03/2008 16:55:51

Maintenant, ça marche. Allez savoir pourquoi ?

signaler à un administrateur
Commentaire de mageti le 18/03/2008 19:18:13

Bonjour Kiosquec,
J'avoue que je ne vois pas vraiment pourquoi tu obtiens des erreurs comme ça... vraiment bizarre.
Pour ce qui est de faire une applet java pour mettre sur un serveur web, j'avoue que je ne ma suis pas beaucoup penché sur la question. Par contre, on trouve pas mal de codes sur internet et sur javafr.com, par exemple:
http://www.javafr.com/codes/WEBCAM-LIVE_30081.aspx
http://www.javafr.com/codes/SERVEUR-WEBCAM_31811.aspx
http://www.javafr.com/codes/WEBCAM-HTTP-SERVEUR-LIVE-SANS-JMF_45851.aspx
Tu dois pouvoir trouver tout ce que tu veux sur le net.

signaler à un administrateur
Commentaire de agussi le 17/04/2008 16:00:45

Bonjour a tous,

je recherche un code java me permettant de capturer le flux video d'une webcam, y ajouter l'horodatage et l'enregistrer dans un format video compatible linux et windows.
JMF me semble bien pour faire cela. Auriez vous un code existant faisant deja cela ?

Merci d'avance pour vos reponses.