salut a tous,
pour relancer le débat en cette période estivale....
je souhaiterai savoir sil est possible de "tracker" plusieurs couleurs avec JMyron?
Sur la meme frame biensur...
Hors ligne
Oui, il y a pas de raison ... il faut juste voir si tes performances suivent - mais peut-être était-ce le sens de ta question ...?
Hors ligne
slt,
la raison de ma question est plutot de savoir s'il est possible de creer plusieurs méthodes m.trackcolor(x,x,x); dans une meme instance de capture video jmyron m;
a premiere vue, non...
je suis donc pour l'instant passé par une capture de la cam en plusieurs PImage mais du coup la methode .trackColor() ne s'applique pas dans le processing.core...
si tu as une idée la dessus
++
Hors ligne
- vraiment dommage ... je bidouille pas trop p5 depuis que je suis passé sur Ubuntu, et le temps que je refasse mon setup, c'est pas demain la veille.
J'ai du code qui fait l'équivalent : je ne me sers de JMyron que pour la capture et je fais mon tracking/recherche de blob après ...
C'est assez basique, mais ça marche (à peu près).
Je le posterai dans la soirée, si tu veux jeter un coup d'oeil.
Hors ligne
yep,
je veux bien ton code de traitement de blob post jmyron ...
ubuntu...j'essaierai bien sur mon futur computer...t'en ai satisfait?
++
Hors ligne
Oki, je te poste ça ce soir ...
Ubuntu ... je l'adore !
Hors ligne
Yop,
Je te file un .pde relativement commenté, si tu as des questions n'hésite pas ...
La méthode de recherche de couleur est triviale, je te laisse regarder.
Celle pour regrouper en globe est un peu plus hardcore ... je me suis basé sur les HashMap :
Je parcours mon tableau de pixel, tout ceux qui correspondent à la couleur donnée sont stockés dans un Map avec la clé suivante :
x + "s" + y
Ainsi, lorsque je fais mon algo récursif pour déterminer les globes, il m'est facile de voir si le voisin d'un point donné appartient au HashMap :
Si hashMap.get(x' + "s" +y') != null (avec x' et y' les coordonnées du voisin)
Il te suffit de construire autant de map qu'il y a de couleurs que tu veux tracker.
La liste des globes est ensuite nettoyée des globes jugés trop petits.
Voici le résultat du programme (pas efficace à 100% ...) : http://vimeo.com/1000558
+
+
Hors ligne
:Dmerci bien:D
je vais regarder de plus prés d'ici la fin de semaine...
+++
Hors ligne
salut,
je viens de survoler rapidement le code que tu m'as envoyé,
... je penses que je vais mettre un petit moment pour le déchiffrer,
non pas qu'il soit illisible, au contraire, mais je suis un peu en deça du niveau nécessaire pour capter toutes ses subtilités...
donc je vais me donner un peu de temps pour analyser tout ça ...
hehe
bon merci en tout cas
Hors ligne
ok,
j'ai pu integrer un tout petit peu le concept de map... j'ai doublé toutes les fonctions pour pouvoir capturer 2 couleurs.
ça fonctionne bien, par contre au bout de 2 min une exception apparait de type stackoverflowerror.
cela te dit il quelque chose?
Hors ligne
rhaa ... un classique, c'est la pile de récursion qui déborde ... en gros, quand tu fais appel à une fonction récursive, tout le bordel est stocké dans une partie la mémoire vive, si ton appel récursif est trop profond, ça pète ... je vais essayer de transformer mon code en non récursif et je te tiens au jus.
Hors ligne
hummmm...
ces fameuses méthodes récursives...
peut être est ce la méthode "trouvercentre(arrayliste globes)" ?
en tous les cas c'est lorsque j'augmente la "differenceacceptable" qu'au bout d'un moment l'exception arrive.
sinon ton code mis à part ça fonctionne à merveille , merci pour le coup de main.
si tu peux voir pour la récursion c'est nickel.
mais alors pas de vacances ? ou accros de codelab ?
+++
Hors ligne
... pas de vacances ...
J'ai pas encore regardé, je suis un peu dans le pâté niveau taf ... mais avec le recul, c'était pas forcément une grande idée de vouloir faire une récursion sur des listes de pixels.
Quand tu augmentes la différence acceptable, tu relâches la contrainte sur la couleur, ce qui fait que tes Map, et surtout tes globes deviennent trop gros pour être traités de cette manière.
PS : C'est la méthode trouverGlobes_trtUnit() qui est récursive (elle s'appelle elle-même).
+
+
Hors ligne
yep,
ok pour la definition de recursive mais la methode "trouvercentre(arrayliste globes)" utilise un return qui est générée par elle meme ... donc récursive également non?
dont know...
sinon je t'envoi ce pde qui est une transformation du tien (pas grand chose de plus) pour que tu es un aperçu du bug "stackflow..."
bonne courage pour ton taf, ici pas de vacances non plus
+++
Hors ligne
Je viens de regarder ton code, il me semble que tu as dédoublé toutes tes méthodes inutilement, elles font toutes la même chose, peu importe que tu changes le nom du paramètre.
Le seul dédoublement utile serait éventuellement pour la fonction qui permet de trouver la couleur, mais il est plus judicieux de rajouter un paramètre à la méthode :
couleurCorrespond(color c) -> couleurCorrespond(color c, color couleurRecherchere) et ainsi utiliser la même méthode pour tes 2 couleurs.
ça n'a aucune influence en terme d'efficacité, mais il faut essayer de factoriser son code tant que faire se peut.
Je n'ai pas encore fait la correction, mais peut-être peux-tu déjà essayé d'augmenter la taille mémoire allouée à processing ainsi que la taille de la pile stack,
Je sais plus comment ça marche sous l'interface p5 pour gérer ça (j'utilise eclipse) ... l'idéal serait que tu lances ton programme à partir de la console (je dis ça sans savoir si c'est possible) ...
java -Xss[native stack size] -Xms [taille initiale du heap] -Xmx[taille maximale du heap]
Xss : taille de ta pile stack ; c'est ça qui déborde chez toi
Xms : allocation de la ram pour ton programme au démarrage
Xmx : ram maximale allouée à ton programme.
tu peux essayer : java -Xss=512m -Xms =1024m -Xmx=2048m
malheureusement, l'option Xss n'a pas l'air accessible depuis processing ... http://processing.org/discourse/yabb_be … 1212688476
J'essaye de regarder l'algo dans le we, le seul problème étant que je ne pourrais pas le tester, j'ai quelques soucis avec les webcams sous linux ...
courage ...
+
+
Hors ligne