Auteur Sujet: Transformer un code hors ligne en mode en ligne  (Lu 1624 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne djwa

  • P'tit nouveau
  • *
  • Messages: 27
    • Voir le profil
Transformer un code hors ligne en mode en ligne
« le: 26 mai 2010 à 18:36:16 »
Bonjour,

j'ai un programme qui fonctionne sur un robot munie d'une webcam.
Je voudrais le modifier pour qu'il puisse fonctionner en mode hors ligne
c'est a dire sur un pc avec une image que je lui donne et non les image fournie par la webcam.

Voilà le code:
#include <stdio.h>
#include <stdlib.h>
#include <cc3.h>
#include <cc3_ilp.h>
#include <cc3_color_track.h>


void simple_track_color(cc3_track_pkt_t* t_pkt);

int main(void) {
  cc3_track_pkt_t t_pkt;


  cc3_uart_init (0,
CC3_UART_RATE_115200,
CC3_UART_MODE_8N1,
CC3_UART_BINMODE_TEXT);

  cc3_camera_init ();


  //cc3_camera_set_colorspace(CC3_COLORSPACE_YCRCB);
  cc3_camera_set_resolution(CC3_CAMERA_RESOLUTION_LOW);
  //cc3_pixbuf_frame_set_subsample(CC3_SUBSAMPLE_NEAREST, 2, 2);
 

  // init pixbuf with width and height
  cc3_pixbuf_load();

  // Load in your tracking parameters
  t_pkt.lower_bound.channel[CC3_CHANNEL_RED] = 150;
  t_pkt.upper_bound.channel[CC3_CHANNEL_RED] = 255;
  t_pkt.lower_bound.channel[CC3_CHANNEL_GREEN] = 0;
  t_pkt.upper_bound.channel[CC3_CHANNEL_GREEN] = 50;
  t_pkt.lower_bound.channel[CC3_CHANNEL_BLUE] = 0;
  t_pkt.upper_bound.channel[CC3_CHANNEL_BLUE] = 50;
  t_pkt.noise_filter = 2;

 
  while(true) {
    simple_track_color(&t_pkt);
    printf( "centroid = %d,%d bounding box = %d,%d,%d,%d num pix= %d density = %d\n",
    t_pkt.centroid_x, t_pkt.centroid_y,
    t_pkt.x0,t_pkt.y0,t_pkt.x1,t_pkt.y1,
    t_pkt.num_pixels, t_pkt.int_density );

   }
 
}


void simple_track_color(cc3_track_pkt_t * t_pkt)
{
  cc3_image_t img;

  img.channels = 3;
  img.width = cc3_g_pixbuf_frame.width;
  img.height = 1;               // image will hold just 1 row for scanline processing
  img.pix = cc3_malloc_rows (1);
  if (img.pix == NULL) {
    return;
  }

    cc3_pixbuf_load ();
    if (cc3_track_color_scanline_start (t_pkt) != 0) {
      while (cc3_pixbuf_read_rows (img.pix, 1)) {
   // This does the HSV conversion
   // cc3_rgb2hsv_row(img.pix,img.width);
           cc3_track_color_scanline (&img, t_pkt);
          }
        }
    cc3_track_color_scanline_finish (t_pkt);

  free (img.pix);
  return;
}




Est ce que quelqu'un pourrais m'aider? Merci.

Hors ligne radeon4ever

  • Chasseur de specs
  • Administrateur
  • The ultimate geek
  • *****
  • Messages: 17776
  • Chasseur de specs :P
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: Asus Maximus IV Gene Z/Gen 3
  • CPU: Intel Core i7 2600K
  • GPU: HIS Radeon HD 7970
Re : Transformer un code hors ligne en mode en ligne
« Réponse #1 le: 26 mai 2010 à 21:28:40 »
la dessus, je ne peux pas t'aider car je ne m'y connais pas assez. Par contre, ce que je sais c'est que le flo va pouvoir t'aider correctement car c'est un pro en programmation ;)
Intel Core i7 2600K - Noctua NH-C14 - Asus Maximus IV Gene Z / Gen3 - 16Go G.Skill Sniper PC12800 - HIS Radeon HD 7970 - SSD Corsair Force 3 240Go - WD Velociraptor 600Go - 2x WD Caviar Green 2To RAID1 - Graveur BluRay LG USB auto alimenté - Corsair HX 850W - Lian Li V353 - SB X-Fi Fatal1ty Platinum Pro -  Dell U3011 30" 2560x1600 - Windows Seven x64 Home Premium

Acer Aspire Revo R3610 - Atom Dual Core N330 - 2Go DDR2-800 - Nvidia ION - WD Scorpio Green 320Go
Samsung Q35 - Core Duo T2300E @1.66GHz - 2,5Go DDR2 @ 533MHz - GMA950 - 250Go WD Scorpio - poids : 1.8Kg
Asus U24E - Intel Core i7 2620M 2.7GHz (Turbo 3.4GHz) 4Mo cache L3 - 2x 8Go Corsair PC10600 - SSD Intel 320 Series 300Go - 11,6" - 1.5Kg

Hors ligne Goten

  • VIP
  • Hardcore gamer
  • *****
  • Messages: 7881
  • Amd overclocker
    • Voir le profil
Re : Transformer un code hors ligne en mode en ligne
« Réponse #2 le: 26 mai 2010 à 22:04:56 »
Manque du code. On peut pas t'aider là, envoie une tarball au pire. et ça m'a l'air d'être un truc assez gros,  perso j'ai vraiment pas le temps de me pencher dessus, donc si tu dégrossis pas le truc, je passe la main. (et ça m'étonnerait que le patch soit trivial).
Rig 1 :                                          Rig 2 :
-Gigabyte GA-790FX-DQ6             -Dfi lanparty nf4 ultra-D (dead)
-Phenom 965BE @3.4ghz                 -athlon 3700+@3.1ghz
-2*1go gskill pc 8500hk                  -athlon 3500+@2.5ghz                       
-Corsair hx620W                            -Phenom 9600 BE @2.7ghz
-Watercooling cpu : full swiftech       -1*HD 2900XT 1go (dead)
                                                   -2*512mo ocz vx gold edition

