Logo Mon Club Elec

Processing – GSVideo : Capture de 8 flux webcams simultanément

Processing – GSVideo est un outil puissant qui permet aux utilisateurs de capturer jusqu’à 8 flux webcams simultanément. Il offre une variété de fonctionnalités qui peuvent être utilisées pour créer des expériences interactives et visuelles uniques. Cet article explorera les différentes fonctionnalités de Processing – GSVideo et comment elles peuvent être utilisées pour capturer des flux webcams simultanément.

Processing – GSVideo : Capture de 8 flux webcams simultanément

Par X. HINAULT. Février 2012.

Processing – GSVideo : Capture de 8 flux webcams simultanément

Explication

  • L’idée ici est de pousser GSVIdeo dans ses retranchements : j’ai donc utilisé jusqu’à 8 webcams simultanément sous Ubuntu avec la librairie GSVideo. Ce n’est pas forcément la limite, mais c’est la « proof of concept », la preuve du concept.

Matériel et configuration utilisés

  • PC Intel Core Quad 2.33 Ghz
  • 8 Webcam(s) notamment USB Hercules DualPix Exchange, Logitech C270 HD
  • Ubuntu 10.04 LTS
  • Processing 1-5
  • Librairie GSVideo 0.9 ou 1.0

Ressources utiles

Le programme

// Programme processing
// généré avec le générateur de code Processing
// du site www.mon-club-elec.fr
// par X. HINAULT – tous droits réservés

// Programme écrit le : 29/11/2011.

// ——- Licence du code de ce programme : GPL v3—–
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

/////////////// Description du programme ////////////
// Utilise la librairie GSVideo de capture et lecture vidéo
// test de la capture avec 8 webcams simultanément

// XXXXXXXXXXXXXXXXXXXXXX ENTETE DECLARATIVE XXXXXXXXXXXXXXXXXXXXXX

// inclusion des librairies utilisées

import codeanticode.gsvideo.*; // importe la librairie vidéo GSVideo qui implémente GStreamer pour Processing (compatible Linux)
// librairie comparable à la librairie native vidéo de Processing (qui implémente QuickTime..)- Voir Reference librairie Video Processing
// cette librairie doit être présente dans le répertoire modes/java/libraries du répertoire Processing (1-5)
// voir ici : http://gsvideo.sourceforge.net/
// et ici : http://codeanticode.wordpress.com/2011/05/16/gsvideo-09-release

// déclaration objets

GSCapture cam1, cam2, cam3, cam4, cam5, cam6,  cam7, cam8; // déclare les objets GSCapture représentant les webcams
// L’objet GSCapture étend PImage – se comporte comme un conteneur des frames issues de la webcam

// Testé sous Ubuntu 10.04 LTS avec 4 x Hercules DualPix exchange et 3 x C270 HD (Logitech) et 1x Hercules Optical Glass
// déclaration variables globales

//—— déclaration des variables de couleur utiles —-
int jaune=color(255,255,0);
int vert=color(0,255,0);
int rouge=color(255,0,0);
int bleu=color(0,0,255);
int noir=color(0,0,0);
int blanc=color(255,255,255);
int bleuclair=color(0,255,255);
int violet=color(255,0,255);

// variable pour la taille de la capture video – idem 3 webcam
int widthCapture=320; // largeur capture
int heightCapture=240; // hauteur capture
int fpsCapture=25; // framerate pour la capture

// XXXXXXXXXXXXXXXXXXXXXX  Fonction SETUP XXXXXXXXXXXXXXXXXXXXXX

