summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/ovision.cc
blob: a80d62f1b633f25e6d691f1fc305d54d778a2fe3 (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
128
129
130
131
132
133
134
#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);
}

/// Renvoie le pointeur sur Video4Linux
Video4Linux & 
OVision::GetVideo4Linux ()
{
    return *v4l;
}