Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/apps/traincascade/cascadeclassifier.h
16337 views
1
#ifndef _OPENCV_CASCADECLASSIFIER_H_
2
#define _OPENCV_CASCADECLASSIFIER_H_
3
4
#include <ctime>
5
#include "traincascade_features.h"
6
#include "haarfeatures.h"
7
#include "lbpfeatures.h"
8
#include "HOGfeatures.h" //new
9
#include "boost.h"
10
11
#define CC_CASCADE_FILENAME "cascade.xml"
12
#define CC_PARAMS_FILENAME "params.xml"
13
14
#define CC_CASCADE_PARAMS "cascadeParams"
15
#define CC_STAGE_TYPE "stageType"
16
#define CC_FEATURE_TYPE "featureType"
17
#define CC_HEIGHT "height"
18
#define CC_WIDTH "width"
19
20
#define CC_STAGE_NUM "stageNum"
21
#define CC_STAGES "stages"
22
#define CC_STAGE_PARAMS "stageParams"
23
24
#define CC_BOOST "BOOST"
25
#define CC_BOOST_TYPE "boostType"
26
#define CC_DISCRETE_BOOST "DAB"
27
#define CC_REAL_BOOST "RAB"
28
#define CC_LOGIT_BOOST "LB"
29
#define CC_GENTLE_BOOST "GAB"
30
#define CC_MINHITRATE "minHitRate"
31
#define CC_MAXFALSEALARM "maxFalseAlarm"
32
#define CC_TRIM_RATE "weightTrimRate"
33
#define CC_MAX_DEPTH "maxDepth"
34
#define CC_WEAK_COUNT "maxWeakCount"
35
#define CC_STAGE_THRESHOLD "stageThreshold"
36
#define CC_WEAK_CLASSIFIERS "weakClassifiers"
37
#define CC_INTERNAL_NODES "internalNodes"
38
#define CC_LEAF_VALUES "leafValues"
39
40
#define CC_FEATURES FEATURES
41
#define CC_FEATURE_PARAMS "featureParams"
42
#define CC_MAX_CAT_COUNT "maxCatCount"
43
#define CC_FEATURE_SIZE "featSize"
44
45
#define CC_HAAR "HAAR"
46
#define CC_MODE "mode"
47
#define CC_MODE_BASIC "BASIC"
48
#define CC_MODE_CORE "CORE"
49
#define CC_MODE_ALL "ALL"
50
#define CC_RECTS "rects"
51
#define CC_TILTED "tilted"
52
53
#define CC_LBP "LBP"
54
#define CC_RECT "rect"
55
56
#define CC_HOG "HOG"
57
58
#ifdef _WIN32
59
#define TIME( arg ) (((double) clock()) / CLOCKS_PER_SEC)
60
#else
61
#define TIME( arg ) (time( arg ))
62
#endif
63
64
class CvCascadeParams : public CvParams
65
{
66
public:
67
enum { BOOST = 0 };
68
static const int defaultStageType = BOOST;
69
static const int defaultFeatureType = CvFeatureParams::HAAR;
70
71
CvCascadeParams();
72
CvCascadeParams( int _stageType, int _featureType );
73
void write( cv::FileStorage &fs ) const;
74
bool read( const cv::FileNode &node );
75
76
void printDefaults() const;
77
void printAttrs() const;
78
bool scanAttr( const std::string prmName, const std::string val );
79
80
int stageType;
81
int featureType;
82
cv::Size winSize;
83
};
84
85
class CvCascadeClassifier
86
{
87
public:
88
bool train( const std::string _cascadeDirName,
89
const std::string _posFilename,
90
const std::string _negFilename,
91
int _numPos, int _numNeg,
92
int _precalcValBufSize, int _precalcIdxBufSize,
93
int _numStages,
94
const CvCascadeParams& _cascadeParams,
95
const CvFeatureParams& _featureParams,
96
const CvCascadeBoostParams& _stageParams,
97
bool baseFormatSave = false,
98
double acceptanceRatioBreakValue = -1.0 );
99
private:
100
int predict( int sampleIdx );
101
void save( const std::string cascadeDirName, bool baseFormat = false );
102
bool load( const std::string cascadeDirName );
103
bool updateTrainingSet( double minimumAcceptanceRatio, double& acceptanceRatio );
104
int fillPassedSamples( int first, int count, bool isPositive, double requiredAcceptanceRatio, int64& consumed );
105
106
void writeParams( cv::FileStorage &fs ) const;
107
void writeStages( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
108
void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
109
bool readParams( const cv::FileNode &node );
110
bool readStages( const cv::FileNode &node );
111
112
void getUsedFeaturesIdxMap( cv::Mat& featureMap );
113
114
CvCascadeParams cascadeParams;
115
cv::Ptr<CvFeatureParams> featureParams;
116
cv::Ptr<CvCascadeBoostParams> stageParams;
117
118
cv::Ptr<CvFeatureEvaluator> featureEvaluator;
119
std::vector< cv::Ptr<CvCascadeBoost> > stageClassifiers;
120
CvCascadeImageReader imgReader;
121
int numStages, curNumSamples;
122
int numPos, numNeg;
123
};
124
125
#endif
126
127