diff --git a/openbr/gui/classifier.cpp b/openbr/gui/classifier.cpp
index 6e72c59..3f60ac0 100644
--- a/openbr/gui/classifier.cpp
+++ b/openbr/gui/classifier.cpp
@@ -7,7 +7,7 @@ using namespace br;
/**** CLASSIFIER ****/
/*** PUBLIC ***/
-Classifier::Classifier(QWidget *parent)
+GUIClassifier::GUIClassifier(QWidget *parent)
: QLabel(parent)
{
setAlignment(Qt::AlignCenter);
@@ -15,26 +15,26 @@ Classifier::Classifier(QWidget *parent)
connect(this, SIGNAL(newClassification(QString,QString)), this, SLOT(setClassification(QString,QString)));
}
-void Classifier::setAlgorithm(const QString &algorithm)
+void GUIClassifier::setAlgorithm(const QString &algorithm)
{
this->algorithm = algorithm;
}
/*** PUBLIC SLOTS ***/
-void Classifier::classify(const File &file)
+void GUIClassifier::classify(const File &file)
{
- QtConcurrent::run(this, &Classifier::_classify, file);
+ QtConcurrent::run(this, &GUIClassifier::_classify, file);
}
/*** PRIVATE SLOTS ***/
-void Classifier::setClassification(const QString &key, const QString &value)
+void GUIClassifier::setClassification(const QString &key, const QString &value)
{
if (key.isEmpty()) clear();
else setText(QString("%1: %2").arg(key, value));
}
/*** PRIVATE ***/
-void Classifier::_classify(File file)
+void GUIClassifier::_classify(File file)
{
QString key, value;
QSharedPointer transform = Transform::fromAlgorithm(algorithm);
diff --git a/openbr/gui/classifier.h b/openbr/gui/classifier.h
index 02a8c3d..eff1463 100644
--- a/openbr/gui/classifier.h
+++ b/openbr/gui/classifier.h
@@ -1,5 +1,5 @@
-#ifndef BR_CLASSIFIER_H
-#define BR_CLASSIFIER_H
+#ifndef BR_GUICLASSIFIER_H
+#define BR_GUICLASSIFIER_H
#include
#include
@@ -9,13 +9,13 @@
namespace br
{
-class BR_EXPORT Classifier : public QLabel
+class BR_EXPORT GUIClassifier : public QLabel
{
Q_OBJECT
QString algorithm;
public:
- explicit Classifier(QWidget *parent = 0);
+ explicit GUIClassifier(QWidget *parent = 0);
void setAlgorithm(const QString &algorithm);
public slots:
@@ -33,4 +33,4 @@ signals:
} // namespace br
-#endif // BR_CLASSIFIER_H
+#endif // BR_GUICLASSIFIER_H
diff --git a/openbr/gui/templatemetadata.cpp b/openbr/gui/templatemetadata.cpp
index 06d39cf..e15c758 100644
--- a/openbr/gui/templatemetadata.cpp
+++ b/openbr/gui/templatemetadata.cpp
@@ -21,7 +21,7 @@ TemplateMetadata::TemplateMetadata(QWidget *parent)
void TemplateMetadata::addClassifier(const QString &classifier_, const QString algorithm)
{
- QSharedPointer classifier(new Classifier());
+ QSharedPointer classifier(new GUIClassifier());
classifier->setAlgorithm(classifier_);
layout->addWidget(classifier.data());
conditionalClassifiers.append(ConditionalClassifier(algorithm, classifier));
diff --git a/openbr/gui/templatemetadata.h b/openbr/gui/templatemetadata.h
index ab6c205..a009861 100644
--- a/openbr/gui/templatemetadata.h
+++ b/openbr/gui/templatemetadata.h
@@ -24,10 +24,10 @@ class BR_EXPORT TemplateMetadata : public QWidget
struct ConditionalClassifier
{
QString algorithm;
- QSharedPointer classifier;
+ QSharedPointer classifier;
ConditionalClassifier() {}
- ConditionalClassifier(const QString &algorithm_, const QSharedPointer &classifier_)
+ ConditionalClassifier(const QString &algorithm_, const QSharedPointer &classifier_)
: algorithm(algorithm_), classifier(classifier_) {}
};
QList conditionalClassifiers;
diff --git a/openbr/openbr_plugin.h b/openbr/openbr_plugin.h
index e5e09c2..d716b8f 100644
--- a/openbr/openbr_plugin.h
+++ b/openbr/openbr_plugin.h
@@ -1376,6 +1376,30 @@ private:
{ (void) targetGallery; (void) queryGallery; (void) output; return false; }
};
+class BR_EXPORT Representation : public Object
+{
+ Q_OBJECT
+
+public:
+ virtual ~Representation() {}
+
+ virtual cv::Mat preprocess(const cv::Mat &image) const { return image; }
+ // By convention, an empty indices list will result in all feature responses being calculated
+ // and returned.
+ virtual cv::Mat evaluate(const cv::Mat &image, const QList &indices = QList()) const = 0;
+};
+
+class BR_EXPORT Classifier : public Object
+{
+ Q_OBJECT
+
+public:
+ virtual ~Classifier() {}
+
+ virtual void train(const QList &images, const QList &labels) = 0;
+ virtual float classify(const cv::Mat &image) const = 0;
+};
+
/*!
* \brief Returns \c true if the algorithm is a classifier, \c false otherwise.
*