Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2009-11-20 01:17:46 help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

help multitraking+thresholding en Processing



salut!

J'aurais besoin d'une aide dans Processing pour développer projette pour un exposition d'art à Nantes (deadline=3dicembre).

Je dois faire à un Multitracking avec Thresholding en Processing avec un stop-image pour 7 secondes chaque de 5 secondes.
Du Threshold me servirait avoir seulement la silhouette des personnes blanche...et associer à chaque silhouette un nombre divergé.
Est-il possible faire cette chose (multitraking+thresholding+siluette+nombre) avec Processing o je dois utiliser un autre logiciel? quelqu'un m'aider avec le patch?

merci beaucoup!!!

Hors ligne

 

#2 2009-11-20 16:45:11 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



j'ai réussi à associer le tracking au nombre mais je ne réussis pas à régler te thresholding en mode décente et je ne sais pas comme faire le multitracking.. j'ai déchargé un programme osc qu'on appelle CCV_MultiCam (pour le multitouch ) qui communique à travers le gate 3000 mais je ne connais pas le code dans processing pour ouvrir le gate.

Hors ligne

 

#3 2009-11-20 19:09:15 Re : help multitraking+thresholding en Processing

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: help multitraking+thresholding en Processing



Bonjour Valeria et bienvenue,

Est ce que tu peux en dire plus sur les librairies que tu utilises, peut-être envoyer ton code ?

+ une discussion sur le multitracking avec processing : http://codelab.fr/176

Est ce que tu connais http://ubaa.net/shared/processing/opencv/ ?

Hors ligne

 

#4 2009-11-21 22:28:20 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



bon soir, merci pour avoir répondu.
Je n'ai jamais travaillé avec Processing mais j'ai réussi à me tirer deux patch que j'espère puissent être un bon entame pour réaliser le projette.
J'ai éprouvé à suivre les instructions pour insérer dans la librairie de Processing l' OpenCV pour me pouvoir tirer les silhouette à partir de un multi blob mais je n'ai pas de résultats positifs. Je ne réussis pas à installer les librairies.
j'écris les deux codes que j'ai réussi à réaliser. Merci beaucoup.



----------------------------------------

Code (processing) :

//number+tracking+framerate(1)//


PFont fontA;
float radius = 50.0;
int X, Y;
int nX, nY;
int delay = 16;

int num = 60;
float mx[] = new float[num];
float my[] = new float[num];

import processing.video.*;

Capture video;



void setup() {

  size(640, 480); // Change size to 320 x 240 if too slow at 640 x 480
  
  video = new Capture(this, width, height, 30);
 
  smooth();
 
  fontA = loadFont("Courier-48.vlw");
   textFont(fontA, 30);
   strokeWeight( 10 );
  frameRate( 15 );
  X = width / 2;
  Y = width / 2;
  nX = X;
  nY = Y; 

video.frameRate(1);
}

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

    
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen
    int brightestX = 0; // X-coordinate of the brightest video pixel
    int brightestY = 0; // Y-coordinate of the brightest video pixel
    int fontAX = 0;
    int fontAY = 0;
    float brightestValue = 250; // Brightness of the brightest video pixel
    
    video.loadPixels();
    int index = 0;
    for (int y = 0; y < video.height; y++) {
      for (int x = 0; x < video.width; x++) {
        
        int pixelValue = video.pixels[index];
       
        float pixelBrightness = brightness(pixelValue);
        
              if (pixelBrightness > brightestValue) {
          brightestValue = pixelBrightness;
          brightestY = y;
          brightestX = x;
          nX = x;
          nY = y;
           for(int i=1; i<num; i++) {
    mx[i-1] = mx[i];
    my[i-1] = my[i];
 
  } 
  
   mx[num-1] = x;
  my[num-1] = y;
 
  
  
  for(int i=0; i<num; i++) {
    ellipse(mx[i], my[i], i/0.8, i/0.8);
    //text( Y, X, radius, radius );
  }
 
        }
        index++; 
      }
    }
     radius = radius + sin( frameCount / 4 );
      X+=(nX-X)/delay;
  Y+=(nY-Y)/delay;
   stroke(255); 
   text( Y, X, radius, radius );
      }
}

