Lorsque l’on veut accéder à la webcam avec la librairie video et l’objet Capture, il n’est pas rare que rien ne fonctionne alors même que la caméra est présente et qu’elle fonctionne de manière satisfaisante avec tous les autres logiciels (mais attention, deux logiciels différents ne peuvent pas accéder à une même caméra en même temps !)
Le problème le plus courant est que la définition de la capture que vous voulez obtenir ne fait pas partie des définitions d’image disponibles pour la caméra. Souvent, le format 640×480 est disponible mais il peut tout à fait être absent de la liste des possibilités, notamment avec les webcams récentes, qui sont prévues pour des formats supérieurs.
Le modeste programme qui suit vous permet de connaître la liste de toutes les caméras accessibles par Processing :
import processing.video.*; String[] cameras = Capture.list(); for(String c:cameras){ println(c); }
Il suffit de le lancer pour obtenir, dans la console, une liste de possibilités.
Le résultat sera parfois un simple nom, comme « Logitech HD Webcam C270 », et parfois, une liste signalant les formats disponibles (320×240 à 60 images par seconde, par ex.).
Vous pourrez alors adapter l’initialisation de la capture en conséquence, soit en saisissant le nom du modèle (écrit exactement pareil) :
new Capture(this, "Logitech HD Webcam C270");
Cette méthode (avec le nom exact) est particulièrement importante lorsque plusieurs caméras différents sont connectées au même ordinateur.
S’il n’y a qu’une caméra, on peut se contenter de proposer la définition d’image trouvée (en supposant, dans ce cas, qu’il existe un format 320 x 240 pixels dans la liste) :
new Capture(this, 320, 240);
Voici enfin un simple programme qui :
– importe la librairie vidéo
– déclare un objet Capture() et l’initialise
– adapte le format de la fenêtre à celui de la capture
– et qui lit l’image capturée (si disponible) et l’affiche :
import processing.video.*; Capture cap; void setup(){ cap = new Capture(this, "Logitech HD Webcam C270"); cap.start(); surface.setSize(cap.width, cap.height); } void draw(){ if(cap.available()){ cap.read(); image(cap,0,0); } }