Commit 26733720ecf1393ae438ddfc4ffa6a29ab216dae
1 parent
35001d4c
Some changes to slidingwindow functionality
Showing
1 changed file
with
19 additions
and
11 deletions
openbr/plugins/imgproc/slidingwindow.cpp
| ... | ... | @@ -35,7 +35,7 @@ namespace br |
| 35 | 35 | * \br_property int minSize The smallest sized object to detect in pixels |
| 36 | 36 | * \br_property int maxSize The largest sized object to detect in pixels. A negative value will set maxSize == image size |
| 37 | 37 | * \br_property float scaleFactor The factor to scale the image by during each resize. |
| 38 | - * \br_property float confidenceThreshold A threshold for positive detections. Positive detections returned by the classifier that have confidences below this threshold are considered negative detections. | |
| 38 | + * \br_property float minGroupingConfidence A threshold for positive detections. Positive detections returned by the classifier that have confidences below this threshold are considered negative detections. | |
| 39 | 39 | * \br_property float eps Parameter for non-maximum supression |
| 40 | 40 | * \br_property int minNeighbors Parameter for non-maximum supression |
| 41 | 41 | * \br_property bool group If false, non-maxima supression will not be performed |
| ... | ... | @@ -51,23 +51,28 @@ class SlidingWindowTransform : public MetaTransform |
| 51 | 51 | Q_PROPERTY(int minSize READ get_minSize WRITE set_minSize RESET reset_minSize STORED false) |
| 52 | 52 | Q_PROPERTY(int maxSize READ get_maxSize WRITE set_maxSize RESET reset_maxSize STORED false) |
| 53 | 53 | Q_PROPERTY(float scaleFactor READ get_scaleFactor WRITE set_scaleFactor RESET reset_scaleFactor STORED false) |
| 54 | - Q_PROPERTY(float confidenceThreshold READ get_confidenceThreshold WRITE set_confidenceThreshold RESET reset_confidenceThreshold STORED false) | |
| 54 | + Q_PROPERTY(float minGroupingConfidence READ get_minGroupingConfidence WRITE set_minGroupingConfidence RESET reset_minGroupingConfidence STORED false) | |
| 55 | 55 | Q_PROPERTY(float eps READ get_eps WRITE set_eps RESET reset_eps STORED false) |
| 56 | 56 | Q_PROPERTY(float minNeighbors READ get_minNeighbors WRITE set_minNeighbors RESET reset_minNeighbors STORED false) |
| 57 | 57 | Q_PROPERTY(bool group READ get_group WRITE set_group RESET reset_group STORED false) |
| 58 | 58 | Q_PROPERTY(int shrinkingFactor READ get_shrinkingFactor WRITE set_shrinkingFactor RESET reset_shrinkingFactor STORED false) |
| 59 | 59 | Q_PROPERTY(bool clone READ get_clone WRITE set_clone RESET reset_clone STORED false) |
| 60 | - | |
| 60 | + Q_PROPERTY(float minConfidence READ get_minConfidence WRITE set_minConfidence RESET reset_minConfidence STORED false) | |
| 61 | + Q_PROPERTY(bool ROCMode READ get_ROCMode WRITE set_ROCMode RESET reset_ROCMode STORED false) | |
| 62 | + Q_PROPERTY(QString outputVariable READ get_outputVariable WRITE set_outputVariable RESET reset_outputVariable STORED false) | |
| 61 | 63 | BR_PROPERTY(br::Classifier*, classifier, NULL) |
| 62 | 64 | BR_PROPERTY(int, minSize, 20) |
| 63 | 65 | BR_PROPERTY(int, maxSize, -1) |
| 64 | 66 | BR_PROPERTY(float, scaleFactor, 1.2) |
| 65 | - BR_PROPERTY(float, confidenceThreshold, 10) | |
| 67 | + BR_PROPERTY(float, minGroupingConfidence, -std::numeric_limits<float>::max()) | |
| 66 | 68 | BR_PROPERTY(float, eps, 0.2) |
| 67 | 69 | BR_PROPERTY(int, minNeighbors, 3) |
| 68 | 70 | BR_PROPERTY(bool, group, true) |
| 69 | 71 | BR_PROPERTY(int, shrinkingFactor, 1) |
| 70 | 72 | BR_PROPERTY(bool, clone, true) |
| 73 | + BR_PROPERTY(float, minConfidence, 0) | |
| 74 | + BR_PROPERTY(bool, ROCMode, false) | |
| 75 | + BR_PROPERTY(QString, outputVariable, "FrontalFace") | |
| 71 | 76 | |
| 72 | 77 | void train(const TemplateList &data) |
| 73 | 78 | { |
| ... | ... | @@ -163,20 +168,23 @@ class SlidingWindowTransform : public MetaTransform |
| 163 | 168 | } |
| 164 | 169 | |
| 165 | 170 | if (group) |
| 166 | - OpenCVUtils::group(rects, confidences, confidenceThreshold, minNeighbors, eps); | |
| 171 | + OpenCVUtils::group(rects, confidences, minGroupingConfidence, minNeighbors, eps); | |
| 167 | 172 | |
| 168 | 173 | if (!enrollAll && rects.empty()) { |
| 169 | 174 | rects.append(Rect(0, 0, imageSize.width, imageSize.height)); |
| 170 | 175 | confidences.append(-std::numeric_limits<float>::max()); |
| 171 | 176 | } |
| 172 | 177 | |
| 178 | + const float minConfidence = t.file.get<float>("MinConfidence", this->minConfidence); | |
| 173 | 179 | for (int j=0; j<rects.size(); j++) { |
| 174 | - Template u = t; | |
| 175 | - u.file.set("Confidence", confidences[j]); | |
| 176 | - const QRectF rect = OpenCVUtils::fromRect(rects[j]); | |
| 177 | - u.file.appendRect(rect); | |
| 178 | - u.file.set("Face", rect); | |
| 179 | - dst.append(u); | |
| 180 | + if (ROCMode || confidences[j] >= minConfidence) { | |
| 181 | + Template u = t; | |
| 182 | + u.file.set("Confidence", confidences[j]); | |
| 183 | + const QRectF rect = OpenCVUtils::fromRect(rects[j]); | |
| 184 | + u.file.appendRect(rect); | |
| 185 | + u.file.set(outputVariable, rect); | |
| 186 | + dst.append(u); | |
| 187 | + } | |
| 180 | 188 | } |
| 181 | 189 | } |
| 182 | 190 | } | ... | ... |