----------------

Code (processing) :

//silhouette//


import processing.video.*;
Capture video;


class Form {
	int[][] v = new int[0][3];
	int y;
	color c;
	Form(int x,int y) {
		this.y = y;
		addRow(x,y);
		this.c = lerpColor(#ff0000,#0000ff,1);	
	}
	
	void addRow(int x, int y) {
		int[] v_n = new int[3];
		v_n[0] = x;
		v_n[1] = x;
		v_n[2] = y;
		v = (int[][]) append(v, v_n);
	}
	
	void draw(int nr) {
		line(v[0][0],v[0][2],v[0][1],v[0][2]);
		for (int i=0;i<v.length-1;i++){
			stroke(c,35);
			strokeWeight(4);
			line(v[i][0],v[i][2],v[i+1][0],v[i+1][2]);
			line(v[i][1],v[i][2],v[i+1][1],v[i+1][2]);
		}
		line(v[v.length-1][0],v[v.length-1][2],v[v.length-1][1],v[v.length-1][2]);
	}
	
	String toString() {
		String a = "------------START---------\n";
		for (int i=0;i<v.length-1;i++){
			a+="["+v[i][0]+"|"+v[i][1]+"|"+v[i][2]+"]\n";
		}
		a +="------------END-----------\n";
		return a;
	}
} 


Form[] f =  new Form[0];

void setup() {
  size(640, 480);
  video = new Capture(this, width, height, 10);
  noStroke();
  smooth();
  ellipseMode(CENTER);
}

void draw() {
	//background(255);
	if (video.available()) {
		f = new Form[0];
		video.read();
		image(video, 0, 0, width, height);
		video.loadPixels();
		int index = 0;
		int raster = 4;
		for (int y = 0; y < video.height; y+=raster) {
		  for (int x = 0; x < video.width; x+=raster) {
		    int pixelValue = video.pixels[y*video.width+x];
		    boolean intresting = brightness(pixelValue)<80;
		    if (intresting) {
			    boolean old_spot = false;
			    for (int i=0; i<f.length && !old_spot ; i++){
				    Form fi = f[i];
				    int row = fi.v.length-1;
				    int dx = x-fi.v[row][1];
					int dy = y-fi.v[row][2];
				    if (dx<=2*raster && dy<=2*raster) {
					    old_spot = true;
					    if (fi.v[row][2]<y) {
						    fi.addRow(x,y);
					    }
					    else {
						    fi.v[row][1] = x;
					    }
				    }
			    }
			    if (!old_spot) {
				    Form new_form = new Form(x,y);
				    f = (Form[]) append(f,new_form);
			    }
		    }
		  }
		}
		
	}
	for (int i=0; i<f.length; i++) {
		f[i].draw(i);
	}
}

void keyPressed() {
	for (int i=0; i<f.length; i++) {
		print(f[i]);
	}
}

Hors ligne

 

#5 2009-11-23 09:49:16 Re : help multitraking+thresholding en Processing

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: help multitraking+thresholding en Processing



Bonjour,

Pour l'installation d'openCV, ça dépend de ta plateforme :
si tu es sur windows, peut-être que ça pourra t'aider : http://codelab.fr/1031#p4762
ou sur ubuntu jaunty : http://codelab.fr/1341

En dehors d'openCV, il existe aussi BlobDetection : http://www.v3ga.net/processing/BlobDetection/
et JMyron : http://webcamxtra.sourceforge.net/

Il me semble qu'aucune de ces 3 librairies ne propose de tracking mais en comparant les valeurs des centres de blobs, tu devrais pouvoir y arriver.

Hors ligne

 

#6 2009-12-01 16:27:43 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



Merci beaucoup.
j'ai réussi à tirer ceci et maintenant j'aurais besoin d'une aide sur le temps. je dois bloquer le temps chaque 4 secondes. j'ai réussi à le faire et me promène, mais si tu attends un peu il se bloque.... sad

---------------------------------------------

Code (processing) :

import processing.video.*;
Capture video;

int time=second();
int time_limit=3;


class Form {
  int[][] v = new int[0][3];
  int y;
  color c;
  Form(int x,int y) {
    this.y = y;
    addRow(x,y);
    this.c = lerpColor(210,210,100);	
  }

