returning/finding the position and change in positions of HAAR cascades
in
Contributed Library Questions
•
1 year ago
Hi all,
I am using javaCVpro, but I think this may be a more general programming question (please correct me if I am wrong).
It's a CV-based library, and I am using some example code for detecting faces. There is a function being called that draws a rectangle where a face is detected, and I want to keep track of (in the program) where the face is, where it was, and how fast it's moving:
- // Programme d'exemple de la librairie javacvPro
- // par X. HINAULT - Mars 2012
- // Tous droits réservés - Licence GPLv3
- // Exemple fonction Cascade - détection de visages
- 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/
- import monclubelec.javacvPro.*; // importe la librairie javacvPro
- import java.awt.*; // pour classes Point , Rectangle..
- PImage img;
- Rectangle[] faceRect;
- GSCapture cam; // 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
- int widthCapture=320; // largeur image capture
- int heightCapture=240; // hauteur image capture
- int fpsCapture=30; // framerate de Capture
- int millis0=0; // variable mémorisation millis()
- void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage
- //--- initialise fenêtre Processing
- size (widthCapture, heightCapture); // crée une fenêtre Processing de la 2xtaille du buffer principal OpenCV
- //size (img.width, img.height); // aalternative en se basant sur l'image d'origine
- frameRate(fpsCapture); // taux de rafraichissement de l'image
- //---- initialise la webcam ---
- //cam = new GSCapture(this, widthCapture, heightCapture); // forme simplifiée
- cam = new GSCapture(this, widthCapture, heightCapture); // Initialise objet GSCapture désignant webcam - forme complète
- //--- initialise OpenCV ---
- opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This
- opencv.allocate(widthCapture, heightCapture); // initialise les buffers OpenCv à la taille de l'image
- // cam.start(); // démarre objet GSCapture = la webcam
- //-- charge le fichier de description ---
- //opencv.cascade("FRONTALFACE_ALT", true); // initialise détection de visage
- opencv.cascade("C:/OpenCV 2.3.1/data/haarcascades/","haarcascade_frontalface_alt.xml"); // utilise chemin absolu Rép + nom fichier
- // supporte chemin absolu avec ou sans / en fin de chaine
- }
- void draw() { // fonction exécutée en boucle
- // Code capture GSVideo
- if (cam.available() == true) { // si une nouvelle frame est disponible sur la webcam
- //background(0); // fond noir entre 2 images
- //------ gestion image webcam par GSCapture ------
- cam.read(); // acquisition d'un frame
- //image(cam1, 0, 0); // affiche image
- //set(0, 0, cam); // affiche image - plus rapide
- //------- gestion image par Opencv ----------
- img=cam.get(); // récupère l'image GS video dans Pimage
- millis0=millis(); // mémorise millis()
- opencv.copy(img); // charge l'image GSVideo dans le buffer openCV
- println("Durée chargement buffer OpenCV=" + (millis()-millis0)+"ms.");
- //--- affiche image de départ avant opération sur image ---
- image(img,0,0); // affiche le buffer principal OpenCV dans la fenêtre Processing
- //--- opérations sur image ---
- millis0=millis(); // mémorise millis()
- //faceRect = opencv.detect(true); // détection des visages avec messages debug
- faceRect = opencv.detect(true); // détection des visages avec coeff vitesse élevée et messages debug
- opencv.drawRectDetect(true); // affiche les rectangles détectés avec messages debug
- //opencv.drawRectDetect (0, 0, 1, color(255,255,0), 3 , true, color(0,0,255), true);
- println("Nombre de visages de face détectés =" + faceRect.length + ".");
- println("Durée traitement image par OpenCV=" + (millis()-millis0)+" ms.");
- //println("location of face" + faceRect );
- //--- affiche image finale ---
- image(opencv.getBuffer(),widthCapture,0); // affiche le buffer principal OpenCV dans la fenêtre Processing
- } // fin if available
- } // fin draw
And there is this output that I want to access info from, but don't know how to. See It's like I see the info I want in the output debug window, but I don't understand how to write essentially opencvRect . xPosition and yPosition. See the Rectangle 0 : x = 155, etc? How do I dig that out of the code?
"
Nombre de visages de face détectés =1.
Durée traitement image par OpenCV=65 ms.
Durée chargement buffer OpenCV=40ms.
Nombre objets détectés =1
Rectangle 0 : x=155 | y=95 | w=94 | h=94
Rectangle 0 : x=155 | y=95 | w=94 | h=94
Nombre de visages de face détectés =1.
Durée traitement image par OpenCV=93 ms.
"
THANKS EVERYONE IN ADVANCE!!!
1