Commit 10160b94c108a83d2174f8721f95373582ddebc7
1 parent
0fb1cef2
added Distance::make
Showing
3 changed files
with
28 additions
and
1 deletions
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 &stream) const | @@ -524,6 +526,8 @@ void Object::store(QDataStream &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 &stream) | @@ -556,6 +560,8 @@ void Object::load(QDataStream &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 &name, const QString &value) | @@ -620,6 +626,8 @@ void Object::setProperty(const QString &name, const QString &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 &name, const QString &value) | @@ -630,6 +638,7 @@ void Object::setProperty(const QString &name, const QString &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 &dst, TemplateList &src) const | @@ -1270,6 +1280,19 @@ void Transform::backProject(const TemplateList &dst, TemplateList &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<float>) | @@ -1126,6 +1129,7 @@ Q_DECLARE_METATYPE(QList<float>) | ||
| 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 |