  void addRow(int x, int y) {
    int[] v_n = new int[3];
    v_n[0] = x;
    v_n[1] = x;
    v_n[2] = y;
    v = (int[][]) append(v, v_n);
  }

  void draw(int nr) {
    int time=second();
int time_limit=3;
    //line(v[0][0],v[0][2],v[0][1],v[0][2]);
    point(v[0][0],v[0][2]);
    point(v[0][1],v[0][2]);
    for (int i=0;i<v.length-1;i++){
      stroke(c,80);
      strokeWeight(10);
      //line(v[i][0],v[i][2],v[i+1][0],v[i+1][2]);
      //line(v[i][1],v[i][2],v[i+1][1],v[i+1][2]);
      point(v[i][0],v[i][2]);
      point(v[i][1],v[i][2]);
    }
    //line(v[v.length-1][0],v[v.length-1][2],v[v.length-1][1],v[v.length-1][2]);
    point(v[v.length-1][0],v[v.length-1][2]);
    point(v[v.length-1][1],v[v.length-1][2]);
  }

  String toString() {
    String a = "------------START---------\n";
    for (int i=0;i<v.length-1;i++){
      a+="["+v[i][0]+"|"+v[i][1]+"|"+v[i][2]+"]\n";
    }
    a +="------------END-----------\n";
    return a;
  }
} 


Form[] f =  new Form[0];

void setup() {
  size(640, 480);
  video = new Capture(this, width, height, 10);
  noStroke();
  smooth();
  ellipseMode(CENTER);

}

void draw() {

  if (second()-time>=time_limit){
    time=second();
    background(0);
    if (video.available()) {
      f = new Form[0];
      video.read();
      //image(video, 0, 0, width, height);
      video.loadPixels();
      int index = 0;
      int raster = 1;
      for (int y = 0; y < video.height; y+=raster) {
        for (int x = 0; x < video.width; x+=raster) {
          int pixelValue = video.pixels[y*video.width+x];
          boolean intresting = brightness(pixelValue)<80;
          if (intresting) {
            boolean old_spot = false;
            for (int i=0; i<f.length && !old_spot ; i++){
              Form fi = f[i];
              int row = fi.v.length-1;
              int dx = x-fi.v[row][1];
              int dy = y-fi.v[row][2];
              if (dx<=2*raster && dy<=2*raster) {
                old_spot = true;
                if (fi.v[row][2]<y) {
                  fi.addRow(x,y);
                }
                else {
                  fi.v[row][1] = x;
                }
              }
            }
            if (!old_spot) {
              Form new_form = new Form(x,y);
              f = (Form[]) append(f,new_form);
            }
          }
        }
      }

    }
    for (int i=0; i<f.length; i++) {
      f[i].draw(i);
    }
  }
}

void keyPressed() {
  for (int i=0; i<f.length; i++) {
    print(f[i]);
  }
}

Hors ligne

 

#7 2009-12-01 22:35:26 Re : help multitraking+thresholding en Processing

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: help multitraking+thresholding en Processing



valeria a écrit:

mais si tu attends un peu il se bloque....

Est ce qu'il y a un message d'erreur ?
Est ce que tu as regardé l'occupation de la mémoire ?
Est ce que tu as essayé de le débuguer, par exemple en plaçant des messages println à des endroits "sensibles" du code ?

Pour que l'image soit analysée toutes les 4 secondes, tu peux aussi utiliser la structure suivante :

int f;

void setup() {
  frameRate(1);
}
void draw() {
  if (f%4 == 0) {
    // PLACE TON CODE ICI !
    println("top");
  }
  f++;
}

En fait ce qui coince, c'est second() qui se base sur l'horloge système, si tu veux conserver cette approche utilises plutôt millis(), regardes ce qui se passe avec ce petit code, laisse le tourner et regarde ce qui s'affiche, tu comprendras ce qui ne va pas smile

int time=second();  
int f;
int time_limit = 3;

void draw() {  
  
  if (second() - time >= time_limit){  
     time = second();  
     f = 0;
  } else println(time + " " + f);
  f++;
}

Hors ligne

 

#8 2009-12-02 00:30:40 Re : help multitraking+thresholding en Processing

onze
membre
Lieu: Victoria BC
Date d'inscription: 2008-11-29
Messages: 30

Re: help multitraking+thresholding en Processing



iop

la meme avec une attente passive (ie: le programme fait dodo pendant le temps que tu lui dis):

try
{
  //blablabla ton code d'avant dodo
  Thread.sleep(4000);//dodo pendant 4*1000 millisecondes
  //blabla apres dodo
}
catch(ItrerruptedException ex){
//en cas de pepin ou quoi
}

ca depend si tu veux faire des trucs entre temps (ce que je n'ai pas trop saisi).

Hors ligne

 

#9 2009-12-03 16:24:09 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



valeria wrote:

    mais si tu attends un peu il se bloque....

l' image se bloque après un peu de temps qui le tempset fonctionne et il n'y a pas des erreurs visibles.
j'ai éprouvé à insérer le code que tu m'as donné mais il me marque comme erreur "int f".

---

pour onze : je ne sais pas où je dois éprouver à insérer le code que tu m'as gentillement écrit.
je dois insérer le code sous la voix "void drow ()" ? dans mon code mais dans quelle partie ?

---

merci pour l'aide!

Hors ligne

 

#10 2009-12-03 16:47:42 Re : help multitraking+thresholding en Processing

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: help multitraking+thresholding en Processing



valeria a écrit:

j'ai éprouvé à insérer le code que tu m'as donné mais il me marque comme erreur "int f".

Salut,

Je l'ai retesté, ça fonctionne : bizarre? Tu es sur qu'il n'y a pas eu une erreur au copier-coller ou en recopiant? Du genre : un point virgule ( ; ) qui manque smile

C'est normal que ton sketch se bloque : quand time vaut 57, second() - time ne peut jamais plus être supérieur à time_limit, c'est ce que montre le deuxième sketch dans mon post précédent...

Hors ligne

 

#11 2009-12-03 17:15:40 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



salut, smile
oui..je comprends.
j'écris nouveau le code pour de montrer toi où j'ai inséré ce que tu m'as écrit..
merci par la patience


---------------------------------------------------------------------------------------------------

Code (processing) :

 import processing.video.*;  
  Capture video;  
   
 //int time=second();
 int f;
 //int time_limit=3;  

 class Form {  
   int[][] v = new int[0][3];  
   int y;  
   color c;  
   Form(int x,int y) {  
     this.y = y;  
     addRow(x,y);  
      this.c = lerpColor(210,210,100);      
   }  
   
   void addRow(int x, int y) {  
    int[] v_n = new int[3];  
     v_n[0] = x;  
    v_n[1] = x;  
    v_n[2] = y;  
   v = (int[][]) append(v, v_n);  
    }  
   
   void draw(int nr) {  
     
     /*int time=second();  
 int time_limit=3; */
 
     //line(v[0][0],v[0][2],v[0][1],v[0][2]);  
    point(v[0][0],v[0][2]);  
    point(v[0][1],v[0][2]);  
     for (int i=0;i<v.length-1;i++){  
       stroke(c,80);  
      strokeWeight(10);  
      //line(v[i][0],v[i][2],v[i+1][0],v[i+1][2]);  
      //line(v[i][1],v[i][2],v[i+1][1],v[i+1][2]);  
        point(v[i][0],v[i][2]);  
       point(v[i][1],v[i][2]);  
    }  
     //line(v[v.length-1][0],v[v.length-1][2],v[v.length-1][1],v[v.length-1][2]);  
       point(v[v.length-1][0],v[v.length-1][2]);  
    point(v[v.length-1][1],v[v.length-1][2]);  
   }  

  String toString() {  
     String a = "------------START---------\n";  
     for (int i=0;i<v.length-1;i++){  
       a+="["+v[i][0]+"|"+v[i][1]+"|"+v[i][2]+"]\n";  
     }  
    a +="------------END-----------\n";  
     return a;  
    }  
  }   
    
  Form[] f =  new Form[0];  
    
 void setup() {  
   frameRate(1);
  size(640, 480);  
    video = new Capture(this, width, height, 10);  
   noStroke();  
   smooth();  
   ellipseMode(CENTER);  
   
   
 }  
   
 void draw() {  
   if (f%4 == 0) {
     
   /*if (second()-time>=time_limit){  
     time=second();*/
     
     background(0);  
      if (video.available()) {  
      f = new Form[0];  
       video.read();  
       //image(video, 0, 0, width, height);  
      video.loadPixels();  
       int index = 0;  
       int raster = 1;  
       for (int y = 0; y < video.height; y+=raster) {  
          for (int x = 0; x < video.width; x+=raster) {  
           int pixelValue = video.pixels[y*video.width+x];  
             boolean intresting = brightness(pixelValue)<80;  
          if (intresting) {  
               boolean old_spot = false;  
             for (int i=0; i<f.length && !old_spot ; i++){  
                Form fi = f[i];  
               int row = fi.v.length-1;  
               int dx = x-fi.v[row][1];  
               int dy = y-fi.v[row][2];  
               if (dx<=2*raster && dy<=2*raster) {  
                old_spot = true;  
                 if (fi.v[row][2]<y) {  
                   fi.addRow(x,y);  
                 }  
                  else {  
                    fi.v[row][1] = x;  
                   }  
                 }  
             }  
             if (!old_spot) {  
               Form new_form = new Form(x,y);  
               f = (Form[]) append(f,new_form);  
             } 
           }  
         }  
       }  
  
    }  
    for (int i=0; i<f.length; i++) {  
       f[i].draw(i);  
    }  

   }
   
   }
 
  
 }  
             
