Commit 51a99b9f7be67ff9285b56eaa88b34b17e1ec7fb
1 parent
f7dff58c
factored out metadata comparison
Showing
2 changed files
with
26 additions
and
11 deletions
sdk/openbr_plugin.cpp
| @@ -1139,8 +1139,6 @@ private: | @@ -1139,8 +1139,6 @@ private: | ||
| 1139 | } | 1139 | } |
| 1140 | } | 1140 | } |
| 1141 | 1141 | ||
| 1142 | - | ||
| 1143 | - | ||
| 1144 | void store(QDataStream &stream) const | 1142 | void store(QDataStream &stream) const |
| 1145 | { | 1143 | { |
| 1146 | const int size = transforms.size(); | 1144 | const int size = transforms.size(); |
| @@ -1312,15 +1310,6 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou | @@ -1312,15 +1310,6 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou | ||
| 1312 | 1310 | ||
| 1313 | float Distance::compare(const Template &target, const Template &query) const | 1311 | float Distance::compare(const Template &target, const Template &query) const |
| 1314 | { | 1312 | { |
| 1315 | - if (!Globals->demographicFilters.isEmpty()) // If statement is faster than iterating over an empty list of filters | ||
| 1316 | - foreach (const QString &filter, Globals->demographicFilters.keys()) { | ||
| 1317 | - const QString targetMetadata = target.file.getString(filter, ""); | ||
| 1318 | - if (targetMetadata.isEmpty()) continue; | ||
| 1319 | - const QRegExp re(Globals->demographicFilters[filter]); | ||
| 1320 | - if (re.indexIn(targetMetadata) == -1) | ||
| 1321 | - return -std::numeric_limits<float>::max(); | ||
| 1322 | - } | ||
| 1323 | - | ||
| 1324 | return _compare(target, query); | 1313 | return _compare(target, query); |
| 1325 | } | 1314 | } |
| 1326 | 1315 |
sdk/plugins/quality.cpp
| @@ -262,6 +262,32 @@ class UnitDistance : public Distance | @@ -262,6 +262,32 @@ class UnitDistance : public Distance | ||
| 262 | 262 | ||
| 263 | BR_REGISTER(Distance, UnitDistance) | 263 | BR_REGISTER(Distance, UnitDistance) |
| 264 | 264 | ||
| 265 | +/*! | ||
| 266 | + * \ingroup distances | ||
| 267 | + * \brief Check target metadata before matching templates. | ||
| 268 | + * \author Josh Klontz \cite jklontz | ||
| 269 | + */ | ||
| 270 | +class MetadataDistance : public Distance | ||
| 271 | +{ | ||
| 272 | + Q_OBJECT | ||
| 273 | + Q_PROPERTY(Distance *distance READ get_distance WRITE set_distance RESET reset_distance) | ||
| 274 | + BR_PROPERTY(Distance*, distance, make("Dist(L2)")) | ||
| 275 | + | ||
| 276 | + float _compare(const Template &a, const Template &b) const | ||
| 277 | + { | ||
| 278 | + foreach (const QString &filter, Globals->demographicFilters.keys()) { | ||
| 279 | + const QString metadata = a.file.getString(filter, ""); | ||
| 280 | + if (metadata.isEmpty()) continue; | ||
| 281 | + const QRegExp re(Globals->demographicFilters[filter]); | ||
| 282 | + if (re.indexIn(metadata) == -1) | ||
| 283 | + return -std::numeric_limits<float>::max(); | ||
| 284 | + } | ||
| 285 | + return distance->compare(a, b); | ||
| 286 | + } | ||
| 287 | +}; | ||
| 288 | + | ||
| 289 | +BR_REGISTER(Distance, MetadataDistance) | ||
| 290 | + | ||
| 265 | } // namespace br | 291 | } // namespace br |
| 266 | 292 | ||
| 267 | #include "quality.moc" | 293 | #include "quality.moc" |