Hors ligne flo

  • Administrateur
  • Campeur
  • ****
  • Messages: 4590
  • Zhong : L'équilibre parfait
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: AMD 890G
  • CPU: PhenomII X6 1055T
  • GPU: Radeon HD5770
Re : Re : Transformer un code hors ligne en mode en ligne
« Réponse #3 le: 27 mai 2010 à 09:09:04 »
Manque du code. On peut pas t'aider là, envoie une tarball au pire. et ça m'a l'air d'être un truc assez gros,  perso j'ai vraiment pas le temps de me pencher dessus, donc si tu dégrossis pas le truc, je passe la main. (et ça m'étonnerait que le patch soit trivial).
Dans quel sens ?
Innovation : maître mot du monde hardware!

Hors ligne flo

  • Administrateur
  • Campeur
  • ****
  • Messages: 4590
  • Zhong : L'équilibre parfait
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: AMD 890G
  • CPU: PhenomII X6 1055T
  • GPU: Radeon HD5770
Re : Transformer un code hors ligne en mode en ligne
« Réponse #4 le: 27 mai 2010 à 09:22:49 »
Djwa, as tu bien compris à quoi sert ce code et comment il interagit ?

Si j'ai bien compris, fonctionnellement, tu souhaites faire un mode connecté (utilisation de la webcam) et un mode déconnecté (utilisation d'une image). Il suffit donc de changer la source.

