begin process at 2012 02 04 14:55:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimedia

 > CAPTURE DE PHOTOS À PARTIR D'UNE WEBCAM

CAPTURE DE PHOTOS À PARTIR D'UNE WEBCAM


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : mageti

Ecrire un message privé
Commentaire sur cette source (77)
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.

 Sources de la même categorie

MINIMP3PLAYER par phlyper
SELECTION DANS UNE IMAGE par marwenjava
Source avec Zip Source avec une capture TRAITMENT D'IMAGE EN JAVA par marwenjava
FLV TO MP3 par beeline
Source avec Zip SWT CUSTOM FILE BROWSER par grandtix

Commentaires et avis

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

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

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.

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+

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.

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+

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.

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.

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

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.

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

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.

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.

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û.

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é...

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.

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.

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

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.

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 - ?

Commentaire de mageti le 05/02/2006 20:19:36

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

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

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.

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>

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>

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.

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 ?

Commentaire de bagnoula le 17/02/2006 21:10:12

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

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)

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.

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 !

Commentaire de mageti le 03/05/2006 18:50:37

Heu, tu as bien installé le JMF ?

Commentaire de newrose le 04/05/2006 10:54:16

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

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.

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

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

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 !

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.

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 ?

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 ?

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)

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.

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.

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

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).

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

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.

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

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

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 ?

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

Commentaire de faffou87 le 16/11/2007 14:27:59

trés bien

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

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.

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

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)

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

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.

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)

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é.

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.

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

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.

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).

Commentaire de Kiosquec le 14/03/2008 16:55:51

Maintenant, ça marche. Allez savoir pourquoi ?

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.

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.

Commentaire de mageti le 21/04/2008 19:06:51

Bonjour Agussi,

Je suis désolé, mais, j'avoue que je ne sais pas faire ça en java et je n'ai pas d'exemple de code sous la main...
Désolé.

Mageti

Commentaire de salmaoualha le 11/11/2008 21:44:44

bonjour
j ai essaye de compiler ce code ,ma web cam demarre et quand j essaye de capturer je recois ce message d 'erreur: "Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: OutputStream is null.
        at sun.awt.image.codec.JPEGImageEncoderImpl.<init>(JPEGImageEncoderImpl.java:85)"
et l image ne sera ma enregistee.
merci pour votre aide

Commentaire de akramou1111 le 21/07/2009 11:05:43

salut mageti,,j'arrive à exécuter ton code mais le bouton qui capte la photo n'existe pas!!

Commentaire de alzaouti le 10/09/2009 14:21:32

Bonjour, Mageti   est ce que  ta une idée pour capter des images d'une webcam d'un  pc  a distance

Commentaire de Morrissey le 04/01/2010 08:31:56

Bonjour,

Ca fait longtemps que je galère pour essayer de résoudre mon pb mais là je capitule, je ne trouve pas.
Pourrais-tu me dire comment faire pour avoir les :

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

ton code ne compile pas chez moi car je ne n'ai pas ces librairies.
pourtant j'ai bien installé JMF 2.1.1

je te remercie de bien vouloir m'aiguiller afin que je puisse faire fonctionner ton code. Ca m'aiderait beaucoup dans mon projet.

A+

Commentaire de mageti le 04/01/2010 11:04:13

Bonjour Morrissey,

Tu utilise quel version du JDK utilises-tu ?
Quand j'ai fait ce programme je devais utiliser la 1.4, je crois..., mais d'après cette discussion (http://www.mail-archive.com/java2d-interest@capra.eng.sun.com/msg04226.html) il semblerait qu'effectivement, les classes com.sun.* posent problèmes...
Par contre, ça fait un bail que je ne fait plus de java, alors je ne vais pas pouvoir t'aider plus...

Mageti

Commentaire de Morrissey le 04/01/2010 12:22:45

Bonjour et merci pour cette réponse très rapide.
J'utilise JDK 1.6
Donc si tu n'es plus dedans, pas grave je vais essayer de voir autrement.
Merci beaucoup.

Commentaire de Baleb le 25/08/2010 20:53:09

Comment faire pour afficher l'image capturée de la webCam sur deux Fenetres ?

Commentaire de era le 31/08/2010 13:46:44

pour la jdk 1.6 il faut recrire l appli mais aujourd hui si vous regarde l api media de sun
integre tout cela.
pour l affichage des 2 fenetres je comprends pas ?

Commentaire de jeefemmanuel le 13/06/2011 12:09:34

je suis un débutant en java...
ton code ma bcp aidé, je l'ai incorporé dans une applet quand je l'exécute (l'applet) à partir eclipse sa marche et j'arrive même à enregistrer les images sur mon disque dure , mais quand j'exécute à partir d'un navigateur web, le webcam fonctionne mais le premier problème le bouton capture n'enregistre pas les images sur mon disque dure et aussi quand on actualise la page il y a un problème l'applet ne fonctionne pas sa plante, et aussi j'ai essayé de signer l'applet ,mais je ne sais pas utiliser le jar que j'ai généré après avoir signer l'applet, comment déployer ce jar ou l'éxécuter dans une page web?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales