Commit b8d00dab944ab5a61dcd10e1930221350722ae0c
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); | ... | ... |