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,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) {