Commit 40cad71c9a41fbeba16a04dcb223cbad6cc74a23
1 parent
5c72bcd4
Various cascade improvements
Showing
1 changed file
with
15 additions
and
7 deletions
openbr/plugins/classification/cascade.cpp
| 1 | 1 | #include <opencv2/imgproc/imgproc.hpp> |
| 2 | 2 | |
| 3 | 3 | #include <openbr/plugins/openbr_internal.h> |
| 4 | +#include <openbr/core/common.h> | |
| 4 | 5 | |
| 5 | 6 | using namespace cv; |
| 6 | 7 | |
| ... | ... | @@ -25,6 +26,8 @@ struct ImageHandler |
| 25 | 26 | stepFactor = 0.5F; |
| 26 | 27 | round = 0; |
| 27 | 28 | |
| 29 | + indices = Common::RandSample(posImages.size(),posImages.size(),true); | |
| 30 | + | |
| 28 | 31 | return true; |
| 29 | 32 | } |
| 30 | 33 | |
| ... | ... | @@ -85,7 +88,7 @@ struct ImageHandler |
| 85 | 88 | if (posIdx >= posImages.size()) |
| 86 | 89 | return false; |
| 87 | 90 | |
| 88 | - posImages[posIdx++].copyTo(_img); | |
| 91 | + posImages[indices[posIdx++]].copyTo(_img); | |
| 89 | 92 | return true; |
| 90 | 93 | } |
| 91 | 94 | |
| ... | ... | @@ -100,6 +103,8 @@ struct ImageHandler |
| 100 | 103 | float stepFactor; |
| 101 | 104 | size_t round; |
| 102 | 105 | Size winSize; |
| 106 | + | |
| 107 | + QList<int> indices; | |
| 103 | 108 | }; |
| 104 | 109 | |
| 105 | 110 | /*! |
| ... | ... | @@ -139,10 +144,15 @@ class CascadeClassifier : public Classifier |
| 139 | 144 | for (int i = 0; i < images.size(); i++) |
| 140 | 145 | labels[i] == 1 ? posImages.append(images[i]) : negImages.append(images[i]); |
| 141 | 146 | |
| 147 | + stages.reserve(numStages); | |
| 148 | + for (int i = 0; i < numStages; i++) { | |
| 149 | + Classifier *next_stage = Classifier::make(stageDescription, NULL); | |
| 150 | + stages.append(next_stage); | |
| 151 | + } | |
| 152 | + | |
| 142 | 153 | ImageHandler imgHandler; |
| 143 | - imgHandler.create(posImages, negImages, Size(24, 24)); | |
| 154 | + imgHandler.create(posImages, negImages, windowSize()); | |
| 144 | 155 | |
| 145 | - stages.reserve(numStages); | |
| 146 | 156 | for (int i = 0; i < numStages; i++) { |
| 147 | 157 | qDebug() << "===== TRAINING" << i << "stage ====="; |
| 148 | 158 | qDebug() << "<BEGIN"; |
| ... | ... | @@ -157,9 +167,7 @@ class CascadeClassifier : public Classifier |
| 157 | 167 | return; |
| 158 | 168 | } |
| 159 | 169 | |
| 160 | - Classifier *next_stage = Classifier::make(stageDescription, NULL); | |
| 161 | - next_stage->train(trainingImages, trainingLabels); | |
| 162 | - stages.append(next_stage); | |
| 170 | + stages[i]->train(trainingImages, trainingLabels); | |
| 163 | 171 | |
| 164 | 172 | qDebug() << "END>"; |
| 165 | 173 | } |
| ... | ... | @@ -193,7 +201,7 @@ class CascadeClassifier : public Classifier |
| 193 | 201 | return stages.first()->preprocess(image); |
| 194 | 202 | } |
| 195 | 203 | |
| 196 | - Size windowSize(int *dx, int *dy) const | |
| 204 | + Size windowSize(int *dx = NULL, int *dy = NULL) const | |
| 197 | 205 | { |
| 198 | 206 | return stages.first()->windowSize(dx, dy); |
| 199 | 207 | } | ... | ... |