From Référence Librairie javadocPro

Main: JavacvProStrategiesTrackingVisageCascade


Librairie JavacvPro | Strategies

Stratégies : Suivi d'objet de visage (Tracking) : Détection et suivi d'un visage.


Explication

Remarques techniques

Fonction javacvPro utilisées :

Code d'exemple


// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - décembre 2011
// Tous droits réservés - Licence GPLv3

// Exemple utilisation de la capture d'un flux video avec JavacvPro et GSVideo


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

import monclubelec.javacvPro.*; // importe la librairie javacvPro

import java.awt.*; // pour classes Point , Rectangle..


GSCapture cam1; // déclare un objet GSCapture représentant une webcam
// L'objet GSCapture étend PImage - se comporte comme un conteneur des frames issues de la webcam

OpenCV opencv; // déclare un objet OpenCV principal

Rectangle[] faceRect;

PImage imgSrc;

int widthCapture=320;
int heightCapture=240;
int fpsCapture=20;

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

        size(widthCapture,heightCapture);

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

        // 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
        // largeur et hauteur doivent être compatible avec la webcam - typiquement 160x120 ou 320x240 ou 640x480...
        // Meilleurs résultats avec framerate webcam entre 20 et 30 et frameRate programme idem ou multiple plus grand (40 pour 20 par ex)
        // 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

        //======== Initialisation Objets OpenCV (librairie javacvPro : traitement d'image et reconnaissance visuelle) =========

        opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This
        opencv.allocate(widthCapture,heightCapture); // crée le buffer image de la taille voulue

        //-- charge le fichier de description ---        
        //opencv.cascade("FRONTALFACE_ALT", true); // initialise détection de visage
        opencv.cascade("/usr/share/opencv/haarcascades/","haarcascade_frontalface_alt.xml"); // utilise chemin absolu Rép + nom fichier


}


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'un frame

    imgSrc=cam1.get(); // récupère l'image GS video dans Pimage
    opencv.copy(imgSrc); // charge l'image dans le buffer openCV

    //opencv.copy(cam1.get()); // autre possibilité - charge directement l'image GSVideo dans le buffer openCV

    image(opencv.getBuffer(),0,0); // affiche flux vidéo direct depuis OpenCV

    //--- détection des visages et tracé rectangle de détection

    faceRect = opencv.detect(true); // détection des visages avec messages debug

    opencv.drawRectDetect(true); // affiche les rectangles détectés avec messages debug

    println("Nombre de visages de face détectés =" + faceRect.length + ".");

        //--- récupérer les coordonnées des visages détectés ---

        if (faceRect.length>=1) { // si au moins un visage détecté

          for (int i=0; i<faceRect.length; i++) { // défile les rectangles

                int xCenter=(faceRect[i].x+(faceRect[i].width/2));              
                int yCenter=(faceRect[i].y+(faceRect[i].height/2));

                print(" Rect " + i + " : centre : x =" + xCenter);
                print(" | y =" + yCenter);

                fill(255,255,0);
                stroke(255,255,0);                
                ellipse (xCenter, yCenter, 5,5);

                // mettre ici au besoin le code des actions à effectuer en fonction de la position du Blob

          } // fin for

        } // fin if blobsArraySelect



  } // fin if cam1 available

} // fin fonction draw
 
Retrieved from http://www.mon-club-elec.fr/pmwiki_reference_lib_javacvPro/pmwiki.php?n=Main.JavacvProStrategiesTrackingVisageCascade
Page last modified on December 10, 2011, at 06:12 AM