2 #include "cascadeclassifier.h"
4 int main( int argc, char* argv[] )
6 CvCascadeClassifier classifier;
7 String cascadeDirName, vecName, bgName;
11 int precalcValBufSize = 256,
12 precalcIdxBufSize = 256;
13 bool baseFormatSave = false;
15 CvCascadeParams cascadeParams;
16 CvCascadeBoostParams stageParams;
17 Ptr<CvFeatureParams> featureParams[] = { Ptr<CvFeatureParams>(new CvHaarFeatureParams),
18 Ptr<CvFeatureParams>(new CvLBPFeatureParams)
20 int fc = sizeof(featureParams)/sizeof(featureParams[0]);
23 cout << "Usage: " << argv[0] << endl;
24 cout << " -data <cascade_dir_name>" << endl;
25 cout << " -vec <vec_file_name>" << endl;
26 cout << " -bg <background_file_name>" << endl;
27 cout << " [-numPos <number_of_positive_samples = " << numPos << ">]" << endl;
28 cout << " [-numNeg <number_of_negative_samples = " << numNeg << ">]" << endl;
29 cout << " [-numStages <number_of_stages = " << numStages << ">]" << endl;
30 cout << " [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
31 cout << " [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
32 cout << " [-baseFormatSave]" << endl;
33 cascadeParams.printDefaults();
34 stageParams.printDefaults();
35 for( int fi = 0; fi < fc; fi++ )
36 featureParams[fi]->printDefaults();
40 for( int i = 1; i < argc; i++ )
43 if( !strcmp( argv[i], "-data" ) )
45 cascadeDirName = argv[++i];
47 else if( !strcmp( argv[i], "-vec" ) )
51 else if( !strcmp( argv[i], "-bg" ) )
55 else if( !strcmp( argv[i], "-numPos" ) )
57 numPos = atoi( argv[++i] );
59 else if( !strcmp( argv[i], "-numNeg" ) )
61 numNeg = atoi( argv[++i] );
63 else if( !strcmp( argv[i], "-numStages" ) )
65 numStages = atoi( argv[++i] );
67 else if( !strcmp( argv[i], "-precalcValBufSize" ) )
69 precalcValBufSize = atoi( argv[++i] );
71 else if( !strcmp( argv[i], "-precalcIdxBufSize" ) )
73 precalcIdxBufSize = atoi( argv[++i] );
75 else if( !strcmp( argv[i], "-baseFormatSave" ) )
77 baseFormatSave = true;
79 else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
80 else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
83 for( int fi = 0; fi < fc; fi++ )
85 set = featureParams[fi]->scanAttr(argv[i], argv[i+1]);
95 classifier.train( cascadeDirName,
99 precalcValBufSize, precalcIdxBufSize,
102 *featureParams[cascadeParams.featureType],