Commit 28ac05ec7ed784cf5d69d8367cba79b6d1d5c022

Authored by Josh Klontz
1 parent 970b3bc9

new API for specifying demographic filters

sdk/openbr_plugin.cpp
@@ -1315,22 +1315,13 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou @@ -1315,22 +1315,13 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou
1315 1315
1316 float Distance::compare(const Template &target, const Template &query) const 1316 float Distance::compare(const Template &target, const Template &query) const
1317 { 1317 {
1318 - if (!Globals->demographicFilters.isEmpty()) {  
1319 - // The if statement is a faster check then iterating over an empty list of filters  
1320 - foreach (const QString &filter, Globals->demographicFilters) { 1318 + if (!Globals->demographicFilters.isEmpty()) // If statement is faster than iterating over an empty list of filters
  1319 + foreach (const QString &filter, Globals->demographicFilters.keys()) {
1321 const QString targetMetadata = target.file.getString(filter, ""); 1320 const QString targetMetadata = target.file.getString(filter, "");
1322 - const QString queryMetadata = query.file.getString(filter, "");  
1323 - if (targetMetadata.isEmpty() || queryMetadata.isEmpty()) continue;  
1324 - if (targetMetadata != queryMetadata) return -std::numeric_limits<float>::max(); 1321 + if (!targetMetadata.isEmpty() &&
  1322 + (Globals->demographicFilters[filter].indexIn(targetMetadata) == -1))
  1323 + return -std::numeric_limits<float>::max();
1325 } 1324 }
1326 - }  
1327 -  
1328 - if (Globals->ageDelta < std::numeric_limits<float>::max()) {  
1329 - const float targetAge = target.file.getFloat("Age", -1);  
1330 - const float queryAge = target.file.getFloat("Age", -1);  
1331 - if ((targetAge != -1) && (queryAge != -1) && (abs(targetAge - queryAge) > Globals->ageDelta))  
1332 - return -std::numeric_limits<float>::max();  
1333 - }  
1334 1325
1335 return a * (_compare(target, query) - b); 1326 return a * (_compare(target, query) - b);
1336 } 1327 }
sdk/openbr_plugin.h
@@ -498,14 +498,10 @@ public: @@ -498,14 +498,10 @@ public:
498 /*! 498 /*!
499 * \brief Keys to use when matching templates to automatically determine non-match based on template metadata. 499 * \brief Keys to use when matching templates to automatically determine non-match based on template metadata.
500 */ 500 */
501 - Q_PROPERTY(QStringList demographicFilters READ get_demographicFilters WRITE set_demographicFilters RESET reset_demographicFilters)  
502 - BR_PROPERTY(QStringList, demographicFilters, QStringList())  
503 501
504 - /*!  
505 - * \brief Allowable age difference when matching templates.  
506 - */  
507 - Q_PROPERTY(float ageDelta READ get_ageDelta WRITE set_ageDelta RESET reset_ageDelta)  
508 - BR_PROPERTY(float, ageDelta, std::numeric_limits<float>::max()) 502 + typedef QHash<QString,QRegExp> DemographicFilters;
  503 + Q_PROPERTY(DemographicFilters demographicFilters READ get_demographicFilters WRITE set_demographicFilters RESET reset_demographicFilters)
  504 + BR_PROPERTY(DemographicFilters, demographicFilters, DemographicFilters())
509 505
510 /*! 506 /*!
511 * \brief If \c true a template will be skipped over if its file name already exists in the gallery. 507 * \brief If \c true a template will be skipped over if its file name already exists in the gallery.