From f9c857fc76e23efb3cccd20248e2a265ca6d1a57 Mon Sep 17 00:00:00 2001 From: gaillaro Date: Sun, 2 May 2004 13:38:53 +0000 Subject: Dernier commit de la precoupe --- 2004/i/nono/runtime/rc/poids | 19 ++++--- 2004/i/nono/src/GNUmakefile | 2 +- 2004/i/nono/src/ovision/Makefile.defs | 9 ++- 2004/i/nono/src/ovision/adjust.cc | 51 ++++++++++++++++- 2004/i/nono/src/ovision/comm.cc | 54 ++++++++++-------- 2004/i/nono/src/ovision/comm.h | 5 +- 2004/i/nono/src/ovision/imgFile.cc | 2 + 2004/i/nono/src/ovision/map.cc | 15 ++--- 2004/i/nono/src/ovision/map.h | 9 ++- 2004/i/nono/src/ovision/oconfig.cc | 3 +- 2004/i/nono/src/ovision/palet.jpg | Bin 0 -> 4093 bytes 2004/i/nono/src/ovision/segmNN.cc | 19 +++++-- 2004/i/nono/src/ovision/test.cc | 2 +- 2004/i/nono/src/ovision/testmap.cc | 30 +++++++--- 2004/i/nono/src/ovision/ui.cc | 104 ++++++++++++++++++---------------- 15 files changed, 204 insertions(+), 120 deletions(-) create mode 100644 2004/i/nono/src/ovision/palet.jpg (limited to '2004') diff --git a/2004/i/nono/runtime/rc/poids b/2004/i/nono/runtime/rc/poids index 503bc69..7aa2029 100644 --- a/2004/i/nono/runtime/rc/poids +++ b/2004/i/nono/runtime/rc/poids @@ -1,10 +1,13 @@ -RGB -2 // Index de la couleur des balles +YUV +1 // Index de la couleur des balles 4 // Index de la couleur des poteaux #index #x1 x2 x3 -0 53 245 3 -1 31 0 245 -2 85 0 1 -3 68 245 235 -4 46 212 46 -5 136 233 7 +0 80 220 30 +1 200 208 230 +2 30 220 220 +3 31 215 220 +4 47 128 49 +5 220 220 97 +0 116 5 63 +369 35 212 184 +-72538984 140 221 61 diff --git a/2004/i/nono/src/GNUmakefile b/2004/i/nono/src/GNUmakefile index 354c5f8..c37b07a 100644 --- a/2004/i/nono/src/GNUmakefile +++ b/2004/i/nono/src/GNUmakefile @@ -32,7 +32,7 @@ alltargets: $(TARGETS) | sed 's/\($*\)\.o[ :]*/\1.o .dep\/$*.d : /g' > $@; \ [ -s $@ ] || rm -f $@ --include $(foreach target, $(TARGETS) $(subst .,_,$(LIBS)), $(patsubst %.cc, .dep/%.d, $(filter %.cc, $($(target)_SOURCES)))) +#-include $(foreach target, $(TARGETS) $(subst .,_,$(LIBS)), $(patsubst %.cc, .dep/%.d, $(filter %.cc, $($(target)_SOURCES)))) .dep: mkdir .dep diff --git a/2004/i/nono/src/ovision/Makefile.defs b/2004/i/nono/src/ovision/Makefile.defs index 766b374..79dba10 100644 --- a/2004/i/nono/src/ovision/Makefile.defs +++ b/2004/i/nono/src/ovision/Makefile.defs @@ -1,13 +1,16 @@ -TARGETS += test_ovision testimg +TARGETS += test_ovision testimg testmap LIBS += ovision.a + testimg_SOURCES = testimg.cc ovision.a video4linux.a test_ovision_SOURCES = testmap.cc ovision.a -ovision_a_SOURCES = img.cc group.cc oconfig.cc map.cc \ - segmNN.cc +testmap_SOURCES = testmap.cc ovision.a image.a +ovision_a_SOURCES = img.cc group.cc oconfig.cc map.cc segmNN.cc space.cc testimg: $(testimg_SOURCES:%.cc=%.o) test_ovision: $(test_ovision_SOURCES:%.cc=%.o) +testmap: $(testmap_SOURCES:%.cc=%.o) + ovision.a: ${ovision_a_SOURCES:%.cc=ovision.a(%.o)} diff --git a/2004/i/nono/src/ovision/adjust.cc b/2004/i/nono/src/ovision/adjust.cc index 6652598..682a8d9 100644 --- a/2004/i/nono/src/ovision/adjust.cc +++ b/2004/i/nono/src/ovision/adjust.cc @@ -14,7 +14,7 @@ using namespace std; int window; Comm *comm; - +int point[3][2] = {{-1,-1},{-1,-1},{-1,-1}}; /// Sortie du programme void @@ -93,7 +93,7 @@ LoadImage(int width, int height, unsigned char *data, unsigned int lastTex) //glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data); - // OConfig des parametres + // Config des parametres glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); @@ -187,6 +187,16 @@ DrawGLScene() for (int i=0; i= 0) + glBegin(GL_POINTS); + glVertex3f(point[i][0], point[i][1], -0.7f); + glEnd(); + } + + glFlush(); // Affiche le buffer suivant @@ -206,6 +216,41 @@ KeyPressed(unsigned char key, int x, int y) } } +/// Gestion souris +void +MouseFunc(int button, int state, int x, int y) +{ + if (state == GLUT_UP) + { + if ((x < 352+BORDER) && (y < 288+BORDER) && (x > BORDER) && (y > BORDER)) + { + int i=0; + if (button == GLUT_LEFT_BUTTON) + while(i < 3) + { + if (point[i][0] < 0) + { + point[i][0] = x; + point[i][1] = y; + i=3; + } + i++; + } + else if (button == GLUT_RIGHT_BUTTON) + while(i<3) + { + if ((abs(point[i][0] - x) < 5) && (abs(point[i][1] -y) < 5)) + { + point[i][0] = -1; + point[i][1] = -1; + i=3; + } + i++; + } + } + cout << "x : " << x << " " << y << endl; + } +} /// Fonction principale int @@ -223,7 +268,7 @@ main(int argc, char **argv) InitGL(WIDTH, HEIGHT); // Init de comm - comm = new Comm("palet.jpg"); + comm = new Comm("im.jpg"); //Initialisation des signal handlers signal(SIGUSR1, ExecuteUiCmds); diff --git a/2004/i/nono/src/ovision/comm.cc b/2004/i/nono/src/ovision/comm.cc index 8b0199e..6c98771 100644 --- a/2004/i/nono/src/ovision/comm.cc +++ b/2004/i/nono/src/ovision/comm.cc @@ -12,7 +12,7 @@ using namespace std; #include "comm.h" #include "adjust.h" - +#include /// Constructeur /// @param *filename nom de l'image a utiliser @@ -32,27 +32,27 @@ Comm::Comm(char *filename) fprintf(file, "%li\n", pid); fclose(file); - // Creation de config - config = new OConfig("vision.conf"); + // Creation de oconfig + oconfig = new OConfig("rc/vision.conf"); // Ouverture de l'image pilote et stockage img.ReadRaw(filename); tex[0] = LoadImage(img.width, img.height, img.tabData, tex[0]); - // Conversion en RGB et stockage + // Conversion en YUV et stockage img.RGBtoYUV(); tex[3] = LoadImage(img.width, img.height, img.tabData, tex[3]); - // NN configure en RGB ou YUV ? - if (config->colorMode == RGB) img.ReadRaw(filename); + // NN oconfigure en RGB ou YUV ? + if (oconfig->colorMode == RGB) img.ReadRaw(filename); // Allocation memoire pour les images for (int i=0; i<2; i++) data[i] = new unsigned char[img.nbPixels*3]; // Initialisation de la segmentation - segm = new SegmNN(&img, config); - segm->BuildNN(config->nn_NbCouleurs, LOAD_FROM_FILE); + segm = new SegmNN(&img, oconfig); + segm->BuildNN(oconfig->nn_NbCouleurs, LOAD_FROM_FILE); group = new Group(&img, segm); SegmAndGroup(); @@ -70,7 +70,7 @@ Comm::~Comm() ilShutDown(); // Liberation de la memoire - delete config; + delete oconfig; delete segm; delete group; delete [] data; @@ -91,7 +91,7 @@ Comm::SegmAndGroup() // Creation des groupes if (group) delete group; group = new Group(&img, segm); - group->JumpPoints(config->groupColor); + group->JumpPoints(oconfig->groupColor); group->TabOut(); img.DoImg(group->tabOut, data[1]); @@ -106,7 +106,7 @@ void Comm::SendNodes() { char buf[10]; - for (int i=0; i < config->nn_NbCouleurs*3; i++) + for (int i=0; i < oconfig->nn_NbCouleurs*3; i++) { sprintf(buf, "%u\n", segm->node[i]); write(fifo, buf, 10); @@ -176,7 +176,7 @@ Comm::ExecuteUiCmds(char *buffer) // Si on recoit une commande de remise a zero de l'index if (atoi(cut[NBCOLORTOMERGE]) == -1) { - for (int i=0; inn_NbCouleurs; i++) + for (int i=0; inn_NbCouleurs; i++) segm->index[i] = i; } // Sinon on mix les couleurs @@ -215,7 +215,7 @@ Comm::ExecuteUiCmds(char *buffer) // Creation des groupes group = new Group(&img, segm); - group->JumpPoints(config->groupColor); + group->JumpPoints(oconfig->groupColor); group->TabOut(); img.DoImg(group->tabOut, data[1]); @@ -232,17 +232,17 @@ Comm::ExecuteUiCmds(char *buffer) // Decalage de toutes les couleurs pour supprimer une couleur unsigned char *pCur; - pCur = &config->node[numColorToDel*3]; - for(int i=numColorToDel*3; inn_NbCouleurs*3; i++) + pCur = &oconfig->node[numColorToDel*3]; + for(int i=numColorToDel*3; inn_NbCouleurs*3; i++) { *(pCur) = *(pCur+3); pCur++; } - config->nn_NbCouleurs--; + oconfig->nn_NbCouleurs--; // On refait le NN vu qu'il y a une couleur de moins - segm->BuildNN(config->nn_NbCouleurs, LOAD_FROM_FILE); + segm->BuildNN(oconfig->nn_NbCouleurs, LOAD_FROM_FILE); segm->ShowNodes(); @@ -255,13 +255,13 @@ Comm::ExecuteUiCmds(char *buffer) nbNNOutput = atoi(cut[NBNNOUTPUT]); // Reattribution du nombre de sorties d'origine - if (nbNNOutput != -1) config->nn_NbCouleurs = nbNNOutput; + if (nbNNOutput != -1) oconfig->nn_NbCouleurs = nbNNOutput; // Recharge du fichier des poids - config->LoadNNFile(); + oconfig->LoadNNFile("rc/poids"); // On refait le NN vu qu'il y a une couleur de moins - segm->BuildNN(config->nn_NbCouleurs, LOAD_FROM_FILE); + segm->BuildNN(oconfig->nn_NbCouleurs, LOAD_FROM_FILE); // On segmente l'image puis on la stocke SegmAndGroup(); @@ -275,7 +275,7 @@ Comm::ExecuteUiCmds(char *buffer) break; case 'g': // Selection du groupe - config->groupColor = atoi(cut[NUMGROUP]); + oconfig->groupColor = atoi(cut[NUMGROUP]); // On segmente l'image puis on la stocke SegmAndGroup(); @@ -302,8 +302,8 @@ Comm::ExecuteUiCmds(char *buffer) img.RGBtoYUV(); tex[3] = LoadImage(img.width, img.height, img.tabData, tex[3]); - // NN configure en RGB ou YUV ? - if (!config->colorMode == RGB) img.ReadRaw(filename); + // NN oconfigure en RGB ou YUV ? + if (!oconfig->colorMode == RGB) img.ReadRaw(filename); SegmAndGroup(); @@ -328,10 +328,10 @@ Comm::ExecuteUiCmds(char *buffer) nbColor = atoi(cut[NBCOLORNN]); // Assignation du nombre de couleurs a isoler par le reseau - config->nn_NbCouleurs = nbColor; + oconfig->nn_NbCouleurs = nbColor; // Genere aleatoire les poids - segm->BuildNN(config->nn_NbCouleurs, GENERATE); + segm->BuildNN(oconfig->nn_NbCouleurs, GENERATE); // Apprentissage segm->TrainNN(); @@ -343,6 +343,10 @@ Comm::ExecuteUiCmds(char *buffer) SendNodes(); break; + + case 'z': + group->ShowZones(); + break; } DrawGLScene(); diff --git a/2004/i/nono/src/ovision/comm.h b/2004/i/nono/src/ovision/comm.h index 6de692c..123418b 100644 --- a/2004/i/nono/src/ovision/comm.h +++ b/2004/i/nono/src/ovision/comm.h @@ -8,13 +8,12 @@ #include "adjust.h" -#include "img.h" +#include "imgFile.h" #include "segmNN.h" #include "oconfig.h" #include "group.h" - /// Interprete les commandes envoyes par l'interface UI et les executent class Comm { @@ -29,7 +28,7 @@ class Comm { ImgFile img; /// classe config - OConfig *config; + OConfig *oconfig; /// classe segmentation SegmNN *segm; diff --git a/2004/i/nono/src/ovision/imgFile.cc b/2004/i/nono/src/ovision/imgFile.cc index 98af37a..e1ba25c 100644 --- a/2004/i/nono/src/ovision/imgFile.cc +++ b/2004/i/nono/src/ovision/imgFile.cc @@ -27,6 +27,8 @@ ImgFile::ImgFile(void) { // Initialisation de DevIL. ilInit(); + + tabData = NULL; } diff --git a/2004/i/nono/src/ovision/map.cc b/2004/i/nono/src/ovision/map.cc index 288ce52..7f087a0 100644 --- a/2004/i/nono/src/ovision/map.cc +++ b/2004/i/nono/src/ovision/map.cc @@ -13,11 +13,12 @@ using namespace std; /// Constructeurs. -Map::Map (OConfig *config) +Map::Map (OConfig *config, Space *space) { lock = 0; Map::config = config; + Map::space = space; posGoal[0] = 105; posGoal[1] = 0; @@ -31,10 +32,10 @@ Map::~Map (void) /// Accessors const std::list::iterator & -Map::GetCurBall() const +Map::GetCurBall() { checkCurBall = false; - return CurBall; + return curBall; } @@ -100,7 +101,7 @@ Map::IsLock() /// Lock une balle pour savoir quel balle le robot suit void -Map::SetLock(int value) +Map::SetLock(bool value) { lock = value; } @@ -115,7 +116,7 @@ Map::AddBallsToMap(Group *group) while (pCur) { - if (!Islock()) + if (!IsLock()) { pos[0] = pCur->centerx-180; pos[1] = pCur->centery; @@ -140,9 +141,9 @@ Map::AddBallsToMap(Group *group) if (iCur->skepticism < config->skepticism_max) iCur->skepticism++; - } + } */ pCur = pCur->next; - */ } + } // TODO decremente d'autre marqueur diff --git a/2004/i/nono/src/ovision/map.h b/2004/i/nono/src/ovision/map.h index e0b64a0..c940bca 100644 --- a/2004/i/nono/src/ovision/map.h +++ b/2004/i/nono/src/ovision/map.h @@ -7,6 +7,8 @@ #include #include "group.h" #include "oconfig.h" +#include "space.h" + #define LOCKED 1 #define UNLOCKED 0 @@ -43,6 +45,7 @@ class Map { /// Variables configurables OConfig *config; + Space *space; /// position des goals int posGoal[2]; @@ -80,10 +83,10 @@ class Map int zoneRobot; /// Permet de savoir si une balle est dans curBall - bool CheckCurBall; + bool checkCurBall; /// Constructeurs. - Map (OConfig *config); + Map (OConfig *config, Space *space); /// Destructeur. ~Map (void); @@ -105,7 +108,7 @@ class Map /// Accessors - std::list::iterator GetCurBall(); + const std::list::iterator &GetCurBall(); protected: diff --git a/2004/i/nono/src/ovision/oconfig.cc b/2004/i/nono/src/ovision/oconfig.cc index 921449e..bdc4c5a 100644 --- a/2004/i/nono/src/ovision/oconfig.cc +++ b/2004/i/nono/src/ovision/oconfig.cc @@ -103,8 +103,7 @@ OConfig::OConfig(char *filename) { color = NULL; node = NULL; index = NULL; - LoadThFile(); - LoadNNFile(); + LoadNNFile("rc/poids"); } diff --git a/2004/i/nono/src/ovision/palet.jpg b/2004/i/nono/src/ovision/palet.jpg new file mode 100644 index 0000000..153ff67 Binary files /dev/null and b/2004/i/nono/src/ovision/palet.jpg differ diff --git a/2004/i/nono/src/ovision/segmNN.cc b/2004/i/nono/src/ovision/segmNN.cc index c1d1b75..9d24922 100644 --- a/2004/i/nono/src/ovision/segmNN.cc +++ b/2004/i/nono/src/ovision/segmNN.cc @@ -24,6 +24,7 @@ SegmNN::SegmNN(Img *img, OConfig *config) { node = NULL; index = NULL; + freq = NULL; tabSegm = NULL; } @@ -60,8 +61,15 @@ void SegmNN::BuildNN(int nbOutput, int loadFromFile) { } else { // Charge les poids du NN et l'index des couleurs - node = config->node; - index = config->index; + delete [] node; + node = new unsigned char[nbOutput*3]; + for (int i = 0; inode[i]; + delete [] index; + index = new int[nbOutput]; + for (int i = 0; iindex[i]; + freq = new unsigned int[nbOutput]; } return; } @@ -70,11 +78,11 @@ void SegmNN::BuildNN(int nbOutput, int loadFromFile) { srand((unsigned)time(0)); // Initialisation des noeuds du NN - if (node) delete [] node; + delete [] node; node = new unsigned char[nbOutput*3]; - if (index) delete [] index; + delete [] index; index = new int[nbOutput]; - if (freq) delete [] freq; + delete [] freq; freq = new unsigned int[nbOutput]; @@ -89,6 +97,7 @@ void SegmNN::BuildNN(int nbOutput, int loadFromFile) { else if (node[i*3+j] > 220) node[i*3+j] = 220; } } + cout << "oooooo\n"; } diff --git a/2004/i/nono/src/ovision/test.cc b/2004/i/nono/src/ovision/test.cc index 85187f5..1adf09d 100644 --- a/2004/i/nono/src/ovision/test.cc +++ b/2004/i/nono/src/ovision/test.cc @@ -17,7 +17,7 @@ using namespace std; int main(int argc, char **argv) { Img img; - OConfig config("vision.conf"); + OConfig config("rc/vision.conf"); system("rm -Rf NN && mkdir NN"); diff --git a/2004/i/nono/src/ovision/testmap.cc b/2004/i/nono/src/ovision/testmap.cc index 33dc76e..b6a18a6 100644 --- a/2004/i/nono/src/ovision/testmap.cc +++ b/2004/i/nono/src/ovision/testmap.cc @@ -1,27 +1,39 @@ - +#include "image/raw_loader.h" #include "map.h" #include "oconfig.h" -//#include "group.h" +#include "group.h" +#include "space.h" int main() { - OConfig config("vision.conf"); - Map map(&config); + OConfig oconfig("rc/vision.conf"); + + Img img; +// img.ReadRaw("im.jpg"); + RawLoader rawLoader("im2000.rgb", 360, 296, ImageLoader::rgb); + img.load(rawLoader); + + img.RGBtoYUV(); +// img.WriteRGB("test.rgb"); - ImgFile img; - img.ReadRaw("palet.jpg"); + Space space(img.width, img.height); + space.AddSetupPoint (109, 36, -150, 900); + space.AddSetupPoint (84, 102, -150, 600); + space.AddSetupPoint (50, 259, -150, 300); + space.Setup (); - SegmNN segmNN(&img, &config); - segmNN.BuildNN(config.nn_NbCouleurs, LOAD_FROM_FILE); + SegmNN segmNN(&img, &oconfig); + segmNN.BuildNN(oconfig.nn_NbCouleurs, LOAD_FROM_FILE); segmNN.Segm(); Group group(&img, &segmNN); - group.JumpPoints(config.groupColor); + group.JumpPoints(oconfig.groupColor); group.ShowZones(); + Map map(&oconfig, &space); map.ShowBalls(); map.AddBallsToMap(&group); map.ShowBalls(); diff --git a/2004/i/nono/src/ovision/ui.cc b/2004/i/nono/src/ovision/ui.cc index a94b47b..b40990b 100644 --- a/2004/i/nono/src/ovision/ui.cc +++ b/2004/i/nono/src/ovision/ui.cc @@ -25,7 +25,7 @@ using namespace std; /// Nombre d'items du menu #define NBITEMS 11 -OConfig config("vision.conf"); +OConfig oconfig("rc/vision.conf"); /// Items du menu principal char *itemsName[NBITEMS][2] = {{"Move color", "Permet d'ajuster les niveaux d'une couleur"}, @@ -35,7 +35,7 @@ char *itemsName[NBITEMS][2] = {{"Move color", "Permet d'ajuster les niveaux d'un {"Select color goal", "Selectionne l'index de la couleur des poteaux"}, {"Training", "Entraine le reseau de neurones"}, {"New network", "Regenere de nouveaux poids pour le reseau"}, - {"Cancel changes", "Recharge le fichier de config"}, + {"Cancel changes", "Recharge le fichier de oconfig"}, {"Save changes", "Sauvegarde les changements dans le fichier"}, {"Quit", "Quitte le programme"}, {NULL, NULL}}; @@ -80,8 +80,8 @@ UI::UI() curImage = 0; ParseFileList(); - config.LoadNNFile(); - savedNNColorNumber = config.nn_NbCouleurs; + oconfig.LoadNNFile(); + savedNNColorNumber = oconfig.nn_NbCouleurs; // Ecriture du PID dans un fichier long uiPid = getpid(); @@ -142,11 +142,11 @@ UI::UpdateNodes() char buf[10]; // On parcours toutes les couleurs - for (int i=0; i < config.nn_NbCouleurs*3; i++) + for (int i=0; i < oconfig.nn_NbCouleurs*3; i++) { // On lis le fifo et on le copie dans le tableau node read(fifo, buf, 10); - config.node[i] = atoi(buf); + oconfig.node[i] = atoi(buf); } } @@ -158,7 +158,7 @@ UI::ParseFileList() { // On enleve l'ancienne liste et on en cree une nouvelle char buf[100]; - sprintf(buf, "rm -Rf imagelist ; ls %s | grep -e .jpg -e .JPG -e .png -e .PNG > imagelist", config.imgPath); + sprintf(buf, "rm -Rf imagelist ; ls %s | grep -e .jpg -e .JPG -e .png -e .PNG > imagelist", oconfig.imgPath); system(buf); FILE *file; @@ -242,12 +242,12 @@ UI::ChooseColor(int type, int current) // Nombre d'item a afficher if (type == NB_COULEUR) - config.nn_NbCouleurs = 10; + oconfig.nn_NbCouleurs = 10; // Creation des items - ITEM **colorItem = new ITEM*[config.nn_NbCouleurs+2]; - colorName = new char*[config.nn_NbCouleurs+1]; - for (int i=0; i= lengthFileList) curImage = 0; // Envoie de la commande pour le chargement de la nouvelle image - sprintf(buf, "n %s%s\n", config.imgPath, fileList[curImage]); + sprintf(buf, "n %s%s\n", oconfig.imgPath, fileList[curImage]); SendSignal(buf); break; + + case 'g': + SendSignal("z\n"); + break; } // On affiche le texte d'aide de l'item correspondant -- cgit v1.2.3