Commit 10160b94c108a83d2174f8721f95373582ddebc7

Authored by Josh Klontz
1 parent 0fb1cef2

added Distance::make

sdk/core/core.cpp
@@ -252,7 +252,7 @@ private: @@ -252,7 +252,7 @@ private:
252 if (words.size() > 2) qFatal("AlgorithmCore::init invalid algorithm format."); 252 if (words.size() > 2) qFatal("AlgorithmCore::init invalid algorithm format.");
253 253
254 transform = QSharedPointer<Transform>(Transform::make(words[0], NULL)); 254 transform = QSharedPointer<Transform>(Transform::make(words[0], NULL));
255 - if (words.size() > 1) distance = QSharedPointer<Distance>(Factory<Distance>::make("." + words[1])); 255 + if (words.size() > 1) distance = QSharedPointer<Distance>(Distance::make(words[1], NULL));
256 } 256 }
257 }; 257 };
258 258
sdk/openbr_plugin.cpp
@@ -497,6 +497,8 @@ QString Object::argument(int index) const @@ -497,6 +497,8 @@ QString Object::argument(int index) const
497 return "[" + strings.join(",") + "]"; 497 return "[" + strings.join(",") + "]";
498 } else if (type == "br::Transform*") { 498 } else if (type == "br::Transform*") {
499 return variant.value<Transform*>()->description(); 499 return variant.value<Transform*>()->description();
  500 + } else if (type == "br::Distance*") {
  501 + return variant.value<Distance*>()->description();
500 } else if (type == "QStringList") { 502 } else if (type == "QStringList") {
501 return "[" + variant.toStringList().join(",") + "]"; 503 return "[" + variant.toStringList().join(",") + "]";
502 } 504 }
@@ -524,6 +526,8 @@ void Object::store(QDataStream &amp;stream) const @@ -524,6 +526,8 @@ void Object::store(QDataStream &amp;stream) const
524 transform->store(stream); 526 transform->store(stream);
525 } else if (type == "br::Transform*") { 527 } else if (type == "br::Transform*") {
526 property.read(this).value<Transform*>()->store(stream); 528 property.read(this).value<Transform*>()->store(stream);
  529 + } else if (type == "br::Distance*") {
  530 + property.read(this).value<Distance*>()->store(stream);
527 } else if (type == "bool") { 531 } else if (type == "bool") {
528 stream << property.read(this).toBool(); 532 stream << property.read(this).toBool();
529 } else if (type == "int") { 533 } else if (type == "int") {
@@ -556,6 +560,8 @@ void Object::load(QDataStream &amp;stream) @@ -556,6 +560,8 @@ void Object::load(QDataStream &amp;stream)
556 transform->load(stream); 560 transform->load(stream);
557 } else if (type == "br::Transform*") { 561 } else if (type == "br::Transform*") {
558 property.read(this).value<Transform*>()->load(stream); 562 property.read(this).value<Transform*>()->load(stream);
  563 + } else if (type == "br::Distance*") {
  564 + property.read(this).value<Distance*>()->load(stream);
559 } else if (type == "bool") { 565 } else if (type == "bool") {
560 bool value; 566 bool value;
561 stream >> value; 567 stream >> value;
@@ -620,6 +626,8 @@ void Object::setProperty(const QString &amp;name, const QString &amp;value) @@ -620,6 +626,8 @@ void Object::setProperty(const QString &amp;name, const QString &amp;value)
620 } 626 }
621 } else if (type == "br::Transform*") { 627 } else if (type == "br::Transform*") {
622 variant.setValue(Transform::make(value, this)); 628 variant.setValue(Transform::make(value, this));
  629 + } else if (type == "br::Distance*") {
  630 + variant.setValue(Distance::make(value, this));
623 } else if (type == "QStringList") { 631 } else if (type == "QStringList") {
624 variant.setValue(parse(value.mid(1, value.size()-2))); 632 variant.setValue(parse(value.mid(1, value.size()-2)));
625 } else if (type == "bool") { 633 } else if (type == "bool") {
@@ -630,6 +638,7 @@ void Object::setProperty(const QString &amp;name, const QString &amp;value) @@ -630,6 +638,7 @@ void Object::setProperty(const QString &amp;name, const QString &amp;value)
630 } else { 638 } else {
631 variant = value; 639 variant = value;
632 } 640 }
  641 +
