Commit c8f25d4951ac5d21f89babe99a281d1a52e50922

Authored by Josh Klontz
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) {
... ...