            println("top");
  }
  f++;
}


   
 void keyPressed() {  
   for (int i=0; i<f.length; i++) {  
     print(f[i]);  
     
    }  

 }

Hors ligne

 

#12 2009-12-03 22:46:20 Re : help multitraking+thresholding en Processing

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: help multitraking+thresholding en Processing



Ton code est un peu compliqué à lire, tu devrais le structurer un peu mieux en l'indentant, ça faciliterait la tâche pour t'aider, f++ doit se retrouver à la fin du draw() jusque avant de refermer avec }...
Là, j'ai l'impression qu'il flotte dans le vide entre draw() et keypressed(), du coup ça ne fonctionnera pas

Hors ligne

 

#13 2009-12-04 11:19:06 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



super-merci beaucoup !! smile smile smile smile smile smile smile
maintenant il fonctionne tout ! !
je dois résoudre seulement une autre chose. j'ai besoin de prendre seulement une partie de le video realtime de la cam. je sais que je dois modifier ou ajouter quelque chose sous la voix "setup". tu as une petite ligne de code da donner ?

Hors ligne

 

#14 2009-12-04 11:43:49 Re : help multitraking+thresholding en Processing

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: help multitraking+thresholding en Processing



Pour prendre uniquement une partie de l'image, tu peux utiliser capture::crop()

Hors ligne

 

#15 2009-12-06 21:20:31 Re : help multitraking+thresholding en Processing

valeria
nouveau membre
Date d'inscription: 2009-11-20
Messages: 8

Re: help multitraking+thresholding en Processing



merci vraiment pour tout!
j'aurais una dernière question: si je dois relier une caméra vidéo à la place du webcam de l'ordinateur.. où je dois  substituer le " nom du camera" dans le code ?
mercimerci

Dernière modification par valeria (2009-12-06 21:23:06)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024