Commit 8c55324cbe93dbbf8768a9ac040b9a105269ffbd

Authored by Ben Klein
2 parents 846a0fa8 2a8efda2

Merge pull request #278 from biometrics/janusAugment

Attempt to enroll all images with a face bounding box
Showing 2 changed files with 31 additions and 13 deletions
1   -Subproject commit 65df7498c5262343c07edc5c6f931178f121ca0b
  1 +Subproject commit 5b73e1e1884b136b0e98df687bee0e0e2203386e
... ...
openbr/janus.cpp
... ... @@ -51,23 +51,41 @@ janus_error janus_allocate_template(janus_template *template_)
51 51 janus_error janus_augment(const janus_image image, const janus_attribute_list attributes, janus_template template_)
52 52 {
53 53 Template t;
54   - t.append(cv::Mat(image.height,
55   - image.width,
56   - image.color_space == JANUS_GRAY8 ? CV_8UC1 : CV_8UC3,
57   - image.data));
58 54 for (size_t i=0; i<attributes.size; i++)
59 55 t.file.set(janus_attribute_to_string(attributes.attributes[i]), attributes.values[i]);
60 56  
61   - if (!t.file.contains("RIGHT_EYE_X") ||
62   - !t.file.contains("RIGHT_EYE_Y") ||
63   - !t.file.contains("LEFT_EYE_X") ||
64   - !t.file.contains("LEFT_EYE_Y"))
  57 + if (!t.file.contains("FACE_X") ||
  58 + !t.file.contains("FACE_Y") ||
  59 + !t.file.contains("FACE_WIDTH") ||
  60 + !t.file.contains("FACE_HEIGHT"))
65 61 return JANUS_MISSING_ATTRIBUTES;
66 62  
67   - t.file.set("Affine_0", QPointF(t.file.get<float>("RIGHT_EYE_X"), t.file.get<float>("RIGHT_EYE_Y")));
68   - t.file.set("Affine_1", QPointF(t.file.get<float>("LEFT_EYE_X"), t.file.get<float>("LEFT_EYE_Y")));
69   - t.file.appendPoint(t.file.get<QPointF>("Affine_1"));
70   - t.file.appendPoint(t.file.get<QPointF>("Affine_0"));
  63 + QRectF rect(t.file.get<float>("FACE_X"),
  64 + t.file.get<float>("FACE_Y"),
  65 + t.file.get<float>("FACE_WIDTH"),
  66 + t.file.get<float>("FACE_HEIGHT"));
  67 +
  68 + if (rect.x() < 0) rect.setX(0);
  69 + if (rect.y() < 0) rect.setY(0);
  70 + if (rect.x() + rect.width() > image.width) rect.setWidth(image.width - rect.x());
  71 + if (rect.y() + rect.height() > image.height) rect.setHeight(image.height - rect.y());
  72 +
  73 + cv::Mat input(image.height,
  74 + image.width,
  75 + image.color_space == JANUS_GRAY8 ? CV_8UC1 : CV_8UC3,
  76 + image.data);
  77 +
  78 + input = input(cv::Rect(rect.x(), rect.y(), rect.width(), rect.height())).clone();
  79 + t.append(input);
  80 + if (t.file.contains("RIGHT_EYE_X") &&
  81 + t.file.contains("RIGHT_EYE_Y") &&
  82 + t.file.contains("LEFT_EYE_X") &&
  83 + t.file.contains("LEFT_EYE_Y")) {
  84 + t.file.set("Affine_0", QPointF(t.file.get<float>("RIGHT_EYE_X") - rect.x(), t.file.get<float>("RIGHT_EYE_Y") - rect.y()));
  85 + t.file.set("Affine_1", QPointF(t.file.get<float>("LEFT_EYE_X") - rect.x(), t.file.get<float>("LEFT_EYE_Y") - rect.y()));
  86 + t.file.appendPoint(t.file.get<QPointF>("Affine_0"));
  87 + t.file.appendPoint(t.file.get<QPointF>("Affine_1"));
  88 + }
71 89 Template u;
72 90 transform->project(t, u);
73 91 template_->append(u);
... ...