fixed brocken tests by classifier loger from r9027

This commit is contained in:
Marina Kolpakova 2012-07-15 04:11:46 +00:00
parent e4e00498a8
commit 336dcbcff7
3 changed files with 69 additions and 58 deletions

View File

@ -97,13 +97,15 @@ void cv::gpu::CascadeClassifier_GPU_LBP::allocateBuffers(cv::Size frame)
Ncv32u bufSize; Ncv32u bufSize;
ncvSafeCall( nppiStIntegralGetSize_8u32u(roiSize, &bufSize, prop) ); ncvSafeCall( nppiStIntegralGetSize_8u32u(roiSize, &bufSize, prop) );
integralBuffer.create(1, bufSize, CV_8UC1); 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(); } bool cv::gpu::CascadeClassifier_GPU_LBP::empty() const
Size cv::gpu::CascadeClassifier_GPU_LBP::getClassifierSize() const { return NxM; } {
return stage_mat.empty();
}
bool cv::gpu::CascadeClassifier_GPU_LBP::load(const string& classifierAsXml) 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 else
objects.create(1 , image.cols >> 4, CV_32SC4); objects.create(1 , image.cols >> 4, CV_32SC4);
// GpuMat candidates(1 , defaultObjSearchNum, CV_32SC4);
// used for debug // used for debug
// candidates.setTo(cv::Scalar::all(0)); // candidates.setTo(cv::Scalar::all(0));
// objects.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); GpuMat dclassified(1, 1, CV_32S);
cudaSafeCall( cudaMemcpy(dclassified.ptr(), &classified, sizeof(int), cudaMemcpyHostToDevice) ); cudaSafeCall( cudaMemcpy(dclassified.ptr(), &classified, sizeof(int), cudaMemcpyHostToDevice) );
//int step = 2;
// cv::gpu::device::lbp::bindIntegral(integral); // cv::gpu::device::lbp::bindIntegral(integral);
Size scaledImageSize(image.cols, image.rows); Size scaledImageSize(image.cols, image.rows);

View File

@ -357,11 +357,15 @@ TEST_P(LBP_classify, Accuracy)
{ {
cv::Rect r = faces[i]; cv::Rect r = faces[i];
#if defined (LOG_CASCADE_STATISTIC)
std::cout << r.x << " " << r.y << " " << r.width << " " << r.height << std::endl; std::cout << r.x << " " << r.y << " " << r.width << " " << r.height << std::endl;
#endif
cv::rectangle(markedImage, r , CV_RGB(255, 0, 0)); cv::rectangle(markedImage, r , CV_RGB(255, 0, 0));
} }
#if defined (LOG_CASCADE_STATISTIC)
cv::imshow("Res", markedImage); cv::waitKey(); cv::imshow("Res", markedImage); cv::waitKey();
#endif
} }
INSTANTIATE_TEST_CASE_P(GPU_ObjDetect, LBP_classify, INSTANTIATE_TEST_CASE_P(GPU_ObjDetect, LBP_classify,

View File

@ -49,64 +49,64 @@
struct Logger struct Logger
{ {
enum { STADIES_NUM = 20 }; enum { STADIES_NUM = 20 };
int gid; int gid;
cv::Mat mask; cv::Mat mask;
cv::Size sz0; cv::Size sz0;
int step; int step;
Logger() : gid (0), step(2) {} Logger() : gid (0), step(2) {}
void setImage(const cv::Mat& image) void setImage(const cv::Mat& image)
{ {
if (gid == 0) if (gid == 0)
sz0 = image.size(); sz0 = image.size();
mask.create(image.rows, image.cols * (STADIES_NUM + 1) + STADIES_NUM, CV_8UC1); mask.create(image.rows, image.cols * (STADIES_NUM + 1) + STADIES_NUM, CV_8UC1);
mask = cv::Scalar(0); mask = cv::Scalar(0);
cv::Mat roi = mask(cv::Rect(cv::Point(0,0), image.size())); cv::Mat roi = mask(cv::Rect(cv::Point(0,0), image.size()));
image.copyTo(roi); 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) for(int i = 0; i < STADIES_NUM; ++i)
{ {
int x = image.cols + i * (image.cols + 1); int x = image.cols + i * (image.cols + 1);
cv::line(mask, cv::Point(x, 0), cv::Point(x, mask.rows-1), cv::Scalar(255)); 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) if (sz0.width/image.cols > 2 && sz0.height/image.rows > 2)
step = 1; step = 1;
} }
void setPoint(const cv::Point& p, int passed_stadies) void setPoint(const cv::Point& p, int passed_stadies)
{ {
int cols = mask.cols / (STADIES_NUM + 1); int cols = mask.cols / (STADIES_NUM + 1);
passed_stadies = -passed_stadies; passed_stadies = -passed_stadies;
passed_stadies = (passed_stadies == -1) ? STADIES_NUM : passed_stadies; passed_stadies = (passed_stadies == -1) ? STADIES_NUM : passed_stadies;
unsigned char* ptr = mask.ptr<unsigned char>(p.y) + cols + 1 + p.x; unsigned char* ptr = mask.ptr<unsigned char>(p.y) + cols + 1 + p.x;
for(int i = 0; i < passed_stadies; ++i, ptr += cols + 1) for(int i = 0; i < passed_stadies; ++i, ptr += cols + 1)
{ {
*ptr = 255; *ptr = 255;
if (step == 2) if (step == 2)
{ {
ptr[1] = 255; ptr[1] = 255;
ptr[mask.step] = 255; ptr[mask.step] = 255;
ptr[mask.step + 1] = 255; ptr[mask.step + 1] = 255;
} }
} }
}; };
void write() void write()
{ {
char buf[4096]; char buf[4096];
sprintf(buf, "%04d.png", gid++); sprintf(buf, "%04d.png", gid++);
cv::imwrite(buf, mask); cv::imwrite(buf, mask);
} }
} logger; } logger;
@ -978,7 +978,10 @@ struct CascadeClassifierInvoker
double gypWeight; double gypWeight;
int result = classifier->runAt(evaluator, Point(x, y), 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( rejectLevels )
{ {
if( result == 1 ) if( result == 1 )
@ -1019,8 +1022,9 @@ bool CascadeClassifier::detectSingleScale( const Mat& image, int stripCount, Siz
if( !featureEvaluator->setImage( image, data.origWinSize ) ) if( !featureEvaluator->setImage( image, data.origWinSize ) )
return false; return false;
#if defined (LOG_CASCADE_STATISTIC)
logger.setImage(image); logger.setImage(image);
#endif
Mat currentMask; Mat currentMask;
if (!maskGenerator.empty()) { if (!maskGenerator.empty()) {
@ -1044,7 +1048,10 @@ bool CascadeClassifier::detectSingleScale( const Mat& image, int stripCount, Siz
} }
candidates.insert( candidates.end(), concurrentCandidates.begin(), concurrentCandidates.end() ); candidates.insert( candidates.end(), concurrentCandidates.begin(), concurrentCandidates.end() );
logger.write(); #if defined (LOG_CASCADE_STATISTIC)
logger.write();
#endif
return true; return true;
} }