1 #include "opencv2/core/core.hpp"
2 #include "opencv2/core/internal.hpp"
5 #include "cascadeclassifier.h"
10 int main( int argc, char* argv[] )
12 CvCascadeClassifier classifier;
13 string cascadeDirName, vecName, bgName;
17 int precalcValBufSize = 256,
18 precalcIdxBufSize = 256;
19 bool baseFormatSave = false;
21 CvCascadeParams cascadeParams;
22 CvCascadeBoostParams stageParams;
23 Ptr<CvFeatureParams> featureParams[] = { Ptr<CvFeatureParams>(new CvHaarFeatureParams),
24 Ptr<CvFeatureParams>(new CvLBPFeatureParams),
25 Ptr<CvFeatureParams>(new CvHOGFeatureParams)
27 int fc = sizeof(featureParams)/sizeof(featureParams[0]);
30 cout << "Usage: " << argv[0] << endl;
31 cout << " -data <cascade_dir_name>" << endl;
32 cout << " -vec <vec_file_name>" << endl;
33 cout << " -bg <background_file_name>" << endl;
34 cout << " [-numPos <number_of_positive_samples = " << numPos << ">]" << endl;
35 cout << " [-numNeg <number_of_negative_samples = " << numNeg << ">]" << endl;
36 cout << " [-numStages <number_of_stages = " << numStages << ">]" << endl;
37 cout << " [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
38 cout << " [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
39 cout << " [-baseFormatSave]" << endl;
40 cascadeParams.printDefaults();
41 stageParams.printDefaults();
42 for( int fi = 0; fi < fc; fi++ )
43 featureParams[fi]->printDefaults();
47 for( int i = 1; i < argc; i++ )
50 if( !strcmp( argv[i], "-data" ) )
52 cascadeDirName = argv[++i];
54 else if( !strcmp( argv[i], "-vec" ) )
58 else if( !strcmp( argv[i], "-bg" ) )
62 else if( !strcmp( argv[i], "-numPos" ) )
64 numPos = atoi( argv[++i] );
66 else if( !strcmp( argv[i], "-numNeg" ) )
68 numNeg = atoi( argv[++i] );
70 else if( !strcmp( argv[i], "-numStages" ) )
72 numStages = atoi( argv[++i] );
74 else if( !strcmp( argv[i], "-precalcValBufSize" ) )
76 precalcValBufSize = atoi( argv[++i] );
78 else if( !strcmp( argv[i], "-precalcIdxBufSize" ) )
80 precalcIdxBufSize = atoi( argv[++i] );
82 else if( !strcmp( argv[i], "-baseFormatSave" ) )
84 baseFormatSave = true;
86 else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
87 else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
90 for( int fi = 0; fi < fc; fi++ )
92 set = featureParams[fi]->scanAttr(argv[i], argv[i+1]);
102 classifier.train( cascadeDirName,
106 precalcValBufSize, precalcIdxBufSize,
109 *featureParams[cascadeParams.featureType],