Techniquement, la réponse est simple en 2 points :
* Ta fonction écoute la web cam et retranscrit les images lignes à lignes.  C'est ce que fait ta classe, je suppose que la lib nommée cc3 derrière se charge de récup les images et toi tu les lis ligne à ligne. Je vois que tu as fait un début de thread pour boucler sur les images.
* En fait, il te faut une deuxième fonction qui va tout simplement lire un fichier et récup ligne à ligne les informations. ATTENTION : En C/C++, les formats d'images (type png, jpg etc.) sont à prendre en compte et ne répondent pas toujours aux mêmes specs alors cherche bien sur le net. Tu devrais même pouvoir trouver des samples, je pense.
Innovation : maître mot du monde hardware!

Hors ligne Goten

  • VIP
  • Hardcore gamer
  • *****
  • Messages: 7881
  • Amd overclocker
    • Voir le profil
Re : Re : Re : Transformer un code hors ligne en mode en ligne
« Réponse #5 le: 27 mai 2010 à 09:49:32 »
Manque du code. On peut pas t'aider là, envoie une tarball au pire. et ça m'a l'air d'être un truc assez gros,  perso j'ai vraiment pas le temps de me pencher dessus, donc si tu dégrossis pas le truc, je passe la main. (et ça m'étonnerait que le patch soit trivial).
Dans quel sens ?

Dans le sens tout les includes par exemple (et je parle pas des includes standard). Notemment la déclaration/définition des fonctions concernant la caméra ie :
  cc3_camera_init ();

etc. Pour voir comment  ça s'interface.

Sur le côté fonctionnel t'as raison je suis d'accord avec tes deux points, sur le côté pratique c'est pas aussi "simple" que ça, et ça doit dépasser les compétences du posteur (sinon il ne posterait pas ici il aurait trouvé le "comment" tout seul), mais je peux me tromper.

(y'a pas de classe, c'est du C)
« Dernière modification: 27 mai 2010 à 10:03:44 par Goten »
Rig 1 :                                          Rig 2 :
-Gigabyte GA-790FX-DQ6             -Dfi lanparty nf4 ultra-D (dead)
-Phenom 965BE @3.4ghz                 -athlon 3700+@3.1ghz
-2*1go gskill pc 8500hk                  -athlon 3500+@2.5ghz                       
-Corsair hx620W                            -Phenom 9600 BE @2.7ghz
-Watercooling cpu : full swiftech       -1*HD 2900XT 1go (dead)
                                                   -2*512mo ocz vx gold edition

Hors ligne flo

  • Administrateur
  • Campeur
  • ****
  • Messages: 4590
  • Zhong : L'équilibre parfait
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: AMD 890G
  • CPU: PhenomII X6 1055T
  • GPU: Radeon HD5770
Re : Re : Re : Re : Transformer un code hors ligne en mode en ligne
« Réponse #6 le: 27 mai 2010 à 14:11:11 »

Dans le sens tout les includes par exemple (et je parle pas des includes standard). Notemment la déclaration/définition des fonctions concernant la caméra ie :
  cc3_camera_init ();

etc. Pour voir comment  ça s'interface.
C'est bien ce que je pensais et c'est bien de s'en soucier. Mais visiblement on peut en faire abstraction pour ce qu'il demande. C'est pas très compliquer de deviner ce que ca peut faire.

Sur le côté fonctionnel t'as raison je suis d'accord avec tes deux points, sur le côté pratique c'est pas aussi "simple" que ça, et ça doit dépasser les compétences du posteur (sinon il ne posterait pas ici il aurait trouvé le "comment" tout seul), mais je peux me tromper.
Oui tout fait. C'ezst exactement ce que je dis, attention à l'utilisation des formats d'images et aux encodages. Mais je pense qu'il doit y'avoir maintenant des libs pour ca en C comme par exemple :
http://www.libpng.org/pub/png/pngcode.html (et en plus en code source!).

(y'a pas de classe, c'est du C)
Techniquement oui car ce n'est pas de la POO! Mais c'est qu'une forme d'appellation mon cher ami :ane:
« Dernière modification: 27 mai 2010 à 14:13:14 par flo »
Innovation : maître mot du monde hardware!

