Sites


Processing

L'entrée vidéo

Processing permet de capturer les images provenant d'une caméra vidéo connectée à votre ordinateur par un câble ou à distance via le Wifi ou même Internet. Ces images peuvent ensuite être affichées dans la fenêtre de visualisation de votre sketch et le cas échéant, modifiées en fonction de vos besoins. Les applications créatives de l'entrée vidéo sont multiples.

Les types de caméras supportées

Les caméras les plus simples à utiliser sont les caméras USB, souvent appelées caméras Web. Il est également possible d'employer des caméras que l'on branche sur un port IEEE1394 (Firewire) comme les caméras DC1394 et les caméras DV.

Pour exploiter l’entrée vidéo, il est nécessaire d’utiliser la librairie «video», basée sur la libraire GStreamer. Tous les composants nécessaires au bon fonctionnement de la classe Capture sont installés par défaut avec Processing.

Capturer des images avec la librairie vidéo

Sous réserve que vous soyez sur Mac OS X ou Windows, voyons à présent comment utiliser la librairie video. Tout d'abord il faut importer la librairie vidéo en cliquant dans le menu Sketch > Import Library... > video. Une ligne de code s'affichera au début de votre programme :

import processing.video.*;

Ensuite nous allons déclarer une variable qui stockera notre objet Camera. Dans la méthode setup(), nous allons lister l’ensemble des combinaisons «caméra(s) branchée(s) / résolution / nombre d’images par seconde». Pour cela nous utiliser la fonction statique list() de la classe Capture, qui nous retourne un tableau contenant les différentes possibilités.

Notez que vous devez déjà avoir connecté et installé cette caméra vidéo sur votre ordinateur pour faire fonctionner l’exemple suivant. Une fois les caractéristiques identifiées, nous allons construire une instance de l’objet Capture en passant en paramètre une des descriptions de la liste récupérée. Par défaut, nous utiliserons le premier élément (d’index 0) et nous démarrons la capture en appelant la méthode start() sur notre instance fraîchement créée.

Si jamais une erreur se produit au moment du démarrage du programme, essayez d’autres index (en veillant de ne pas dépasser l’index maximum de la liste)

import processing.video.*;
Capture camera;

void setup() {
  size(640, 480);
  background(0);

  String[] devices = Capture.list();
  println(devices);

  camera = new Capture(this, 320, 240, devices[0]);
  camera.start();
}

Le code précédent devrait afficher la liste dans la console comme le montre l'image suivante.

L'étape suivante consiste à préciser dans la méthode draw() que nous affichons la dernière image obtenue par la caméra en vérifiant qu'une nouvelle est bien disponible (via la méthode available()). En effet, les images sont reçues de la caméra vidéo à une certaine fréquence (ex: 30 fois par seconde) ce qui ne correspond pas forcément à la fréquence d'affichage de notre sketch. Dans l'exemple ci-dessous, nous avons demandé à notre programme d'appliquer sur l'image captée un filtre de solarisation (inversion des valeurs d'ombre et de lumière).

void draw() {
  if (camera.available()) {
    camera.read();

    camera.filter(INVERT);
    image(camera, 160, 100);
  }
}

La variable de type Capture peut être utilisée de la même manière qu'une variable de type PImage : il est possible de lire les pixels de l'image, la transformer, l'afficher plusieurs fois à l'écran, et bien d'autres choses encore.

video

Le programme complet de notre exemple :

import processing.video.*;

Capture camera;

void setup() {
  size(640, 480);
  background(0);

  String[] devices = Capture.list();
  println(devices);

  camera = new Capture(this, 320, 240, devices[0]);
}

void draw() {
  if (camera.available()) {
    camera.read();

    camera.filter(INVERT);
    image(camera, 160, 100);
  }
}

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.