Ask Your Question

Nixer's profile - activity

2013-12-20 10:07:30 -0600 received badge  Self-Learner (source)
2013-12-20 09:44:00 -0600 answered a question CascadeClassifier_GPU NCV Assertion Failed

I found out what was happening. When I passed empty objsGPU to detectMultiScale than it will allocate place for 100 detections:

const int defaultObjSearchNum = 100;
if (objectsBuf.empty())
{
    objectsBuf.create(1, defaultObjSearchNum, DataType<Rect>::type);
}

And further if number of detection more than allocated then assertion described above happens. So if I allocate memory for detections

objsGPU.create(1, 10000, cv::DataType<cv::Rect>::type);

everything will work

2013-12-18 09:33:59 -0600 asked a question CascadeClassifier_GPU NCV Assertion Failed

Hello, I'm trying to use Haar cascade classifier on GPU

gpu::CascadeClassifier_GPU ccG;
if (ccG.load(cascadeFileName))
{
    printf("Loaded\n");
}
gpu::GpuMat imGPU, objsGPU;
imGPU.upload(im);
int detections_number = ccG.detectMultiScale(imGPU, objsGPU, 1.05, 0, cv::Size(32, 32));

CascadeClassifier_GPU loads from file, but I have an exception on detectMultiScale.

OpenCV Error: Gpu API call (NCV Assertion Failed: NcvStat=28, file=......\modules\gpu\src\cascadeclassifier.cpp, line=117) in unknown function, file ......\modules\gpu\src\cascadeclassifier.cpp, line 131

As I can understand 28 means NCV_WARNING_HAAR_DETECTIONS_VECTOR_OVERFLOW. Does it mean that I can't use my cascade file to run detection on GPU.

P.S. CPU CascadeDetector can do detectMultiScale.