Commit c8f25d4951ac5d21f89babe99a281d1a52e50922
1 parent
8c55324c
Expose certain PP5 context properties in PP5EnrollTransform
Showing
1 changed file
with
53 additions
and
12 deletions
openbr/plugins/pp5.cpp
| ... | ... | @@ -67,24 +67,24 @@ struct PP5Context |
| 67 | 67 | { |
| 68 | 68 | ppr_context_type context; |
| 69 | 69 | |
| 70 | - PP5Context() | |
| 70 | + PP5Context(bool detectOnly = false, float adaptiveMinSize = 0.01f, int minSize = 4, ppr_landmark_range_type landmarkRange = PPR_LANDMARK_RANGE_COMPREHENSIVE) | |
| 71 | 71 | { |
| 72 | 72 | ppr_settings_type default_settings = ppr_get_default_settings(); |
| 73 | 73 | |
| 74 | 74 | default_settings.detection.adaptive_max_size = 1.f; |
| 75 | - default_settings.detection.adaptive_min_size = 0.01f; | |
| 75 | + default_settings.detection.adaptive_min_size = adaptiveMinSize; | |
| 76 | 76 | default_settings.detection.detect_best_face_only = !Globals->enrollAll; |
| 77 | 77 | default_settings.detection.enable = 1; |
| 78 | - default_settings.detection.min_size = 4; | |
| 78 | + default_settings.detection.min_size = minSize; | |
| 79 | 79 | default_settings.detection.use_serial_face_detection = 1; |
| 80 | 80 | |
| 81 | 81 | default_settings.landmarks.enable = 1; |
| 82 | - default_settings.landmarks.landmark_range = PPR_LANDMARK_RANGE_COMPREHENSIVE; | |
| 82 | + default_settings.landmarks.landmark_range = landmarkRange; | |
| 83 | 83 | default_settings.landmarks.manually_detect_landmarks = 0; |
| 84 | 84 | |
| 85 | - default_settings.recognition.automatically_extract_templates = 1; | |
| 86 | - default_settings.recognition.enable_comparison = 1; | |
| 87 | - default_settings.recognition.enable_extraction = 1; | |
| 85 | + default_settings.recognition.automatically_extract_templates = !detectOnly; | |
| 86 | + default_settings.recognition.enable_comparison = !detectOnly; | |
| 87 | + default_settings.recognition.enable_extraction = !detectOnly; | |
| 88 | 88 | default_settings.recognition.num_comparison_threads = 1; |
| 89 | 89 | default_settings.recognition.recognizer = PPR_RECOGNIZER_MULTI_POSE; |
| 90 | 90 | TRY(ppr_initialize_context(default_settings, &context)) |
| ... | ... | @@ -256,11 +256,49 @@ class PP5EnrollTransform : public UntrainableMetaTransform |
| 256 | 256 | { |
| 257 | 257 | Q_OBJECT |
| 258 | 258 | Q_PROPERTY(bool detectOnly READ get_detectOnly WRITE set_detectOnly RESET reset_detectOnly STORED false) |
| 259 | - BR_PROPERTY(bool, detectOnly, false) | |
| 260 | 259 | Q_PROPERTY(bool requireLandmarks READ get_requireLandmarks WRITE set_requireLandmarks RESET reset_requireLandmarks STORED false) |
| 260 | + Q_PROPERTY(float adaptiveMinSize READ get_adaptiveMinSize WRITE set_adaptiveMinSize RESET reset_adaptiveMinSize STORED false) | |
| 261 | + Q_PROPERTY(float minSize READ get_minSize WRITE set_minSize RESET reset_minSize STORED false) | |
| 262 | + Q_PROPERTY(LandmarkRange landmarkRange READ get_landmarkRange WRITE set_landmarkRange RESET reset_landmarkRange STORED false) | |
| 263 | + | |
| 264 | + enum LandmarkRange | |
| 265 | + { | |
| 266 | + Frontal = PPR_LANDMARK_RANGE_FRONTAL, | |
| 267 | + Extended = PPR_LANDMARK_RANGE_EXTENDED, | |
| 268 | + Full = PPR_LANDMARK_RANGE_FULL, | |
| 269 | + Comprehensive = PPR_LANDMARK_RANGE_COMPREHENSIVE | |
| 270 | + }; | |
| 271 | + | |
| 272 | + BR_PROPERTY(bool, detectOnly, false) | |
| 261 | 273 | BR_PROPERTY(bool, requireLandmarks, false) |
| 274 | + BR_PROPERTY(float, adaptiveMinSize, 0.01f) | |
| 275 | + BR_PROPERTY(float, minSize, 4) | |
| 276 | + BR_PROPERTY(LandmarkRange, landmarkRange, Comprehensive) | |
| 277 | + | |
| 262 | 278 | Resource<PP5Context> contexts; |
| 263 | 279 | |
| 280 | + struct PP5ContextMaker : public ResourceMaker<PP5Context> | |
| 281 | + { | |
| 282 | + PP5ContextMaker(PP5EnrollTransform *pp5EnrollTransform) | |
| 283 | + : pp5EnrollTransform(pp5EnrollTransform) {} | |
| 284 | + | |
| 285 | + private: | |
| 286 | + PP5EnrollTransform *pp5EnrollTransform; | |
| 287 | + | |
| 288 | + PP5Context *make() const | |
| 289 | + { | |
| 290 | + return new PP5Context(pp5EnrollTransform->detectOnly, | |
| 291 | + pp5EnrollTransform->adaptiveMinSize, | |
| 292 | + pp5EnrollTransform->minSize, | |
| 293 | + (ppr_landmark_range_type) pp5EnrollTransform->landmarkRange); | |
| 294 | + } | |
| 295 | + }; | |
| 296 | + | |
| 297 | + void init() | |
| 298 | + { | |
| 299 | + contexts.setResourceMaker(new PP5ContextMaker(this)); | |
| 300 | + } | |
| 301 | + | |
| 264 | 302 | void project(const Template &src, Template &dst) const |
| 265 | 303 | { |
| 266 | 304 | if (Globals->enrollAll) |
| ... | ... | @@ -293,10 +331,13 @@ class PP5EnrollTransform : public UntrainableMetaTransform |
| 293 | 331 | |
| 294 | 332 | for (int i=0; i<face_list.length; i++) { |
| 295 | 333 | ppr_face_type face = face_list.faces[i]; |
| 296 | - int extractable; | |
| 297 | - TRY(ppr_is_template_extractable(context->context, face, &extractable)) | |
| 298 | - if (!extractable && !detectOnly) continue; | |
| 299 | - else foundFace = true; | |
| 334 | + if (!detectOnly) { | |
| 335 | + int extractable; | |
| 336 | + TRY(ppr_is_template_extractable(context->context, face, &extractable)) | |
| 337 | + if (!extractable) | |
| 338 | + continue; | |
| 339 | + } | |
| 340 | + foundFace = true; | |
| 300 | 341 | |
| 301 | 342 | cv::Mat m; |
| 302 | 343 | if (detectOnly) { | ... | ... |