--- /dev/null
+#include "perf_precomp.hpp"
+#include <opencv2/imgproc.hpp>
+
+using namespace std;
+using namespace cv;
+using namespace perf;
+using std::tr1::make_tuple;
+using std::tr1::get;
+
+typedef std::tr1::tuple<std::string, std::string, int> Cascade_Image_MinSize_t;
+typedef perf::TestBaseWithParam<Cascade_Image_MinSize_t> Cascade_Image_MinSize;
+
+PERF_TEST_P( Cascade_Image_MinSize, CascadeClassifier_UMat,
+ testing::Combine(
+ testing::Values( string("cv/cascadeandhog/cascades/haarcascade_frontalface_alt.xml"),
+ string("cv/cascadeandhog/cascades/lbpcascade_frontalface.xml") ),
+ testing::Values( string("cv/shared/lena.png"),
+ string("cv/cascadeandhog/images/bttf301.png"),
+ string("cv/cascadeandhog/images/class57.png") ),
+ testing::Values(30, 64, 90) ) )
+{
+ const string cascasePath = get<0>(GetParam());
+ const string imagePath = get<1>(GetParam());
+ int min_size = get<2>(GetParam());
+ Size minSize(min_size, min_size);
+
+ CascadeClassifier cc( getDataPath(cascasePath) );
+ if (cc.empty())
+ FAIL() << "Can't load cascade file: " << getDataPath(cascasePath);
+
+ Mat img = imread(getDataPath(imagePath), IMREAD_GRAYSCALE);
+ if (img.empty())
+ FAIL() << "Can't load source image: " << getDataPath(imagePath);
+
+ vector<Rect> faces;
+
+ equalizeHist(img, img);
+ declare.in(img).time(60);
+
+ UMat uimg = img.getUMat(ACCESS_READ);
+
+ while(next())
+ {
+ faces.clear();
+
+ startTimer();
+ cc.detectMultiScale(uimg, faces, 1.1, 3, 0, minSize);
+ stopTimer();
+ }
+
+ sort(faces.begin(), faces.end(), comparators::RectLess());
+ SANITY_CHECK(faces, min_size/5);
+}
+++ /dev/null
-#include "perf_precomp.hpp"
-#include <opencv2/imgproc.hpp>
-
-using namespace std;
-using namespace cv;
-using namespace perf;
-using std::tr1::make_tuple;
-using std::tr1::get;
-
-typedef std::tr1::tuple<std::string, int> ImageName_MinSize_t;
-typedef perf::TestBaseWithParam<ImageName_MinSize_t> ImageName_MinSize;
-
-PERF_TEST_P(ImageName_MinSize, CascadeClassifierLBPFrontalFace,
- testing::Combine(testing::Values( std::string("cv/shared/lena.png"),
- std::string("cv/shared/1_itseez-0000289.png"),
- std::string("cv/shared/1_itseez-0000492.png"),
- std::string("cv/shared/1_itseez-0000573.png")),
- testing::Values(24, 30, 40, 50, 60, 70, 80, 90)
- )
- )
-{
- const string filename = get<0>(GetParam());
- int min_size = get<1>(GetParam());
- Size minSize(min_size, min_size);
-
- CascadeClassifier cc(getDataPath("cv/cascadeandhog/cascades/lbpcascade_frontalface.xml"));
- if (cc.empty())
- FAIL() << "Can't load cascade file";
-
- Mat img = imread(getDataPath(filename), 0);
- if (img.empty())
- FAIL() << "Can't load source image";
-
- vector<Rect> faces;
-
- equalizeHist(img, img);
- declare.in(img);
-
- while(next())
- {
- faces.clear();
-
- startTimer();
- cc.detectMultiScale(img, faces, 1.1, 3, 0, minSize);
- stopTimer();
- }
- // for some reason OpenCL version detects the face, which CPU version does not detect, we just remove it
- // TODO better solution: implement smart way of comparing two set of rectangles
- if( filename == "cv/shared/1_itseez-0000492.png" && faces.size() == (size_t)3 )
- {
- faces.erase(faces.begin());
- }
-
- std::sort(faces.begin(), faces.end(), comparators::RectLess());
- SANITY_CHECK(faces, 3.001 * faces.size());
-}