Bonjour,
Je voudrais utiliser SVM pour faire un apprentissage.
Pourriez-vous m'aider ? merci
Version imprimable
Bonjour,
Je voudrais utiliser SVM pour faire un apprentissage.
Pourriez-vous m'aider ? merci
salut
je suis passé par plusieurs documents sur la façon d'utiliser LIBSVM de formation et de classification. Mais je suis incapable d'appliquer ces méthodes de formation. S'il vous plaît m'aider à résoudre ce problème.
Bonjour,
J'essaie de compiler le projet:
mais je trouve des erreurs ::(Code:
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 #include <cv.h> #include <highgui.h> #include <ml.h> #include <stdio.h> int main (int argc, char **argv) { int i, j, ii, jj; int width = 28, height = 30; int image_dim = width * height; int pimage_num = 1; int nimage_num = 1; int all_image_num = pimage_num + nimage_num; IplImage *img_org; IplImage *sample_img; int res[all_image_num]; float data[all_image_num * image_dim]; CvMat data_mat, res_mat; CvTermCriteria criteria; CvSVM svm = CvSVM (); CvSVMParams param; char filename[64]; for (i = 0; i < pimage_num; i++) { sprintf (filename, "positive/%03d.jpg", i); img_org = cvLoadImage (filename, CV_LOAD_IMAGE_GRAYSCALE); sample_img = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1); cvResize (img_org, sample_img); cvSmooth (sample_img, sample_img, CV_GAUSSIAN, 3, 0, 0, 0); for (ii = 0; ii < height; ii++) { for (jj = 0; jj < width; jj++) { data[i * image_dim + (ii * width) + jj] = float ((int) ((uchar) (sample_img->imageData[ii * sample_img->widthStep + jj])) / 255.0); } } res[i] = 1; } j = i; for (i = j; i < j + nimage_num; i++) { sprintf (filename, "negative/%03d.jpg", i - j); img_org = cvLoadImage (filename, CV_LOAD_IMAGE_GRAYSCALE); sample_img = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1); cvResize (img_org, sample_img); cvSmooth (sample_img, sample_img, CV_GAUSSIAN, 3, 0, 0, 0); for (ii = 0; ii < height; ii++) { for (jj = 0; jj < width; jj++) { data[i * image_dim + (ii * width) + jj] = float ((int) ((uchar) (sample_img->imageData[ii * sample_img->widthStep + jj])) / 255.0); } } res[i] = 0; } cvInitMatHeader (&data_mat, all_image_num, image_dim, CV_32FC1, data); cvInitMatHeader (&res_mat, all_image_num, 1, CV_32SC1, res); criteria = cvTermCriteria (CV_TERMCRIT_EPS, 1000, FLT_EPSILON); param = CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 0.09, 1.0, 10.0, 0.5, 1.0, NULL, criteria); svm.train (&data_mat, &res_mat, NULL, NULL, param); svm.save ("svm_image.xml"); cvReleaseImage (&img_org); cvReleaseImage (&sample_img); return 0; }
Quelqu'un peut m'aider s'il vous plait.Citation:
undefined reference to `CvSVM::CvSVM()'
undefined reference to `CvSVMParams::CvSVMParams()'
undefined reference to `CvSVMParams::CvSVMParams(int, int, double, double, double, double, double, double, CvMat*, CvTermCriteria)'
undefined reference to `CvSVM::train(CvMat const*, CvMat const*, CvMat const*, CvMat const*, CvSVMParams)'
undefined reference to `CvStatModel::save(char const*, char const*) const'
undefined reference to `CvSVM::~CvSVM()'
Merci
ca serait pas plutot comme ca pour créer l'objet ?Code:CvSVM svm = new CvSVM();
salut
même problème :cry: :cry: avec:
j'ai pas trouvé la solution, normalement les fonctions de SVM sont connues dans la bibliothèque ML !!!Code:CvSVM svm = new CvSVM();
Bonjour,
Est-ce qu'il faut ajouter la classe CvSVM ? ou bien c déjà connu dans la bibliothèque ML ?
merciiiCode:
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 class CvSVM : public CvStatModel { public: // SVM type enum { C_SVC=100, NU_SVC=101, ONE_CLASS=102, EPS_SVR=103, NU_SVR=104 }; // SVM kernel type enum { LINEAR=0, POLY=1, RBF=2, SIGMOID=3 }; // SVM params type enum { C=0, GAMMA=1, P=2, NU=3, COEF=4, DEGREE=5 }; CvSVM(); virtual ~CvSVM(); CvSVM( const CvMat* _train_data, const CvMat* _responses, const CvMat* _var_idx=0, const CvMat* _sample_idx=0, CvSVMParams _params=CvSVMParams() ); virtual bool train( const CvMat* _train_data, const CvMat* _responses, const CvMat* _var_idx=0, const CvMat* _sample_idx=0, CvSVMParams _params=CvSVMParams() ); virtual bool train_auto( const CvMat* _train_data, const CvMat* _responses, const CvMat* _var_idx, const CvMat* _sample_idx, CvSVMParams _params, int k_fold = 10, CvParamGrid C_grid = get_default_grid(CvSVM::C), CvParamGrid gamma_grid = get_default_grid(CvSVM::GAMMA), CvParamGrid p_grid = get_default_grid(CvSVM::P), CvParamGrid nu_grid = get_default_grid(CvSVM::NU), CvParamGrid coef_grid = get_default_grid(CvSVM::COEF), CvParamGrid degree_grid = get_default_grid(CvSVM::DEGREE) ); virtual float predict( const CvMat* _sample ) const; virtual int get_support_vector_count() const; virtual const float* get_support_vector(int i) const; virtual CvSVMParams get_params() const { return params; }; virtual void clear(); static CvParamGrid get_default_grid( int param_id ); virtual void save( const char* filename, const char* name=0 ); virtual void load( const char* filename, const char* name=0 ); virtual void write( CvFileStorage* storage, const char* name ); virtual void read( CvFileStorage* storage, CvFileNode* node ); int get_var_count() const { return var_idx ? var_idx->cols : var_all; } protected: ... };
je pense que cette erreur est due à un probleme d'installation d'opencv. dans la version opencv2.1 ils ont deja inclut cette classe grace a la fameuse LIBSVM. tu n'a qu'a utilser les bonne les commandes. Regarde la doc officielle:
http://opencv.willowgarage.com/docum..._machines.html
J'espere que cela aidera à resoudre ton probleme. Bon courage ;)
pa de nouvelle !!