diff --git a/openbr/janus.cpp b/openbr/janus.cpp index cb6dd7c..71ddb04 100644 --- a/openbr/janus.cpp +++ b/openbr/janus.cpp @@ -1,6 +1,8 @@ #include "janus.h" #include "janus_io.h" #include "openbr_plugin.h" +#include "openbr/core/opencvutils.h" +#include "openbr/core/common.h" using namespace br; @@ -17,7 +19,7 @@ janus_error janus_initialize(const char *sdk_path, const char *model_file) int argc = 1; const char *argv[1] = { "janus" }; Context::initialize(argc, (char**)argv, sdk_path, false); - Globals->quiet = true; + Globals->quiet = false; const QString algorithm = model_file; if (algorithm.isEmpty()) { transform.reset(Transform::make("Cvt(Gray)+Affine(88,88,0.25,0.35)+++", NULL)); @@ -154,6 +156,34 @@ janus_error janus_gallery_size(janus_gallery gallery, size_t *size) return JANUS_SUCCESS; } +janus_error janus_search(const janus_template template_, janus_gallery gallery, int requested_returns, janus_template_id *template_ids, float *similarities, int *actual_returns) +{ + TemplateList query; + query.append(*template_); + + const TemplateList targets = TemplateList::fromGallery(gallery); + + if (targets.size() < requested_returns) *actual_returns = targets.size(); + else *actual_returns = requested_returns; + + QScopedPointer matrix(MatrixOutput::make(targets.files(), query.files())); + distance->compare(targets, query, matrix.data()); + + typedef QPair Pair; + QList sortedSimilarities = Common::Sort(OpenCVUtils::matrixToVector(matrix.data()->data.row(0)), true, *actual_returns); + + FileList targetFiles; + for (int i=0; idata.at(0,i) = sortedSimilarities[i].first; + targetFiles.append(targets[sortedSimilarities[i].second]); + } + const QVector targetIds = File::get(targetFiles, "TEMPLATE_ID").toVector(); + + memcpy(similarities, matrix->data.data, *actual_returns * sizeof(float)); + memcpy(template_ids, targetIds.data(), *actual_returns * sizeof(janus_template_id)); + return JANUS_SUCCESS; +} + janus_error janus_compare(janus_gallery target, janus_gallery query, float *similarity_matrix, janus_template_id *target_ids, janus_template_id *query_ids) { const TemplateList targets = TemplateList::fromGallery(target);