adding Haar & LBP cascades perf test using UMat, removing old incomplete test
authorAndrey Pavlenko <andrey.pavlenko@itseez.com>
Thu, 9 Jan 2014 20:08:15 +0000 (00:08 +0400)
committerAndrey Pavlenko <andrey.pavlenko@itseez.com>
Thu, 9 Jan 2014 20:08:15 +0000 (00:08 +0400)
modules/objdetect/perf/opencl/perf_cascades.cpp [new file with mode: 0644]
modules/objdetect/perf/perf_cascadeclassifier.cpp [deleted file]

diff --git a/modules/objdetect/perf/opencl/perf_cascades.cpp b/modules/objdetect/perf/opencl/perf_cascades.cpp
new file mode 100644 (file)
index 0000000..4af2428
--- /dev/null
@@ -0,0 +1,53 @@
+#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);
+}
diff --git a/modules/objdetect/perf/perf_cascadeclassifier.cpp b/modules/objdetect/perf/perf_cascadeclassifier.cpp
deleted file mode 100644 (file)
index cb5c0af..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#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());
-}