From 336dcbcff7526a3074c10e1e8b9bdfebaec49397 Mon Sep 17 00:00:00 2001 From: Marina Kolpakova Date: Sun, 15 Jul 2012 04:11:46 +0000 Subject: [PATCH] fixed brocken tests by classifier loger from r9027 --- modules/gpu/src/cascadeclassifier.cpp | 12 +-- modules/gpu/test/test_objdetect.cpp | 6 +- modules/objdetect/src/cascadedetect.cpp | 109 +++++++++++++----------- 3 files changed, 69 insertions(+), 58 deletions(-) diff --git a/modules/gpu/src/cascadeclassifier.cpp b/modules/gpu/src/cascadeclassifier.cpp index fd99db34c1..644ce6e5c9 100644 --- a/modules/gpu/src/cascadeclassifier.cpp +++ b/modules/gpu/src/cascadeclassifier.cpp @@ -97,13 +97,15 @@ void cv::gpu::CascadeClassifier_GPU_LBP::allocateBuffers(cv::Size frame) Ncv32u bufSize; ncvSafeCall( nppiStIntegralGetSize_8u32u(roiSize, &bufSize, prop) ); integralBuffer.create(1, bufSize, CV_8UC1); - } - candidates.create(1 , frame.width >> 1, CV_32SC4); + candidates.create(1 , frame.width >> 1, CV_32SC4); + } } -bool cv::gpu::CascadeClassifier_GPU_LBP::empty() const { return stage_mat.empty(); } -Size cv::gpu::CascadeClassifier_GPU_LBP::getClassifierSize() const { return NxM; } +bool cv::gpu::CascadeClassifier_GPU_LBP::empty() const +{ + return stage_mat.empty(); +} bool cv::gpu::CascadeClassifier_GPU_LBP::load(const string& classifierAsXml) { @@ -301,7 +303,6 @@ int cv::gpu::CascadeClassifier_GPU_LBP::detectMultiScale(const GpuMat& image, Gp else objects.create(1 , image.cols >> 4, CV_32SC4); - // GpuMat candidates(1 , defaultObjSearchNum, CV_32SC4); // used for debug // candidates.setTo(cv::Scalar::all(0)); // objects.setTo(cv::Scalar::all(0)); @@ -314,7 +315,6 @@ int cv::gpu::CascadeClassifier_GPU_LBP::detectMultiScale(const GpuMat& image, Gp GpuMat dclassified(1, 1, CV_32S); cudaSafeCall( cudaMemcpy(dclassified.ptr(), &classified, sizeof(int), cudaMemcpyHostToDevice) ); - //int step = 2; // cv::gpu::device::lbp::bindIntegral(integral); Size scaledImageSize(image.cols, image.rows); diff --git a/modules/gpu/test/test_objdetect.cpp b/modules/gpu/test/test_objdetect.cpp index fbd45bcc33..a7db7667be 100644 --- a/modules/gpu/test/test_objdetect.cpp +++ b/modules/gpu/test/test_objdetect.cpp @@ -357,14 +357,18 @@ TEST_P(LBP_classify, Accuracy) { cv::Rect r = faces[i]; +#if defined (LOG_CASCADE_STATISTIC) std::cout << r.x << " " << r.y << " " << r.width << " " << r.height << std::endl; +#endif cv::rectangle(markedImage, r , CV_RGB(255, 0, 0)); } +#if defined (LOG_CASCADE_STATISTIC) cv::imshow("Res", markedImage); cv::waitKey(); +#endif } -INSTANTIATE_TEST_CASE_P(GPU_ObjDetect, LBP_classify, +INSTANTIATE_TEST_CASE_P(GPU_ObjDetect, LBP_classify, testing::Combine(ALL_DEVICES, testing::Values(0))); } // namespace diff --git a/modules/objdetect/src/cascadedetect.cpp b/modules/objdetect/src/cascadedetect.cpp index e7bcac071c..1edf49d564 100644 --- a/modules/objdetect/src/cascadedetect.cpp +++ b/modules/objdetect/src/cascadedetect.cpp @@ -49,64 +49,64 @@ struct Logger { - enum { STADIES_NUM = 20 }; + enum { STADIES_NUM = 20 }; - int gid; - cv::Mat mask; - cv::Size sz0; - int step; - + int gid; + cv::Mat mask; + cv::Size sz0; + int step; - Logger() : gid (0), step(2) {} - void setImage(const cv::Mat& image) - { + + Logger() : gid (0), step(2) {} + void setImage(const cv::Mat& image) + { if (gid == 0) - sz0 = image.size(); + sz0 = image.size(); - mask.create(image.rows, image.cols * (STADIES_NUM + 1) + STADIES_NUM, CV_8UC1); - mask = cv::Scalar(0); - cv::Mat roi = mask(cv::Rect(cv::Point(0,0), image.size())); - image.copyTo(roi); + mask.create(image.rows, image.cols * (STADIES_NUM + 1) + STADIES_NUM, CV_8UC1); + mask = cv::Scalar(0); + cv::Mat roi = mask(cv::Rect(cv::Point(0,0), image.size())); + image.copyTo(roi); - printf("%d) Size = (%d, %d)\n", gid, image.cols, image.rows); + printf("%d) Size = (%d, %d)\n", gid, image.cols, image.rows); - for(int i = 0; i < STADIES_NUM; ++i) - { - int x = image.cols + i * (image.cols + 1); - cv::line(mask, cv::Point(x, 0), cv::Point(x, mask.rows-1), cv::Scalar(255)); - } + for(int i = 0; i < STADIES_NUM; ++i) + { + int x = image.cols + i * (image.cols + 1); + cv::line(mask, cv::Point(x, 0), cv::Point(x, mask.rows-1), cv::Scalar(255)); + } - if (sz0.width/image.cols > 2 && sz0.height/image.rows > 2) - step = 1; - } + if (sz0.width/image.cols > 2 && sz0.height/image.rows > 2) + step = 1; + } - void setPoint(const cv::Point& p, int passed_stadies) - { - int cols = mask.cols / (STADIES_NUM + 1); + void setPoint(const cv::Point& p, int passed_stadies) + { + int cols = mask.cols / (STADIES_NUM + 1); - passed_stadies = -passed_stadies; - passed_stadies = (passed_stadies == -1) ? STADIES_NUM : passed_stadies; - - unsigned char* ptr = mask.ptr(p.y) + cols + 1 + p.x; - for(int i = 0; i < passed_stadies; ++i, ptr += cols + 1) - { - *ptr = 255; + passed_stadies = -passed_stadies; + passed_stadies = (passed_stadies == -1) ? STADIES_NUM : passed_stadies; - if (step == 2) - { - ptr[1] = 255; - ptr[mask.step] = 255; - ptr[mask.step + 1] = 255; - } - } - }; + unsigned char* ptr = mask.ptr(p.y) + cols + 1 + p.x; + for(int i = 0; i < passed_stadies; ++i, ptr += cols + 1) + { + *ptr = 255; - void write() - { - char buf[4096]; - sprintf(buf, "%04d.png", gid++); - cv::imwrite(buf, mask); - } + if (step == 2) + { + ptr[1] = 255; + ptr[mask.step] = 255; + ptr[mask.step + 1] = 255; + } + } + }; + + void write() + { + char buf[4096]; + sprintf(buf, "%04d.png", gid++); + cv::imwrite(buf, mask); + } } logger; @@ -978,7 +978,10 @@ struct CascadeClassifierInvoker double gypWeight; int result = classifier->runAt(evaluator, Point(x, y), gypWeight); - logger.setPoint(Point(x, y), result); +#if defined (LOG_CASCADE_STATISTIC) + + logger.setPoint(Point(x, y), result); +#endif if( rejectLevels ) { if( result == 1 ) @@ -1019,8 +1022,9 @@ bool CascadeClassifier::detectSingleScale( const Mat& image, int stripCount, Siz if( !featureEvaluator->setImage( image, data.origWinSize ) ) return false; +#if defined (LOG_CASCADE_STATISTIC) logger.setImage(image); - +#endif Mat currentMask; if (!maskGenerator.empty()) { @@ -1044,8 +1048,11 @@ bool CascadeClassifier::detectSingleScale( const Mat& image, int stripCount, Siz } candidates.insert( candidates.end(), concurrentCandidates.begin(), concurrentCandidates.end() ); - logger.write(); - return true; +#if defined (LOG_CASCADE_STATISTIC) + logger.write(); +#endif + + return true; } bool CascadeClassifier::isOldFormatCascade() const