From 75fdfba281e171510f4f7eb7abfba374d291f0e3 Mon Sep 17 00:00:00 2001 From: lluis Date: Fri, 13 Sep 2013 16:19:52 +0200 Subject: [PATCH] renamed getDefaultClassifierNM{1,2}() to loadClassifierNM{1,2}() and added "const std::string& filename" parameter (mandatory). --- .../include/opencv2/objdetect/erfilter.hpp | 19 +++--- modules/objdetect/src/erfilter.cpp | 71 ++++++++-------------- 2 files changed, 34 insertions(+), 56 deletions(-) diff --git a/modules/objdetect/include/opencv2/objdetect/erfilter.hpp b/modules/objdetect/include/opencv2/objdetect/erfilter.hpp index 0abb046..6f45a88 100644 --- a/modules/objdetect/include/opencv2/objdetect/erfilter.hpp +++ b/modules/objdetect/include/opencv2/objdetect/erfilter.hpp @@ -47,6 +47,7 @@ #include "opencv2/core.hpp" #include #include +#include namespace cv { @@ -164,7 +165,7 @@ public: \param cb Callback with the classifier. if omitted tries to load a default classifier from file trained_classifierNM1.xml - default classifier can be implicitly load with function getDefaultClassifierNM1() + default classifier can be implicitly load with function loadClassifierNM1() \param thresholdDelta Threshold step in subsequent thresholds when extracting the component tree \param minArea The minimum area (% of image size) allowed for retreived ER's \param minArea The maximum area (% of image size) allowed for retreived ER's @@ -189,7 +190,7 @@ CV_EXPORTS Ptr createERFilterNM1(const Ptr& cb = P \param cb Callback with the classifier if omitted tries to load a default classifier from file trained_classifierNM2.xml - default classifier can be implicitly load with function getDefaultClassifierNM2() + default classifier can be implicitly load with function loadClassifierNM2() \param minProbability The minimum probability P(er|character) allowed for retreived ER's */ CV_EXPORTS Ptr createERFilterNM2(const Ptr& cb = Ptr(), @@ -198,21 +199,19 @@ CV_EXPORTS Ptr createERFilterNM2(const Ptr& cb = P /*! Allow to implicitly load the default classifier when creating an ERFilter object. - The function takes no parameters and returns a pointer to ERFilter::Callback. - The dafault classifier is loaded from file trained_classifierNM1.xml - if it's found in current directory. + The function takes as parameter the XML or YAML file with the classifier model + (e.g. trained_classifierNM1.xml) returns a pointer to ERFilter::Callback. */ -CV_EXPORTS Ptr getDefaultClassifierNM1(); +CV_EXPORTS Ptr loadClassifierNM1(const std::string& filename); /*! Allow to implicitly load the default classifier when creating an ERFilter object. - The function takes no parameters and returns a pointer to ERFilter::Callback. - The dafault classifier is loaded from file trained_classifierNM2.xml - if it's found in current directory. + The function takes as parameter the XML or YAML file with the classifier model + (e.g. trained_classifierNM1.xml) returns a pointer to ERFilter::Callback. */ -CV_EXPORTS Ptr getDefaultClassifierNM2(); +CV_EXPORTS Ptr loadClassifierNM2(const std::string& filename); // computeNMChannels operation modes diff --git a/modules/objdetect/src/erfilter.cpp b/modules/objdetect/src/erfilter.cpp index 9365eab..dc3b30b 100644 --- a/modules/objdetect/src/erfilter.cpp +++ b/modules/objdetect/src/erfilter.cpp @@ -137,7 +137,7 @@ class CV_EXPORTS ERClassifierNM1 : public ERFilter::Callback { public: //Constructor - ERClassifierNM1(); + ERClassifierNM1(const std::string& filename); // Destructor ~ERClassifierNM1() {}; @@ -153,7 +153,7 @@ class CV_EXPORTS ERClassifierNM2 : public ERFilter::Callback { public: //constructor - ERClassifierNM2(); + ERClassifierNM2(const std::string& filename); // Destructor ~ERClassifierNM2() {}; @@ -988,24 +988,13 @@ int ERFilterNM::getNumRejected() // load default 1st stage classifier if found -ERClassifierNM1::ERClassifierNM1() +ERClassifierNM1::ERClassifierNM1(const std::string& filename) { - if (ifstream("./trained_classifierNM1.xml")) - { - // The file with default classifier exists - boost.load("./trained_classifierNM1.xml", "boost"); - } - else if (ifstream("./training/trained_classifierNM1.xml")) - { - // The file with default classifier exists - boost.load("./training/trained_classifierNM1.xml", "boost"); - } + if (ifstream(filename.c_str())) + boost.load( filename.c_str(), "boost" ); else - { - // File not found - CV_Error(CV_StsBadArg, "Default classifier ./trained_classifierNM1.xml not found!"); - } + CV_Error(CV_StsBadArg, "Default classifier file not found!"); }; double ERClassifierNM1::eval(const ERStat& stat) @@ -1026,24 +1015,12 @@ double ERClassifierNM1::eval(const ERStat& stat) // load default 2nd stage classifier if found -ERClassifierNM2::ERClassifierNM2() +ERClassifierNM2::ERClassifierNM2(const std::string& filename) { - - if (ifstream("./trained_classifierNM2.xml")) - { - // The file with default classifier exists - boost.load("./trained_classifierNM2.xml", "boost"); - } - else if (ifstream("./training/trained_classifierNM2.xml")) - { - // The file with default classifier exists - boost.load("./training/trained_classifierNM2.xml", "boost"); - } + if (ifstream(filename.c_str())) + boost.load( filename.c_str(), "boost" ); else - { - // File not found - CV_Error(CV_StsBadArg, "Default classifier ./trained_classifierNM2.xml not found!"); - } + CV_Error(CV_StsBadArg, "Default classifier file not found!"); }; double ERClassifierNM2::eval(const ERStat& stat) @@ -1080,6 +1057,7 @@ double ERClassifierNM2::eval(const ERStat& stat) \param cb Callback with the classifier. if omitted tries to load a default classifier from file trained_classifierNM1.xml + default classifier can be implicitly load with function loadClassifierNM1() \param thresholdDelta Threshold step in subsequent thresholds when extracting the component tree \param minArea The minimum area (% of image size) allowed for retreived ER's \param minArea The maximum area (% of image size) allowed for retreived ER's @@ -1100,9 +1078,11 @@ Ptr createERFilterNM1(const Ptr& cb, int threshold Ptr filter = makePtr(); if (cb == NULL) - filter->setCallback(makePtr()); - else + filter->setCallback(makePtr("trained_classifierNM1.xml")); + else filter->setCallback(cb); + + filter->setThresholdDelta(thresholdDelta); filter->setMinArea(minArea); @@ -1124,6 +1104,7 @@ Ptr createERFilterNM1(const Ptr& cb, int threshold \param cb Callback with the classifier if omitted tries to load a default classifier from file trained_classifierNM2.xml + default classifier can be implicitly load with function loadClassifierNM1() \param minProbability The minimum probability P(er|character) allowed for retreived ER's */ Ptr createERFilterNM2(const Ptr& cb, float minProbability) @@ -1134,7 +1115,7 @@ Ptr createERFilterNM2(const Ptr& cb, float minProb Ptr filter = makePtr(); if (cb == NULL) - filter->setCallback(makePtr()); + filter->setCallback(makePtr("trained_classifierNM2.xml")); else filter->setCallback(cb); @@ -1144,25 +1125,23 @@ Ptr createERFilterNM2(const Ptr& cb, float minProb /*! Allow to implicitly load the default classifier when creating an ERFilter object. - The function takes no parameters and returns a pointer to ERFilter::Callback. - The dafault classifier is loaded from file trained_classifierNM1.xml - if it's found in current directory. + The function takes as parameter the XML or YAML file with the classifier model + (e.g. trained_classifierNM1.xml) returns a pointer to ERFilter::Callback. */ -Ptr getDefaultClassifierNM1() +Ptr loadClassifierNM1(const std::string& filename) { - return makePtr(); + return makePtr(filename); } /*! Allow to implicitly load the default classifier when creating an ERFilter object. - The function takes no parameters and returns a pointer to ERFilter::Callback. - The dafault classifier is loaded from file trained_classifierNM2.xml - if it's found in current directory. + The function takes as parameter the XML or YAML file with the classifier model + (e.g. trained_classifierNM2.xml) returns a pointer to ERFilter::Callback. */ -Ptr getDefaultClassifierNM2() +Ptr loadClassifierNM2(const std::string& filename) { - return makePtr(); + return makePtr(filename); } -- 2.7.4