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 | 1139 | } |
| 1140 | 1140 | } |
| 1141 | 1141 | |
| 1142 | - | |
| 1143 | - | |
| 1144 | 1142 | void store(QDataStream &stream) const |
| 1145 | 1143 | { |
| 1146 | 1144 | const int size = transforms.size(); |
| ... | ... | @@ -1312,15 +1310,6 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou |
| 1312 | 1310 | |
| 1313 | 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 | 1313 | return _compare(target, query); |
| 1325 | 1314 | } |
| 1326 | 1315 | ... | ... |
sdk/plugins/quality.cpp
| ... | ... | @@ -262,6 +262,32 @@ class UnitDistance : public Distance |
| 262 | 262 | |
| 263 | 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 | 291 | } // namespace br |
| 266 | 292 | |
| 267 | 293 | #include "quality.moc" | ... | ... |