Global CMake reorganization:
[profile/ivi/opencv.git] / apps / traincascade / traincascade.cpp
1 #include "cv.h"
2 #include "cascadeclassifier.h"
3
4 using namespace std;
5
6 int main( int argc, char* argv[] )
7 {
8     CvCascadeClassifier classifier;
9     String cascadeDirName, vecName, bgName;
10     int numPos    = 2000;
11     int numNeg    = 1000;
12     int numStages = 20;
13     int precalcValBufSize = 256,
14         precalcIdxBufSize = 256;
15     bool baseFormatSave = false;
16     
17     CvCascadeParams cascadeParams;
18     CvCascadeBoostParams stageParams;
19     Ptr<CvFeatureParams> featureParams[] = { Ptr<CvFeatureParams>(new CvHaarFeatureParams),
20                                              Ptr<CvFeatureParams>(new CvLBPFeatureParams), 
21                                              Ptr<CvFeatureParams>(new CvHOGFeatureParams)
22                                            };
23     int fc = sizeof(featureParams)/sizeof(featureParams[0]);
24     if( argc == 1 )
25     {
26         cout << "Usage: " << argv[0] << endl;
27         cout << "  -data <cascade_dir_name>" << endl;
28         cout << "  -vec <vec_file_name>" << endl;
29         cout << "  -bg <background_file_name>" << endl;
30         cout << "  [-numPos <number_of_positive_samples = " << numPos << ">]" << endl;
31         cout << "  [-numNeg <number_of_negative_samples = " << numNeg << ">]" << endl;
32         cout << "  [-numStages <number_of_stages = " << numStages << ">]" << endl;
33         cout << "  [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
34         cout << "  [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
35         cout << "  [-baseFormatSave]" << endl;
36         cascadeParams.printDefaults();
37         stageParams.printDefaults();
38         for( int fi = 0; fi < fc; fi++ )
39             featureParams[fi]->printDefaults();
40         return 0;
41     }
42
43     for( int i = 1; i < argc; i++ )
44     {
45         bool set = false;
46         if( !strcmp( argv[i], "-data" ) )
47         {
48             cascadeDirName = argv[++i];
49         }
50         else if( !strcmp( argv[i], "-vec" ) )
51         {
52             vecName = argv[++i];
53         }
54         else if( !strcmp( argv[i], "-bg" ) )
55         {
56             bgName = argv[++i];
57         }
58         else if( !strcmp( argv[i], "-numPos" ) )
59         {
60             numPos = atoi( argv[++i] );
61         }
62         else if( !strcmp( argv[i], "-numNeg" ) )
63         {
64             numNeg = atoi( argv[++i] );
65         }
66         else if( !strcmp( argv[i], "-numStages" ) )
67         {
68             numStages = atoi( argv[++i] );
69         }
70         else if( !strcmp( argv[i], "-precalcValBufSize" ) )
71         {
72             precalcValBufSize = atoi( argv[++i] );
73         }
74         else if( !strcmp( argv[i], "-precalcIdxBufSize" ) )
75         {
76             precalcIdxBufSize = atoi( argv[++i] );
77         }
78         else if( !strcmp( argv[i], "-baseFormatSave" ) )
79         {
80             baseFormatSave = true;
81         }
82         else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
83         else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
84         else if ( !set )
85         {
86             for( int fi = 0; fi < fc; fi++ )
87             {
88                 set = featureParams[fi]->scanAttr(argv[i], argv[i+1]);          
89                 if ( !set )
90                 {
91                     i++;
92                     break;
93                 }
94             }
95         }
96     }
97   
98     classifier.train( cascadeDirName,
99                       vecName,
100                       bgName, 
101                       numPos, numNeg, 
102                       precalcValBufSize, precalcIdxBufSize,
103                       numStages,
104                       cascadeParams,
105                       *featureParams[cascadeParams.featureType],
106                       stageParams,
107                       baseFormatSave );
108     return 0;
109 }