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. *