diff --git a/openbr/gui/faceviewer.h b/openbr/gui/faceviewer.h index c611b76..591590f 100644 --- a/openbr/gui/faceviewer.h +++ b/openbr/gui/faceviewer.h @@ -19,7 +19,7 @@ public: explicit FaceViewer(QWidget *parent = 0); public slots: - void setFile(const File &file_); + void setFile(const br::File &file_); protected slots: void mouseMoveEvent(QMouseEvent *event); diff --git a/openbr/gui/templateviewer.h b/openbr/gui/templateviewer.h index 265c160..5a2b17d 100644 --- a/openbr/gui/templateviewer.h +++ b/openbr/gui/templateviewer.h @@ -24,7 +24,7 @@ public: explicit TemplateViewer(QWidget *parent = 0); public slots: - void setFile(const File &file); + void setFile(const br::File &file); void setEditable(bool enabled); void setMousePoint(const QPointF &mousePoint); void setFormat(const QString &format); @@ -52,10 +52,10 @@ protected slots: void paintEvent(QPaintEvent *event); signals: - void newInput(File); + void newInput(br::File); void newInput(QImage); void newMousePoint(QPointF); - void selectedInput(File); + void selectedInput(br::File); }; } diff --git a/openbr/gui/templateviewergrid.cpp b/openbr/gui/templateviewergrid.cpp index e70c811..d166995 100644 --- a/openbr/gui/templateviewergrid.cpp +++ b/openbr/gui/templateviewergrid.cpp @@ -18,10 +18,10 @@ void TemplateViewerGrid::setFiles(const FileList &files) const int size = std::max(1, (int)ceil(sqrt((float)files.size()))); while (templateViewers.size() < size*size) { templateViewers.append(QSharedPointer(new TemplateViewer())); - connect(templateViewers.last().data(), SIGNAL(newInput(File)), this, SIGNAL(newInput(File))); + connect(templateViewers.last().data(), SIGNAL(newInput(br::File)), this, SIGNAL(newInput(br::File))); connect(templateViewers.last().data(), SIGNAL(newInput(QImage)), this, SIGNAL(newInput(QImage))); connect(templateViewers.last().data(), SIGNAL(newMousePoint(QPointF)), this, SIGNAL(newMousePoint(QPointF))); - connect(templateViewers.last().data(), SIGNAL(selectedInput(File)), this, SIGNAL(selectedInput(File))); + connect(templateViewers.last().data(), SIGNAL(selectedInput(br::File)), this, SIGNAL(selectedInput(br::File))); } { // Clear layout diff --git a/openbr/gui/templateviewergrid.h b/openbr/gui/templateviewergrid.h index 02c94ed..5d5409e 100644 --- a/openbr/gui/templateviewergrid.h +++ b/openbr/gui/templateviewergrid.h @@ -24,15 +24,15 @@ public: explicit TemplateViewerGrid(QWidget *parent = 0); public slots: - void setFiles(const FileList &file); + void setFiles(const br::FileList &file); void setFormat(const QString &format); void setMousePoint(const QPointF &mousePoint); signals: - void newInput(File); + void newInput(br::File); void newInput(QImage); void newMousePoint(QPointF); - void selectedInput(File); + void selectedInput(br::File); }; } // namespace br diff --git a/openbr/janus.cpp b/openbr/janus.cpp index cb6dd7c..d63f8b0 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; @@ -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);