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