Commit b8d00dab944ab5a61dcd10e1930221350722ae0c

Authored by Scott Klum
1 parent df055a7f

Added janus_search

Showing 1 changed file with 31 additions and 1 deletions
openbr/janus.cpp
1 1 #include "janus.h"
2 2 #include "janus_io.h"
3 3 #include "openbr_plugin.h"
  4 +#include "openbr/core/opencvutils.h"
  5 +#include "openbr/core/common.h"
4 6  
5 7 using namespace br;
6 8  
... ... @@ -17,7 +19,7 @@ janus_error janus_initialize(const char *sdk_path, const char *model_file)
17 19 int argc = 1;
18 20 const char *argv[1] = { "janus" };
19 21 Context::initialize(argc, (char**)argv, sdk_path, false);
20   - Globals->quiet = true;
  22 + Globals->quiet = false;
21 23 const QString algorithm = model_file;
22 24 if (algorithm.isEmpty()) {
23 25 transform.reset(Transform::make("Cvt(Gray)+Affine(88,88,0.25,0.35)+<FaceRecognitionExtraction>+<FaceRecognitionEmbedding>+<FaceRecognitionQuantization>", NULL));
... ... @@ -154,6 +156,34 @@ janus_error janus_gallery_size(janus_gallery gallery, size_t *size)
154 156 return JANUS_SUCCESS;
155 157 }
156 158  
  159 +janus_error janus_search(const janus_template template_, janus_gallery gallery, int requested_returns, janus_template_id *template_ids, float *similarities, int *actual_returns)
  160 +{
  161 + TemplateList query;
  162 + query.append(*template_);
  163 +
  164 + const TemplateList targets = TemplateList::fromGallery(gallery);
  165 +
  166 + if (targets.size() < requested_returns) *actual_returns = targets.size();
  167 + else *actual_returns = requested_returns;
  168 +
  169 + QScopedPointer<MatrixOutput> matrix(MatrixOutput::make(targets.files(), query.files()));
  170 + distance->compare(targets, query, matrix.data());
  171 +
  172 + typedef QPair<float,int> Pair;
  173 + QList<Pair> sortedSimilarities = Common::Sort(OpenCVUtils::matrixToVector<float>(matrix.data()->data.row(0)), true, *actual_returns);
  174 +
  175 + FileList targetFiles;
  176 + for (int i=0; i<sortedSimilarities.size(); i++) {
  177 + matrix.data()->data.at<float>(0,i) = sortedSimilarities[i].first;
  178 + targetFiles.append(targets[sortedSimilarities[i].second]);
  179 + }
  180 + const QVector<janus_template_id> targetIds = File::get<janus_template_id,File>(targetFiles, "TEMPLATE_ID").toVector();
  181 +
  182 + memcpy(similarities, matrix->data.data, *actual_returns * sizeof(float));
  183 + memcpy(template_ids, targetIds.data(), *actual_returns * sizeof(janus_template_id));
  184 + return JANUS_SUCCESS;
  185 +}
  186 +
157 187 janus_error janus_compare(janus_gallery target, janus_gallery query, float *similarity_matrix, janus_template_id *target_ids, janus_template_id *query_ids)
158 188 {
159 189 const TemplateList targets = TemplateList::fromGallery(target);
... ...