summaryrefslogtreecommitdiff
path: root/libraries/libkface/opencv3.1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/libkface/opencv3.1.patch')
-rw-r--r--libraries/libkface/opencv3.1.patch168
1 files changed, 168 insertions, 0 deletions
diff --git a/libraries/libkface/opencv3.1.patch b/libraries/libkface/opencv3.1.patch
new file mode 100644
index 0000000000..fb61812601
--- /dev/null
+++ b/libraries/libkface/opencv3.1.patch
@@ -0,0 +1,168 @@
+diff --git a/src/recognition-opencv-lbph/facerec_borrowed.h b/src/recognition-opencv-lbph/facerec_borrowed.h
+index 27ad77a..f197d22 100644
+--- a/libkface/recognition-opencv-lbph/facerec_borrowed.h
++++ b/libkface/recognition-opencv-lbph/facerec_borrowed.h
+@@ -125,6 +125,8 @@ public:
+ */
+ void update(cv::InputArrayOfArrays src, cv::InputArray labels);
+
++
++#if OPENCV_TEST_VERSION(3,1,0)
+ /**
+ * Predicts the label of a query image in src.
+ */
+@@ -134,6 +136,13 @@ public:
+ * Predicts the label and confidence for a given sample.
+ */
+ void predict(cv::InputArray _src, int &label, double &dist) const;
++#else
++ using cv::face::FaceRecognizer::predict;
++ /*
++ * Predict
++ */
++ void predict(cv::InputArray src, cv::Ptr<cv::face::PredictCollector> collector, const int state = 0) const override;
++#endif
+
+ /**
+ * See FaceRecognizer::load().
+diff --git a/src/recognition-opencv-lbph/facerec_borrowed.cpp b/src/recognition-opencv-lbph/facerec_borrowed.cpp
+index 748691e..3c37ce2 100644
+--- a/libkface/recognition-opencv-lbph/facerec_borrowed.cpp
++++ b/libkface/recognition-opencv-lbph/facerec_borrowed.cpp
+@@ -36,6 +36,8 @@
+ *
+ * ============================================================ */
+
++#define QT_NO_EMIT
++
+ #include "facerec_borrowed.h"
+
+ // C++ includes
+@@ -375,7 +377,11 @@ void LBPHFaceRecognizer::train(InputArrayOfArrays _in_src, InputArray _inm_label
+ }
+ }
+
++#if OPENCV_TEST_VERSION(3,1,0)
+ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist) const
++#else
++void LBPHFaceRecognizer::predict(cv::InputArray _src, cv::Ptr<cv::face::PredictCollector> collector, const int state) const
++#endif
+ {
+ if(m_histograms.empty())
+ {
+@@ -394,8 +400,12 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ m_grid_y, /* grid size y */
+ true /* normed histograms */
+ );
++#if OPENCV_TEST_VERSION(3,1,0)
+ minDist = DBL_MAX;
+ minClass = -1;
++#else
++ collector->init((int)m_histograms.size(), state);
++#endif
+
+ // This is the standard method
+
+@@ -406,11 +416,19 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ {
+ double dist = compareHist(m_histograms[sampleIdx], query, CV_COMP_CHISQR);
+
++#if OPENCV_TEST_VERSION(3,1,0)
+ if((dist < minDist) && (dist < m_threshold))
+ {
+ minDist = dist;
+ minClass = m_labels.at<int>((int) sampleIdx);
+ }
++#else
++ int label = m_labels.at<int>((int) sampleIdx);
++ if (!collector->emit(label, dist, state))
++ {
++ return;
++ }
++#endif
+ }
+ }
+
+@@ -422,7 +440,7 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ // Create map "label -> vector of distances to all histograms for this label"
+ std::map<int, std::vector<int> > distancesMap;
+
+- for(size_t sampleIdx = 0; sampleIdx < m_histograms.size(); sampleIdx++)
++ for(size_t sampleIdx = 0; sampleIdx < m_histograms.size(); sampleIdx++)
+ {
+ double dist = compareHist(m_histograms[sampleIdx], query, CV_COMP_CHISQR);
+ std::vector<int>& distances = distancesMap[m_labels.at<int>((int) sampleIdx)];
+@@ -445,11 +463,18 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ double mean = sum / it->second.size();
+ s += QString::fromLatin1("%1: %2 - ").arg(it->first).arg(mean);
+
++#if OPENCV_TEST_VERSION(3,1,0)
+ if((mean < minDist) && (mean < m_threshold))
+ {
+ minDist = mean;
+ minClass = it->first;
+ }
++#else
++ if (!collector->emit(it->first, mean, state))
++ {
++ return;
++ }
++#endif
+ }
+
+ qCDebug(LIBKFACE_LOG) << s;
+@@ -462,7 +487,7 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ // map "label -> number of histograms"
+ std::map<int, int> countMap;
+
+- for(size_t sampleIdx = 0; sampleIdx < m_histograms.size(); sampleIdx++)
++ for(size_t sampleIdx = 0; sampleIdx < m_histograms.size(); sampleIdx++)
+ {
+ int label = m_labels.at<int>((int) sampleIdx);
+ double dist = compareHist(m_histograms[sampleIdx], query, CV_COMP_CHISQR);
+@@ -480,7 +505,9 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ scoreMap[it->second]++;
+ }
+
++#if OPENCV_TEST_VERSION(3,1,0)
+ minDist = 0;
++#endif
+ QString s("Nearest Neighbor score: ");
+
+ for (std::map<int,int>::iterator it = scoreMap.begin(); it != scoreMap.end(); ++it)
+@@ -488,17 +515,26 @@ void LBPHFaceRecognizer::predict(InputArray _src, int &minClass, double &minDist
+ double score = double(it->second) / countMap.at(it->first);
+ s += QString::fromLatin1("%1/%2 %3 ").arg(it->second).arg(countMap.at(it->first)).arg(score);
+
++#if OPENCV_TEST_VERSION(3,1,0)
+ if (score > minDist)
+ {
+ minDist = score;
+ minClass = it->first;
+ }
++#else
++ // large is better thus it is -score.
++ if (!collector->emit(it->first, -score, state))
++ {
++ return;
++ }
++#endif
+ }
+
+ kDebug() << s;
+ }
+ }
+
++#if OPENCV_TEST_VERSION(3,1,0)
+ int LBPHFaceRecognizer::predict(InputArray _src) const
+ {
+ int label;
+@@ -506,6 +542,7 @@ int LBPHFaceRecognizer::predict(InputArray _src) const
+ predict(_src, label, dummy);
+ return label;
+ }
++#endif
+
+ // Static method ----------------------------------------------------
+
+