summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/ovision.cc
blob: e4c8d2c1c2bd773339ab9b907ffec4c04b0f1f34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "ovision.h"
#include <iostream>
    
/// Constructeur
OVision::OVision ()
{
    // Initialisation des classes
    oconfig = 	new OConfig;
    img =	new Img;

    // Initialisation cam�ra
    Video4Linux::ColorSpace cs;
    cs = Video4Linux::rgb;
    v4l = new Video4Linux ("/dev/video", cs, 60000);
    v4l->calibrate ();

    // Prendre une image pour que la taille de l'image soit configur�
    img->load (*v4l);
    
    segm =	new SegmTable (img);
    group =	new Group (img, segm);
    
    space = new Space(img->width, img->height);
    map =	new Map (space);

    // Construction du r�seau de neurones
    segm->BuildNN (oconfig->nn_NbCouleurs, LOAD_FROM_FILE);

    // Calibration des longueurs



    space->AddSetupPoint (314,	6,	100,	400);
    space->AddSetupPoint (237,	224,	100,	900);
    space->AddSetupPoint (275,	113,	100,	550);
    space->Setup (0.00891157, 0.258144, 403.801);
   
    // Ouverture ou cr�ation de la table de couleur
    if (!segm->LoadColorTableFile ())
      {
	segm->DoColorTable ();
	segm->CreateColorTableFile ();
      }

    

    step = 0;
}

/// Destructeur
OVision::~OVision ()
{
    delete oconfig;
    delete img;
    delete segm;
    delete group;
    delete map;
}

/// Prends une image avec la cam�ra
void
OVision::TakeShoot ()
{
    // Prends une image
    img->load(*v4l);
}

    
/// Analyse une image
void
OVision::Update ()
{
    // Compteur du nombre d'image trait�
    step++;

    // Cherche les balles
    group->JumpPoints(oconfig->groupColor);

    // Parcours la liste de balles trouv�es
    if (group->zoneListBall)
      {
	int x,y;
	x = group->zoneListBall->centerx;
	y = img->height -  group->zoneListBall->centery;
	space->GetLoc(x, y, x, y);
      }

    // Mets � jour la map
    map->AddBallsToMap (group);

    double balX, balY;
    if (map->GetCurBallPos (balX, balY))
	std::cout << "Balle Courante: " << balX << "   " << balY << std::endl;


    if (map->IsTree ())
      {
	double treeX, treeY;
	map->GetTreePos (treeX, treeY);
	std::cout << "Tree: " << treeX << "   " << treeY << std::endl; 
      }
}

/// Affiche d'info sur l'update
void
OVision::ShowInfo ()
{
    std::cout << "-----------------------------------------------------------------" << std::endl;
    std::cout << "image n�" << step << std::endl;

    // Info sur les zones trouv�es
    group->ShowZones();
    std::cout << "-------------\n" << std::endl;


    std::cout << "-------------\n" << std::endl;
    std::cout << "Map:\n" << std::endl;
    // Info sur les balles trouv�es
    map->ShowBalls ();
}

/// Renvoie la position
bool
OVision::GetBall (double &x, double &y)
{
    return map->GetCurBallPos (x, y);
}