void setup(){ // fonction d’initialisation exécutée 1 fois au démarrage

        // —- initialisation paramètres graphiques utilisés
        colorMode(RGB, 255,255,255); // fixe format couleur R G B pour fill, stroke, etc…
        fill(0,0,255); // couleur remplissage RGB – noFill() si pas de remplissage
        stroke (0,0,0); // couleur pourtour RGB – noStroke() si pas de pourtour
        rectMode(CORNER); // origine rectangle : CORNER = coin sup gauche | CENTER : centre
        imageMode(CORNER); // origine image : CORNER = coin sup gauche | CENTER : centre
        ellipseMode(CENTER); // origine cercles / ellipses : CENTER : centre (autres : RADIUS, CORNERS, CORNER
        //strokeWeight(0); // largeur pourtour
        frameRate(10);// Images par seconde – The default rate is 60 frames per second

        // — initialisation fenêtre de base —
        size(widthCapture*3, heightCapture*3); // ouvre une fenêtre xpixels  x ypixels
        background(0,0,0); // couleur fond fenetre

// — initialisation des objets et fonctionnalités utilisées —

        //======== Initialisation Objets GSVideo (capture et/ou lecture video =========

        //—- 1ère webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        //cam1 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video0″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam1 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video0 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        // largeur et hauteur doivent être compatible avec la webcam – typiquement 160×120 ou 320×240 ou 640×480…
        // la liste des webcam installées sous Ubuntu (Gnu/Linux) est donnée par la commande : ls /dev/video*

        // cam1.play();  // démarre objet GSCapture = la webcam – version GSVideo avant 0.9
        cam1.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 2ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        //cam2 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video1″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam2 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video1 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam2.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 3ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        // cam3 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video2″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam3 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video2 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam3.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 4ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        // cam4 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video3″); // Initialise objet GSCapture désignant webcam- avant GSVideo 1.0
        cam4 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video3 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam4.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 5ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        // cam5 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video4″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam5 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video4 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam5.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 6ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        //cam6 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video5″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam6 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video5 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam6.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 7ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        // cam7 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video6″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam7 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video6 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam7.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

        //—- 8ème webcam —
        // GSCapture(this, int requestWidth, int requestHeight, [int frameRate], [String sourceName], [String cameraName])
        //cam8 = new GSCapture(this, widthCapture, heightCapture,fpsCapture, »v4l2src », »/dev/video7″); // Initialise objet GSCapture désignant webcam – avant GSVideo 1.0
        cam8 = new GSCapture(this, widthCapture, heightCapture,« v4l2src »,« /dev/video7 », fpsCapture); // Initialise objet GSCapture désignant webcam – depuis GSVideo 1.0
        cam8.start();  // démarre objet GSCapture = la webcam – version GSVideo après 0.9

} // fin fonction Setup

// XXXXXXXXXXXXXXXXXXXXXX Fonction Draw XXXXXXXXXXXXXXXXXXXX

void  draw() { // fonction exécutée en boucle

  if (cam1.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam1.read();// acquisition d’une nouvelle frame
    set(0, 0, cam1); // affiche image – plus rapide
  }

  if (cam2.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam2.read(); // acquisition d’une nouvelle frame
    set(widthCapture*1, 0, cam2); // acquisition d’une nouvelle frame
  }

  if (cam3.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam3.read(); // acquisition d’une nouvelle frame
    set(widthCapture*2, 0, cam3); // acquisition d’une nouvelle frame
  }

  if (cam4.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam4.read(); // acquisition d’une nouvelle frame
    set(0, heightCapture, cam4); // acquisition d’une nouvelle frame
  }

  if (cam5.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam5.read(); // acquisition d’une nouvelle frame
    set(widthCapture, heightCapture, cam5); // acquisition d’une nouvelle frame
  }

  if (cam6.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam6.read(); // acquisition d’une nouvelle frame
    set(widthCapture*2, heightCapture, cam6); // acquisition d’une nouvelle frame
  }

  if (cam7.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam7.read(); // acquisition d’une nouvelle frame
    set(0, heightCapture*2, cam7); // acquisition d’une nouvelle frame
  }

  if (cam8.available() == true) { // si une nouvelle frame est disponible sur la webcam
    cam8.read(); // acquisition d’une nouvelle frame
    set(widthCapture, heightCapture*2, cam8); // acquisition d’une nouvelle frame
  }
        // while(true); // stoppe boucle draw

} // fin de la fonction draw()

// XXXXXXXXXXXXXXXXXXXXXX Autres Fonctions XXXXXXXXXXXXXXXXXXXXXX

//— évènement capture vidéo avec librairie GSVideo—
//void captureEvent(GSCapture cam) { // est appelée lorsqu’une capture (nouvelle frame) survient – cam quelconque
// cf doc librairie Video Processing – cf exemple Capture LivePocky

   // cette fonction est appelée à chaque fois qu’une nouvelle frame est disponible, quelque soit la caméra
   // utiliser des conditions pour tester la caméra disponible

  //} // fin fonction évènement captureEvent()

//————- Fonction d’arret de Processing —-

public void stop(){ // fonction d’arrêt de Processing

        cam1.delete(); // efface l’objet GScapture
        cam2.delete(); // efface l’objet GScapture
        cam3.delete(); // efface l’objet GScapture

        super.stop(); // obligatoire

} // fin fonction stop()

//XXXXXXXXXXXXXXXXXX Fin du programme XXXXXXXXXXXXXXXXX

 

Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.