Hors ligne djwa

  • P'tit nouveau
  • *
  • Messages: 27
    • Voir le profil
Re : Transformer un code hors ligne en mode en ligne
« Réponse #7 le: 27 mai 2010 à 17:09:36 »
Voila, c'est bien ce que je veux.
J'ai pas forcement compris toutes les lignes, mais j'ai compris en gros comment il fonctionne.

Je vais regarder si je trouve des samples pour la lecture d'images.

Hors ligne Goten

  • VIP
  • Hardcore gamer
  • *****
  • Messages: 7881
  • Amd overclocker
    • Voir le profil
Techniquement oui car ce n'est pas de la POO! Mais c'est qu'une forme d'appellation mon cher ami :ane:

Non c'est pas pour ça. (enfin si un peu mais  pas que ça). Le C++ est multi paradigme etc. Je vais te montrer trois points qui me font dire  que c'est pas compilé en C++  (hors le fait que y'est pas de POO car c'est pas un vrai déterminant). :

1) Include C-like :
#include <stdio.h>
C'est deprecated, en  C++ ça serait #include <cstdio> (ok ça compile quand même en C++ , donc c'est pas déterminant).

2) Déclaration de fonctions ne prenant aucun paramètres avec void :
int main(void)
Sa aussi c'est deprecated (en C99 aussi d'ailleurs), c'est int foo(). (ok ça ça compile toujours en C++ mais c'est deprecated).

