Commit e9d3ee93ec240c3111f9fb674c1c0be759029b58

Authored by Josh Klontz
2 parents 5032f4db 6a1be000

Merge branch 'master' of https://github.com/biometrics/openbr

openbr/core/plot.cpp
@@ -250,6 +250,7 @@ float Evaluate(const QString &simmat, const QString &mask, const QString &csv) @@ -250,6 +250,7 @@ float Evaluate(const QString &simmat, const QString &mask, const QString &csv)
250 250
251 // Write Cumulative Match Characteristic (CMC) curve 251 // Write Cumulative Match Characteristic (CMC) curve
252 const int Max_Retrieval = 25; 252 const int Max_Retrieval = 25;
  253 + float maxRankRate;
253 for (int i=1; i<=Max_Retrieval; i++) { 254 for (int i=1; i<=Max_Retrieval; i++) {
254 int realizedReturns = 0, possibleReturns = 0; 255 int realizedReturns = 0, possibleReturns = 0;
255 foreach (int firstGenuineReturn, firstGenuineReturns) { 256 foreach (int firstGenuineReturn, firstGenuineReturns) {
@@ -257,10 +258,11 @@ float Evaluate(const QString &amp;simmat, const QString &amp;mask, const QString &amp;csv) @@ -257,10 +258,11 @@ float Evaluate(const QString &amp;simmat, const QString &amp;mask, const QString &amp;csv)
257 if (firstGenuineReturn <= i) realizedReturns++; 258 if (firstGenuineReturn <= i) realizedReturns++;
258 } 259 }
259 lines.append(qPrintable(QString("CMC,%1,%2").arg(QString::number(i), QString::number(float(realizedReturns)/possibleReturns)))); 260 lines.append(qPrintable(QString("CMC,%1,%2").arg(QString::number(i), QString::number(float(realizedReturns)/possibleReturns))));
  261 + if (i==(Max_Retrieval)) maxRankRate = float(realizedReturns)/possibleReturns;
260 } 262 }
261 263
262 if (!csv.isEmpty()) QtUtils::writeFile(csv, lines); 264 if (!csv.isEmpty()) QtUtils::writeFile(csv, lines);
263 - qDebug("TAR @ FAR = 0.01: %.3f", result); 265 + qDebug("TAR @ FAR = 0.01: %.3f\nRetrieval Rate at Rank 25: %.3f", result, maxRankRate);
264 return result; 266 return result;
265 } 267 }
266 268
openbr/openbr_plugin.cpp
@@ -968,6 +968,7 @@ void br::Context::messageHandler(QtMsgType type, const QMessageLogContext &amp;conte @@ -968,6 +968,7 @@ void br::Context::messageHandler(QtMsgType type, const QMessageLogContext &amp;conte
968 // Write debug output then close 968 // Write debug output then close
969 qDebug(" File: %s\n Function: %s\n Line: %d", qPrintable(context.file), qPrintable(context.function), context.line); 969 qDebug(" File: %s\n Function: %s\n Line: %d", qPrintable(context.file), qPrintable(context.function), context.line);
970 Globals->finalize(); 970 Globals->finalize();
  971 + //QCoreApplication::exit(-1);
971 abort(); 972 abort();
972 } 973 }
973 } 974 }
openbr/plugins/distance.cpp
@@ -177,6 +177,11 @@ class PipeDistance : public Distance @@ -177,6 +177,11 @@ class PipeDistance : public Distance
177 177
178 BR_REGISTER(Distance, PipeDistance) 178 BR_REGISTER(Distance, PipeDistance)
179 179
  180 +/*!
  181 + * \ingroup distances
  182 + * \brief Average distance of multiple matrices
  183 + * \author Scott Klum \cite sklum
  184 + */
180 class AverageDistance : public Distance 185 class AverageDistance : public Distance
181 { 186 {
182 Q_OBJECT 187 Q_OBJECT
@@ -190,19 +195,12 @@ class AverageDistance : public Distance @@ -190,19 +195,12 @@ class AverageDistance : public Distance
190 195
191 float compare(const Template &a, const Template &b) const 196 float compare(const Template &a, const Template &b) const
192 { 197 {
193 - if (a.size() != b.size())  
194 - qDebug() << a.size() << " " << b.size(); 198 + if (a.size() != b.size()) qFatal("Comparison size mismatch");
195 199
196 float score = 0; 200 float score = 0;
  201 + for (int i = 0; i < a.size(); i++) score += distance->compare(a[i],b[i]);
197 202
198 - for (int i = 0; i < a.size(); i++) {  
199 - //Template  
200 - score += distance->compare(a[i],b[i]);  
201 - }  
202 -  
203 - qDebug() << score;  
204 -  
205 - return score; 203 + return score/(float)a.size();
206 } 204 }
207 }; 205 };
208 206
openbr/plugins/gallery.cpp
@@ -302,7 +302,7 @@ class memGallery : public Gallery @@ -302,7 +302,7 @@ class memGallery : public Gallery
302 302
303 static void align(TemplateList &templates) 303 static void align(TemplateList &templates)
304 { 304 {
305 - //if (templates[0].size() > 1) return; 305 + if (!templates.empty() && templates[0].size() > 1) return;
306 306
307 bool uniform = true; 307 bool uniform = true;
308 QVector<uchar> alignedData(templates.bytes<size_t>()); 308 QVector<uchar> alignedData(templates.bytes<size_t>());
openbr/plugins/meta.cpp
@@ -88,7 +88,7 @@ class PipeTransform : public CompositeTransform @@ -88,7 +88,7 @@ class PipeTransform : public CompositeTransform
88 TemplateList copy(data); 88 TemplateList copy(data);
89 int i = 0; 89 int i = 0;
90 while (i < transforms.size()) { 90 while (i < transforms.size()) {
91 - fprintf(stderr, "%s", qPrintable(transforms[i]->objectName())); 91 + fprintf(stderr, "\n%s", qPrintable(transforms[i]->objectName()));
92 92
93 // Conditional statement covers likely case that first transform is untrainable 93 // Conditional statement covers likely case that first transform is untrainable
94 if (transforms[i]->trainable) { 94 if (transforms[i]->trainable) {
@@ -106,7 +106,7 @@ class PipeTransform : public CompositeTransform @@ -106,7 +106,7 @@ class PipeTransform : public CompositeTransform
106 !transforms[nextTrainableTransform]->trainable) 106 !transforms[nextTrainableTransform]->trainable)
107 nextTrainableTransform++; 107 nextTrainableTransform++;
108 108
109 - fprintf(stderr, " projecting...\n"); 109 + fprintf(stderr, " projecting...");
110 QFutureSynchronizer<void> futures; 110 QFutureSynchronizer<void> futures;
111 for (int j=0; j<copy.size(); j++) 111 for (int j=0; j<copy.size(); j++)
112 if (Globals->parallelism) futures.addFuture(QtConcurrent::run(this, &PipeTransform::_projectPartial, &copy[j], i, nextTrainableTransform)); 112 if (Globals->parallelism) futures.addFuture(QtConcurrent::run(this, &PipeTransform::_projectPartial, &copy[j], i, nextTrainableTransform));