Commit 51a99b9f7be67ff9285b56eaa88b34b17e1ec7fb

Authored by Josh Klontz
1 parent f7dff58c

factored out metadata comparison

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"
... ...