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