#include "perf_precomp.hpp" using namespace std; using namespace testing; namespace { /////////////////////////////////////////////////////////////// // HOG DEF_PARAM_TEST_1(Image, string); PERF_TEST_P(Image, ObjDetect_HOG, Values("gpu/hog/road.png")) { cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); std::vector found_locations; if (PERF_RUN_GPU()) { cv::gpu::GpuMat d_img(img); cv::gpu::HOGDescriptor d_hog; d_hog.setSVMDetector(cv::gpu::HOGDescriptor::getDefaultPeopleDetector()); d_hog.detectMultiScale(d_img, found_locations); TEST_CYCLE() { d_hog.detectMultiScale(d_img, found_locations); } } else { cv::HOGDescriptor hog; hog.setSVMDetector(cv::gpu::HOGDescriptor::getDefaultPeopleDetector()); hog.detectMultiScale(img, found_locations); TEST_CYCLE() { hog.detectMultiScale(img, found_locations); } } SANITY_CHECK(found_locations); } //===========test for CalTech data =============// DEF_PARAM_TEST_1(HOG, string); PERF_TEST_P(HOG, CalTech, Values("gpu/caltech/image_00000009_0.png", "gpu/caltech/image_00000032_0.png", "gpu/caltech/image_00000165_0.png", "gpu/caltech/image_00000261_0.png", "gpu/caltech/image_00000469_0.png", "gpu/caltech/image_00000527_0.png", "gpu/caltech/image_00000574_0.png")) { cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); std::vector found_locations; if (PERF_RUN_GPU()) { cv::gpu::GpuMat d_img(img); cv::gpu::HOGDescriptor d_hog; d_hog.setSVMDetector(cv::gpu::HOGDescriptor::getDefaultPeopleDetector()); d_hog.detectMultiScale(d_img, found_locations); TEST_CYCLE() { d_hog.detectMultiScale(d_img, found_locations); } } else { cv::HOGDescriptor hog; hog.setSVMDetector(cv::gpu::HOGDescriptor::getDefaultPeopleDetector()); hog.detectMultiScale(img, found_locations); TEST_CYCLE() { hog.detectMultiScale(img, found_locations); } } SANITY_CHECK(found_locations); } typedef pair pair_string; DEF_PARAM_TEST_1(SoftCascade, pair_string); PERF_TEST_P(SoftCascade, detect, Values(make_pair("cv/cascadeandhog/sc_cvpr_2012_to_opencv.xml", "cv/cascadeandhog/bahnhof/image_00000000_0.png"))) { if (runOnGpu) { cv::Mat cpu = readImage (GetParam().second); ASSERT_FALSE(cpu.empty()); cv::gpu::GpuMat colored(cpu); cv::gpu::SoftCascade cascade; ASSERT_TRUE(cascade.load(perf::TestBase::getDataPath(GetParam().first))); cv::gpu::GpuMat objectBoxes(1, 16384, CV_8UC1), rois(cascade.getRoiSize(), CV_8UC1); rois.setTo(0); cv::gpu::GpuMat sub(rois, cv::Rect(rois.cols / 4, rois.rows / 4,rois.cols / 2, rois.rows / 2)); sub.setTo(cv::Scalar::all(1)); cascade.detectMultiScale(colored, rois, objectBoxes); TEST_CYCLE() { cascade.detectMultiScale(colored, rois, objectBoxes); } } else { cv::Mat colored = readImage(GetParam().second); ASSERT_FALSE(colored.empty()); cv::SoftCascade cascade; ASSERT_TRUE(cascade.load(getDataPath(GetParam().first))); std::vector rois, objectBoxes; cascade.detectMultiScale(colored, rois, objectBoxes); TEST_CYCLE() { cascade.detectMultiScale(colored, rois, objectBoxes); } } } /////////////////////////////////////////////////////////////// // HaarClassifier typedef pair pair_string; DEF_PARAM_TEST_1(ImageAndCascade, pair_string); PERF_TEST_P(ImageAndCascade, ObjDetect_HaarClassifier, Values(make_pair("gpu/haarcascade/group_1_640x480_VGA.pgm", "gpu/perf/haarcascade_frontalface_alt.xml"))) { cv::Mat img = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); if (PERF_RUN_GPU()) { cv::gpu::CascadeClassifier_GPU d_cascade; ASSERT_TRUE(d_cascade.load(perf::TestBase::getDataPath(GetParam().second))); cv::gpu::GpuMat d_img(img); cv::gpu::GpuMat d_objects_buffer; d_cascade.detectMultiScale(d_img, d_objects_buffer); TEST_CYCLE() { d_cascade.detectMultiScale(d_img, d_objects_buffer); } GPU_SANITY_CHECK(d_objects_buffer); } else { cv::CascadeClassifier cascade; ASSERT_TRUE(cascade.load(perf::TestBase::getDataPath("gpu/perf/haarcascade_frontalface_alt.xml"))); std::vector rects; cascade.detectMultiScale(img, rects); TEST_CYCLE() { cascade.detectMultiScale(img, rects); } CPU_SANITY_CHECK(rects); } } /////////////////////////////////////////////////////////////// // LBP cascade PERF_TEST_P(ImageAndCascade, ObjDetect_LBPClassifier, Values(make_pair("gpu/haarcascade/group_1_640x480_VGA.pgm", "gpu/lbpcascade/lbpcascade_frontalface.xml"))) { cv::Mat img = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); if (PERF_RUN_GPU()) { cv::gpu::CascadeClassifier_GPU d_cascade; ASSERT_TRUE(d_cascade.load(perf::TestBase::getDataPath(GetParam().second))); cv::gpu::GpuMat d_img(img); cv::gpu::GpuMat d_gpu_rects; d_cascade.detectMultiScale(d_img, d_gpu_rects); TEST_CYCLE() { d_cascade.detectMultiScale(d_img, d_gpu_rects); } GPU_SANITY_CHECK(d_gpu_rects); } else { cv::CascadeClassifier cascade; ASSERT_TRUE(cascade.load(perf::TestBase::getDataPath("gpu/lbpcascade/lbpcascade_frontalface.xml"))); std::vector rects; cascade.detectMultiScale(img, rects); TEST_CYCLE() { cascade.detectMultiScale(img, rects); } CPU_SANITY_CHECK(rects); } } } // namespace