3) utilisation de malloc (on le voit pas ici)  et son contrepartie free :
free (img.pix);
En C++ ça serait suicidaire pour toutes structures non POD. (pas d'appelle au constructeur / destructeur).

D'où mon assertion.
Rig 1 :                                          Rig 2 :
-Gigabyte GA-790FX-DQ6             -Dfi lanparty nf4 ultra-D (dead)
-Phenom 965BE @3.4ghz                 -athlon 3700+@3.1ghz
-2*1go gskill pc 8500hk                  -athlon 3500+@2.5ghz                       
-Corsair hx620W                            -Phenom 9600 BE @2.7ghz
-Watercooling cpu : full swiftech       -1*HD 2900XT 1go (dead)
                                                   -2*512mo ocz vx gold edition

Hors ligne flo

  • Administrateur
  • Campeur
  • ****
  • Messages: 4590
  • Zhong : L'équilibre parfait
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: AMD 890G
  • CPU: PhenomII X6 1055T
  • GPU: Radeon HD5770
Re : Re : Transformer un code hors ligne en mode en ligne
« Réponse #9 le: 27 mai 2010 à 22:26:36 »
Voila, c'est bien ce que je veux.
J'ai pas forcement compris toutes les lignes, mais j'ai compris en gros comment il fonctionne.

Je vais regarder si je trouve des samples pour la lecture d'images.
Sinon est ce que ca répond à tes questions ?
Innovation : maître mot du monde hardware!

Hors ligne djwa

  • P'tit nouveau
  • *
  • Messages: 27
    • Voir le profil
Re : Transformer un code hors ligne en mode en ligne
« Réponse #10 le: 14 juin 2010 à 16:05:10 »
Oui, merci pour ton aide!!!!  Je me sers de la bibliothèque (opencv) pour la lecture et le traitement de l'image. :)

Hors ligne djwa

  • P'tit nouveau
  • *
  • Messages: 27
    • Voir le profil
Re : Transformer un code hors ligne en mode en ligne
« Réponse #11 le: 15 juin 2010 à 04:56:48 »
Au fait, vous avez pas une idée d'un algorithme qui permettrais de détecter une bande blanche dans une photo(pseudo-code ou pour ceux qui connaissent avec opencv)?

Pour pouvoir ensuite la représenter par une ligne rouge (par exemple) qui la traverse de part en part.

Hors ligne flo

  • Administrateur
  • Campeur
  • ****
  • Messages: 4590
  • Zhong : L'équilibre parfait
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: AMD 890G
  • CPU: PhenomII X6 1055T
  • GPU: Radeon HD5770
Re : Re : Transformer un code hors ligne en mode en ligne
« Réponse #12 le: 15 juin 2010 à 10:16:08 »
Au fait, vous avez pas une idée d'un algorithme qui permettrais de détecter une bande blanche dans une photo(pseudo-code ou pour ceux qui connaissent avec opencv)?

Pour pouvoir ensuite la représenter par une ligne rouge (par exemple) qui la traverse de part en part.
Tu peux avoir 2 types de bandes blanches une horizontale et une verticale. Je te donne les billes pour celle horizontale. La verticale fonctionnera de la même manière à part que tu inverses l'axe des x et des y et au lieu de fonctionner sur des lignes il faut résonner en colonnes.

Détecte d'abord pixel par pixel que toute ta ligne est blanche. Pour cela rien de plus simple.
1. Récupère ta ligne (comme le fait actuellement ton code)
2. Fait une fonction qui te retourne un booléen.
3. Dans cette fonction, il faut que tu fasses une boucle avec un booléen comme condition de sortie. Il te faudra aussi une variable compteur de pixel et une autre variable limite qui sera le nombre de pixels total sur la ligne.
4. Dans cette boucle, il suffit de détecter la couleur du pixel. Tant que tu rencontres du blanc tu ne fait rien à part incrémenter le compteur.
Plusieurs conditions de sorties :
Dès que tu rencontres autre chose tu sorts de ta boucle et tu retourne "false".
Si tu arrives à la fin de la ligne (compteur = limite), tu sorts de la boucle et tu retournes "true".

Cette fonction te permet de détecter une ligne complètement blanche. Détecter une bande blanche revient à détecter une somme de lignes blanches.

Pour transformer une ligne blanche en ligne rouge, il suffit de faire une boucle qui pixel par pixel remplace la couleur blanche en couleur rouge. ATTENTION : Les couleurs en C sont gérées soit au format hexadécimal soit en RGB si t'as de la chance.

Tu dois pouvoir t'inspirer de ca :
http://www.developpez.net/forums/d528129/c-cpp/c/bibliotheque-couleurs-rgb-langage-c/
Innovation : maître mot du monde hardware!

Hors ligne Goten

  • VIP
  • Hardcore gamer
  • *****
  • Messages: 7881
  • Amd overclocker
    • Voir le profil
Re : Transformer un code hors ligne en mode en ligne
« Réponse #13 le: 15 juin 2010 à 10:20:28 »
bande blanche  sur fond constrasté?
Rig 1 :                                          Rig 2 :
-Gigabyte GA-790FX-DQ6             -Dfi lanparty nf4 ultra-D (dead)
-Phenom 965BE @3.4ghz                 -athlon 3700+@3.1ghz
-2*1go gskill pc 8500hk                  -athlon 3500+@2.5ghz                       
-Corsair hx620W                            -Phenom 9600 BE @2.7ghz
-Watercooling cpu : full swiftech       -1*HD 2900XT 1go (dead)
                                                   -2*512mo ocz vx gold edition

Hors ligne djwa

  • P'tit nouveau
  • *
  • Messages: 27
    • Voir le profil

Hors ligne flo

  • Administrateur
  • Campeur
  • ****
  • Messages: 4590
  • Zhong : L'équilibre parfait
    • Voir le profil
    • Hardware-Specs.net
  • Chipset: AMD 890G
  • CPU: PhenomII X6 1055T
  • GPU: Radeon HD5770
Re : Transformer un code hors ligne en mode en ligne
« Réponse #15 le: 16 juin 2010 à 22:28:51 »
Ah ok, là ca sera un peu plus difficile que l'algo que je t'ai fait
Innovation : maître mot du monde hardware!