Commit b32f0957c09fd4c6b53fec705d91600c0fe36d32

Authored by JordanCheney
2 parents 416bc1c7 34937da0

Merge pull request #288 from biometrics/classification_interface

Implementation of Classification Interface
openbr/gui/classifier.cpp
@@ -7,7 +7,7 @@ using namespace br; @@ -7,7 +7,7 @@ using namespace br;
7 7
8 /**** CLASSIFIER ****/ 8 /**** CLASSIFIER ****/
9 /*** PUBLIC ***/ 9 /*** PUBLIC ***/
10 -Classifier::Classifier(QWidget *parent) 10 +GUIClassifier::GUIClassifier(QWidget *parent)
11 : QLabel(parent) 11 : QLabel(parent)
12 { 12 {
13 setAlignment(Qt::AlignCenter); 13 setAlignment(Qt::AlignCenter);
@@ -15,26 +15,26 @@ Classifier::Classifier(QWidget *parent) @@ -15,26 +15,26 @@ Classifier::Classifier(QWidget *parent)
15 connect(this, SIGNAL(newClassification(QString,QString)), this, SLOT(setClassification(QString,QString))); 15 connect(this, SIGNAL(newClassification(QString,QString)), this, SLOT(setClassification(QString,QString)));
16 } 16 }
17 17
18 -void Classifier::setAlgorithm(const QString &algorithm) 18 +void GUIClassifier::setAlgorithm(const QString &algorithm)
19 { 19 {
20 this->algorithm = algorithm; 20 this->algorithm = algorithm;
21 } 21 }
22 22
23 /*** PUBLIC SLOTS ***/ 23 /*** PUBLIC SLOTS ***/
24 -void Classifier::classify(const File &file) 24 +void GUIClassifier::classify(const File &file)
25 { 25 {
26 - QtConcurrent::run(this, &Classifier::_classify, file); 26 + QtConcurrent::run(this, &GUIClassifier::_classify, file);
27 } 27 }
28 28
29 /*** PRIVATE SLOTS ***/ 29 /*** PRIVATE SLOTS ***/
30 -void Classifier::setClassification(const QString &key, const QString &value) 30 +void GUIClassifier::setClassification(const QString &key, const QString &value)
31 { 31 {
32 if (key.isEmpty()) clear(); 32 if (key.isEmpty()) clear();
33 else setText(QString("%1: <b>%2</b>").arg(key, value)); 33 else setText(QString("%1: <b>%2</b>").arg(key, value));
34 } 34 }
35 35
36 /*** PRIVATE ***/ 36 /*** PRIVATE ***/
37 -void Classifier::_classify(File file) 37 +void GUIClassifier::_classify(File file)
38 { 38 {
39 QString key, value; 39 QString key, value;
40 QSharedPointer<Transform> transform = Transform::fromAlgorithm(algorithm); 40 QSharedPointer<Transform> transform = Transform::fromAlgorithm(algorithm);
openbr/gui/classifier.h
1 -#ifndef BR_CLASSIFIER_H  
2 -#define BR_CLASSIFIER_H 1 +#ifndef BR_GUICLASSIFIER_H
  2 +#define BR_GUICLASSIFIER_H
3 3
4 #include <QLabel> 4 #include <QLabel>
5 #include <QWidget> 5 #include <QWidget>
@@ -9,13 +9,13 @@ @@ -9,13 +9,13 @@
9 namespace br 9 namespace br
10 { 10 {
11 11
12 -class BR_EXPORT Classifier : public QLabel 12 +class BR_EXPORT GUIClassifier : public QLabel
13 { 13 {
14 Q_OBJECT 14 Q_OBJECT
15 QString algorithm; 15 QString algorithm;
16 16
17 public: 17 public:
18 - explicit Classifier(QWidget *parent = 0); 18 + explicit GUIClassifier(QWidget *parent = 0);
19 void setAlgorithm(const QString &algorithm); 19 void setAlgorithm(const QString &algorithm);
20 20
21 public slots: 21 public slots:
@@ -33,4 +33,4 @@ signals: @@ -33,4 +33,4 @@ signals:
33 33
34 } // namespace br 34 } // namespace br
35 35
36 -#endif // BR_CLASSIFIER_H 36 +#endif // BR_GUICLASSIFIER_H
openbr/gui/templatemetadata.cpp
@@ -21,7 +21,7 @@ TemplateMetadata::TemplateMetadata(QWidget *parent) @@ -21,7 +21,7 @@ TemplateMetadata::TemplateMetadata(QWidget *parent)
21 21
22 void TemplateMetadata::addClassifier(const QString &classifier_, const QString algorithm) 22 void TemplateMetadata::addClassifier(const QString &classifier_, const QString algorithm)
23 { 23 {
24 - QSharedPointer<Classifier> classifier(new Classifier()); 24 + QSharedPointer<GUIClassifier> classifier(new GUIClassifier());
25 classifier->setAlgorithm(classifier_); 25 classifier->setAlgorithm(classifier_);
26 layout->addWidget(classifier.data()); 26 layout->addWidget(classifier.data());
27 conditionalClassifiers.append(ConditionalClassifier(algorithm, classifier)); 27 conditionalClassifiers.append(ConditionalClassifier(algorithm, classifier));
openbr/gui/templatemetadata.h
@@ -24,10 +24,10 @@ class BR_EXPORT TemplateMetadata : public QWidget @@ -24,10 +24,10 @@ class BR_EXPORT TemplateMetadata : public QWidget
24 struct ConditionalClassifier 24 struct ConditionalClassifier
25 { 25 {
26 QString algorithm; 26 QString algorithm;
27 - QSharedPointer<Classifier> classifier; 27 + QSharedPointer<GUIClassifier> classifier;
28 28
29 ConditionalClassifier() {} 29 ConditionalClassifier() {}
30 - ConditionalClassifier(const QString &algorithm_, const QSharedPointer<Classifier> &classifier_) 30 + ConditionalClassifier(const QString &algorithm_, const QSharedPointer<GUIClassifier> &classifier_)
31 : algorithm(algorithm_), classifier(classifier_) {} 31 : algorithm(algorithm_), classifier(classifier_) {}
32 }; 32 };
33 QList<ConditionalClassifier> conditionalClassifiers; 33 QList<ConditionalClassifier> conditionalClassifiers;
openbr/openbr_plugin.h
@@ -1376,6 +1376,30 @@ private: @@ -1376,6 +1376,30 @@ private:
1376 { (void) targetGallery; (void) queryGallery; (void) output; return false; } 1376 { (void) targetGallery; (void) queryGallery; (void) output; return false; }
1377 }; 1377 };
1378 1378
  1379 +class BR_EXPORT Representation : public Object
  1380 +{
  1381 + Q_OBJECT
  1382 +
  1383 +public:
  1384 + virtual ~Representation() {}
  1385 +
  1386 + virtual cv::Mat preprocess(const cv::Mat &image) const { return image; }
  1387 + // By convention, an empty indices list will result in all feature responses being calculated
  1388 + // and returned.
  1389 + virtual cv::Mat evaluate(const cv::Mat &image, const QList<int> &indices = QList<int>()) const = 0;
  1390 +};
  1391 +
  1392 +class BR_EXPORT Classifier : public Object
  1393 +{
  1394 + Q_OBJECT
  1395 +
  1396 +public:
  1397 + virtual ~Classifier() {}
  1398 +
  1399 + virtual void train(const QList<cv::Mat> &images, const QList<float> &labels) = 0;
  1400 + virtual float classify(const cv::Mat &image) const = 0;
  1401 +};
  1402 +
1379 /*! 1403 /*!
1380 * \brief Returns \c true if the algorithm is a classifier, \c false otherwise. 1404 * \brief Returns \c true if the algorithm is a classifier, \c false otherwise.
1381 * 1405 *