633 if (!QObject::setProperty(qPrintable(name), variant) && !type.isEmpty()) 642 if (!QObject::setProperty(qPrintable(name), variant) && !type.isEmpty())
634 qFatal("Failed to set %s::%s to: %s %s", 643 qFatal("Failed to set %s::%s to: %s %s",
635 metaObject()->className(), qPrintable(name), qPrintable(value), qPrintable(type)); 644 metaObject()->className(), qPrintable(name), qPrintable(value), qPrintable(type));
@@ -786,6 +795,7 @@ void br::Context::initializeQt(QString sdkPath) @@ -786,6 +795,7 @@ void br::Context::initializeQt(QString sdkPath)
786 qRegisterMetaType< QList<int> >(); 795 qRegisterMetaType< QList<int> >();
787 qRegisterMetaType< br::Transform* >(); 796 qRegisterMetaType< br::Transform* >();
788 qRegisterMetaType< QList<br::Transform*> >(); 797 qRegisterMetaType< QList<br::Transform*> >();
  798 + qRegisterMetaType< br::Distance* >();
789 qRegisterMetaType< cv::Mat >(); 799 qRegisterMetaType< cv::Mat >();
790 800
791 qInstallMsgHandler(messageHandler); 801 qInstallMsgHandler(messageHandler);
@@ -1270,6 +1280,19 @@ void Transform::backProject(const TemplateList &amp;dst, TemplateList &amp;src) const @@ -1270,6 +1280,19 @@ void Transform::backProject(const TemplateList &amp;dst, TemplateList &amp;src) const
1270 } 1280 }
1271 1281
1272 /* Distance - public methods */ 1282 /* Distance - public methods */
  1283 +Distance *Distance::make(QString str, QObject *parent)
  1284 +{
  1285 + // Check for custom transforms
  1286 + if (Globals->abbreviations.contains(str))
  1287 + return make(Globals->abbreviations[str], parent);
  1288 +
  1289 + File f = "." + str;
  1290 + Distance *distance = Factory<Distance>::make(f);
  1291 +
  1292 + distance->setParent(parent);
  1293 + return distance;
  1294 +}
  1295 +
1273 void Distance::compare(const TemplateList &target, const TemplateList &query, Output *output) const 1296 void Distance::compare(const TemplateList &target, const TemplateList &query, Output *output) const
1274 { 1297 {
1275 const bool stepTarget = target.size() > query.size(); 1298 const bool stepTarget = target.size() > query.size();
sdk/openbr_plugin.h
@@ -1066,6 +1066,9 @@ class BR_EXPORT Distance : public Object @@ -1066,6 +1066,9 @@ class BR_EXPORT Distance : public Object
1066 Q_OBJECT 1066 Q_OBJECT
1067 1067
1068 public: 1068 public:
  1069 + virtual ~Distance() {}
  1070 + static Distance *make(QString str, QObject *parent); /*!< \brief Make a distance from a string. */
  1071 +
1069 static QSharedPointer<Distance> fromAlgorithm(const QString &algorithm); /*!< \brief Retrieve an algorithm's distance. */ 1072 static QSharedPointer<Distance> fromAlgorithm(const QString &algorithm); /*!< \brief Retrieve an algorithm's distance. */
1070 virtual void train(const TemplateList &src) { (void) src; } /*!< \brief Train the distance. */ 1073 virtual void train(const TemplateList &src) { (void) src; } /*!< \brief Train the distance. */
1071 virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const; /*!< \brief Compare two template lists. */ 1074 virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const; /*!< \brief Compare two template lists. */
@@ -1126,6 +1129,7 @@ Q_DECLARE_METATYPE(QList&lt;float&gt;) @@ -1126,6 +1129,7 @@ Q_DECLARE_METATYPE(QList&lt;float&gt;)
1126 Q_DECLARE_METATYPE(QList<int>) 1129 Q_DECLARE_METATYPE(QList<int>)
1127 Q_DECLARE_METATYPE(br::Transform*) 1130 Q_DECLARE_METATYPE(br::Transform*)
1128 Q_DECLARE_METATYPE(QList<br::Transform*>) 1131 Q_DECLARE_METATYPE(QList<br::Transform*>)
  1132 +Q_DECLARE_METATYPE(br::Distance*)
1129 Q_DECLARE_METATYPE(cv::Mat) 1133 Q_DECLARE_METATYPE(cv::Mat)
1130 1134
1131 #endif // __OPENBR_PLUGIN_H 1135 #endif // __OPENBR_PLUGIN_H