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,24 +67,24 @@ struct PP5Context | ||
| 67 | { | 67 | { |
| 68 | ppr_context_type context; | 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 | ppr_settings_type default_settings = ppr_get_default_settings(); | 72 | ppr_settings_type default_settings = ppr_get_default_settings(); |
| 73 | 73 | ||
| 74 | default_settings.detection.adaptive_max_size = 1.f; | 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 | default_settings.detection.detect_best_face_only = !Globals->enrollAll; | 76 | default_settings.detection.detect_best_face_only = !Globals->enrollAll; |
| 77 | default_settings.detection.enable = 1; | 77 | default_settings.detection.enable = 1; |
| 78 | - default_settings.detection.min_size = 4; | 78 | + default_settings.detection.min_size = minSize; |
| 79 | default_settings.detection.use_serial_face_detection = 1; | 79 | default_settings.detection.use_serial_face_detection = 1; |
| 80 | 80 | ||
| 81 | default_settings.landmarks.enable = 1; | 81 | default_settings.landmarks.enable = 1; |
| 82 | - default_settings.landmarks.landmark_range = PPR_LANDMARK_RANGE_COMPREHENSIVE; | 82 | + default_settings.landmarks.landmark_range = landmarkRange; |
| 83 | default_settings.landmarks.manually_detect_landmarks = 0; | 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 | default_settings.recognition.num_comparison_threads = 1; | 88 | default_settings.recognition.num_comparison_threads = 1; |
| 89 | default_settings.recognition.recognizer = PPR_RECOGNIZER_MULTI_POSE; | 89 | default_settings.recognition.recognizer = PPR_RECOGNIZER_MULTI_POSE; |
| 90 | TRY(ppr_initialize_context(default_settings, &context)) | 90 | TRY(ppr_initialize_context(default_settings, &context)) |
| @@ -256,11 +256,49 @@ class PP5EnrollTransform : public UntrainableMetaTransform | @@ -256,11 +256,49 @@ class PP5EnrollTransform : public UntrainableMetaTransform | ||
| 256 | { | 256 | { |
| 257 | Q_OBJECT | 257 | Q_OBJECT |
| 258 | Q_PROPERTY(bool detectOnly READ get_detectOnly WRITE set_detectOnly RESET reset_detectOnly STORED false) | 258 | Q_PROPERTY(bool detectOnly READ get_detectOnly WRITE set_detectOnly RESET reset_detectOnly STORED false) |
| 259 | - BR_PROPERTY(bool, detectOnly, false) | ||
| 260 | Q_PROPERTY(bool requireLandmarks READ get_requireLandmarks WRITE set_requireLandmarks RESET reset_requireLandmarks STORED false) | 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 | BR_PROPERTY(bool, requireLandmarks, false) | 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 | Resource<PP5Context> contexts; | 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 | void project(const Template &src, Template &dst) const | 302 | void project(const Template &src, Template &dst) const |
| 265 | { | 303 | { |
| 266 | if (Globals->enrollAll) | 304 | if (Globals->enrollAll) |
| @@ -293,10 +331,13 @@ class PP5EnrollTransform : public UntrainableMetaTransform | @@ -293,10 +331,13 @@ class PP5EnrollTransform : public UntrainableMetaTransform | ||
| 293 | 331 | ||
| 294 | for (int i=0; i<face_list.length; i++) { | 332 | for (int i=0; i<face_list.length; i++) { |
| 295 | ppr_face_type face = face_list.faces[i]; | 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 | cv::Mat m; | 342 | cv::Mat m; |
| 302 | if (detectOnly) { | 343 | if (detectOnly) { |