diff options
Diffstat (limited to 'libraries/libkface/opencv3.1.patch')
-rw-r--r-- | libraries/libkface/opencv3.1.patch | 168 |
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 ---------------------------------------------------- + + |