From d0937dd7dfc90d6d8d2fd8b1a745056f66f384da Mon Sep 17 00:00:00 2001 From: Scott Klum Date: Tue, 21 Jan 2014 17:16:29 -0500 Subject: [PATCH] Switched back to read all after discovering bug --- app/br/br.cpp | 1 + openbr/core/core.cpp | 72 ++++++++++++++++++++---------------------------------------------------- openbr/openbr_plugin.h | 8 +++++++- openbr/plugins/gallery.cpp | 1 - 4 files changed, 28 insertions(+), 54 deletions(-) diff --git a/app/br/br.cpp b/app/br/br.cpp index 6a80956..5f8060c 100644 --- a/app/br/br.cpp +++ b/app/br/br.cpp @@ -159,6 +159,7 @@ public: check(parc >= 2, "Incorrect parameter count for 'plotMetadata'."); br_plot_metadata(parc-1, parv, parv[parc-1], true); } else if (!strcmp(fun, "deduplicate")) { + check(parc == 3, "Incorrect parameter count for 'deduplicate'."); br_deduplicate(parv[0], parv[1], parv[2]); } diff --git a/openbr/core/core.cpp b/openbr/core/core.cpp index 4f08d30..8d9743a 100644 --- a/openbr/core/core.cpp +++ b/openbr/core/core.cpp @@ -251,13 +251,9 @@ struct AlgorithmCore Globals->blockSize = old_block_size; } - void deduplicate(const QString &inputGallery, const QString &outputGallery, const float threshold) + void deduplicate(const File &inputGallery, const File &outputGallery, const float threshold) { - /*qDebug("Deduplicating %s to %s%s", qPrintable(inputGallery.flat()), - qPrintable(outputGallery.flat()), - output.isNull() ? "" : qPrintable(" to " + output.flat()));*/ - - //Globals->blockSize = INT_MAX; + qDebug("Deduplicating %s to %s with a score threshold of %f", qPrintable(inputGallery.flat()), qPrintable(outputGallery.flat()), threshold); if (distance.isNull()) qFatal("Null distance."); @@ -265,67 +261,37 @@ struct AlgorithmCore FileList inputFiles; retrieveOrEnroll(inputGallery, i, inputFiles); - //TemplateList t = i->read(); + TemplateList t = i->read(); QList duplicates; - /* + Globals->totalSteps = inputFiles.size(); + Globals->currentStep = 0; + for (int i=0; icompare(t[i], t[j]); if (score >= threshold) { + qDebug() << t[i].file.baseName() << t[j].file.baseName() << score << i; duplicates.append(i); - break; - } - } - }*/ - - int queryBlock = -1; - bool queryDone = false; - while (!queryDone) { - queryBlock++; - TemplateList queries = i->readBlock(&queryDone); - - QList queryPartitions; - if (!partitionSizes.empty()) queryPartitions = queries.partition(partitionSizes); - else queryPartitions.append(queries); - - for (int i=0; ireadBlock(&targetDone); - - QList targetPartitions; - if (!partitionSizes.empty()) targetPartitions = targets.partition(partitionSizes); - else targetPartitions.append(targets); - - outputs[i]->setBlock(queryBlock, targetBlock); - - distance->compare(targetPartitions[i], queryPartitions[i], outputs[i]); - - Globals->currentStep += double(targets.size()) * double(queries.size()); - Globals->printStatus(); } } } - qDebug("\n%d duplicates removed.", duplicates.size()); + std::sort(duplicates.begin(),duplicates.end(),std::greater()); - std::sort(duplicates.begin(), duplicates.end(),std::greater()); + qDebug("\n%d duplicates removed.", duplicates.size()); - foreach(int index, duplicates) - qDebug() << t.at(index).file.baseName(); + qDebug() << duplicates; - for (int i=duplicates.size()-1; i>=0; i--) - t.removeAt(duplicates[i]); + for (int i=0; i o(Gallery::make(outputGallery)); - o->writeBlock(t); + o->writeBlock(inputFiles); } void compare(File targetGallery, File queryGallery, File output) @@ -573,10 +539,12 @@ void br::Cat(const QStringList &inputGalleries, const QString &outputGallery) } } -void br::Deduplicate(const QString &inputGallery, const QString &outputGallery, const QString &threshold) +void br::Deduplicate(const File &inputGallery, const File &outputGallery, const QString &threshold) { - File output; - AlgorithmManager::getAlgorithm(output.get("algorithm"))->deduplicate(inputGallery, outputGallery, threshold.toFloat()); + bool ok; + float thresh = threshold.toFloat(&ok); + if (ok) AlgorithmManager::getAlgorithm(inputGallery.get("algorithm"))->deduplicate(inputGallery, outputGallery, thresh); + else qFatal("Unable to convert deduplication threshold to float."); } QSharedPointer br::Transform::fromAlgorithm(const QString &algorithm, bool preprocess) diff --git a/openbr/openbr_plugin.h b/openbr/openbr_plugin.h index f895bed..1cf8a12 100644 --- a/openbr/openbr_plugin.h +++ b/openbr/openbr_plugin.h @@ -1371,7 +1371,13 @@ BR_EXPORT void Convert(const File &fileType, const File &inputFile, const File & */ BR_EXPORT void Cat(const QStringList &inputGalleries, const QString &outputGallery); -BR_EXPORT void Deduplicate(const QString &inputGallery, const QString &outputGallery, const QString &threshold); +/*! + * \brief Deduplicate a gallery. + * \param inputGalleries Gallery to deduplicate. + * \param outputGallery Gallery to store the deduplicated result. + * \param threshold Match score threshold to determine duplicates. + */ +BR_EXPORT void Deduplicate(const File &inputGallery, const File &outputGallery, const QString &threshold); /*! @}*/ diff --git a/openbr/plugins/gallery.cpp b/openbr/plugins/gallery.cpp index 0dc28b2..bb1b4f2 100644 --- a/openbr/plugins/gallery.cpp +++ b/openbr/plugins/gallery.cpp @@ -120,7 +120,6 @@ class galGallery : public Gallery TemplateList templates; while ((templates.size() < Globals->blockSize) && !stream.atEnd()) { Template m; - qDebug() << templates.size(); stream >> m; templates.append(m); } -- libgit2 0.21.4