]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/apps/traincascade/traincascade.cpp
ec1beeb206484131af47e9a5dfe961232d02d678
[opencv.git] / opencv / apps / traincascade / traincascade.cpp
1 #include "cv.h"
2 #include "cascadeclassifier.h"
3
4 int main( int argc, char* argv[] )
5 {
6     CvCascadeClassifier classifier;
7     char* cascadeDirName = NULL;
8     char* vecName = NULL;
9     char* bgName  = NULL;
10     int numPos    = 1000;
11     int numNeg    = 1000;
12     int numStages = 20;
13     int numPrecalcVal = 10000,
14         numPrecalcIdx = 50000;
15     bool baseFormatSave = false;
16     
17     CvCascadeParams cascadeParams;
18
19     CvCascadeBoostParams stageParams;
20     
21     CvFeatureParams* featureParams[] = { new CvHaarFeatureParams(),
22                                          new CvLBPFeatureParams() }; 
23     int fc = sizeof(featureParams)/sizeof(featureParams[0]);
24     
25     if( argc == 1 )
26     {
27         printf( "Usage: %s\n"
28                 "  -data <cascade_dir_name>\n"
29                 "  -vec <vec_file_name>\n"
30                 "  -bg <background_file_name>\n"
31                 "  [-numPos <number_of_positive_samples = %d>]\n"
32                 "  [-numNeg <number_of_negative_samples = %d>]\n"
33                 "  [-numStages <number_of_stages = %d>]\n"
34                 "  [-numPrecalcVal <number_of_precalculated_vals = %d>]\n"
35                 "  [-numPrecalcIdx <number_of_precalculated_idxs = %d>]\n"
36                 "  [-baseFormatSave]\n",
37                 argv[0], numPos, numNeg, numStages, numPrecalcVal, numPrecalcIdx );
38
39         cascadeParams.printDefaults();
40
41         printf("--boostStageParams--\n");
42         stageParams.printDefault();
43
44         for( int fi = 0; fi < fc; fi++ )
45             featureParams[fi]->printDefaults();
46
47         return 0;
48     }
49
50     for( int i = 1; i < argc; i++ )
51     {
52         bool set = false;
53         if( !strcmp( argv[i], "-data" ) )
54         {
55             cascadeDirName = argv[++i];
56         }
57         else if( !strcmp( argv[i], "-vec" ) )
58         {
59             vecName = argv[++i];
60         }
61         else if( !strcmp( argv[i], "-bg" ) )
62         {
63             bgName = argv[++i];
64         }
65         else if( !strcmp( argv[i], "-numPos" ) )
66         {
67             numPos = atoi( argv[++i] );
68         }
69         else if( !strcmp( argv[i], "-numNeg" ) )
70         {
71             numNeg = atoi( argv[++i] );
72         }
73         else if( !strcmp( argv[i], "-numStages" ) )
74         {
75             numStages = atoi( argv[++i] );
76         }
77         else if( !strcmp( argv[i], "-numPrecalcVal" ) )
78         {
79             numPrecalcVal = atoi( argv[++i] );
80         }
81         else if( !strcmp( argv[i], "-numPrecalcIdx" ) )
82         {
83             numPrecalcIdx = atoi( argv[++i] );
84         }
85         else if( !strcmp( argv[i], "-baseFormatSave" ) )
86         {
87             baseFormatSave = true;
88         }
89         else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
90         else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
91         else if ( !set )
92         {
93             for( int fi = 0; fi < fc; fi++ )
94             {
95                 set = featureParams[fi]->scanAttr(argv[i], argv[i+1]);          
96                 if ( !set )
97                 {
98                     i++;
99                     break;
100                 }
101             }
102         }
103     }
104   
105     classifier.train( cascadeDirName,
106                       vecName,
107                       bgName, 
108                       numPos, numNeg, 
109                       numPrecalcVal, numPrecalcIdx,
110                       numStages,
111                       cascadeParams,
112                       *featureParams[cascadeParams.featureType],
113                       stageParams,
114                       baseFormatSave );
115
116     for( int fi = 0; fi < fc; fi++ )
117         delete featureParams[fi];
118
119     return 0;
120 }