Commit 56c1a7fa authored by yao's avatar yao Committed by Andrey Kamaev

make oclHaarDetectObjects running on more ocl platforms

parent b5bd2cde
...@@ -63,13 +63,13 @@ using namespace std; ...@@ -63,13 +63,13 @@ using namespace std;
namespace cv namespace cv
{ {
namespace ocl namespace ocl
{ {
///////////////////////////OpenCL kernel strings/////////////////////////// ///////////////////////////OpenCL kernel strings///////////////////////////
extern const char *haarobjectdetect; extern const char *haarobjectdetect;
extern const char *haarobjectdetectbackup; extern const char *haarobjectdetectbackup;
extern const char *haarobjectdetect_scaled2; extern const char *haarobjectdetect_scaled2;
} }
} }
/* these settings affect the quality of detection: change with care */ /* these settings affect the quality of detection: change with care */
...@@ -883,13 +883,6 @@ CvSeq *cv::ocl::OclCascadeClassifier::oclHaarDetectObjects( oclMat &gimg, CvMemS ...@@ -883,13 +883,6 @@ CvSeq *cv::ocl::OclCascadeClassifier::oclHaarDetectObjects( oclMat &gimg, CvMemS
bool findBiggestObject = (flags & CV_HAAR_FIND_BIGGEST_OBJECT) != 0; bool findBiggestObject = (flags & CV_HAAR_FIND_BIGGEST_OBJECT) != 0;
// bool roughSearch = (flags & CV_HAAR_DO_ROUGH_SEARCH) != 0; // bool roughSearch = (flags & CV_HAAR_DO_ROUGH_SEARCH) != 0;
//the Intel HD Graphics is unsupported
if (gimg.clCxt->impl->devName.find("Intel(R) HD Graphics") != string::npos)
{
cout << " Intel HD GPU device unsupported " << endl;
return NULL;
}
//double t = 0; //double t = 0;
if( maxSize.height == 0 || maxSize.width == 0 ) if( maxSize.height == 0 || maxSize.width == 0 )
{ {
...@@ -937,7 +930,7 @@ CvSeq *cv::ocl::OclCascadeClassifier::oclHaarDetectObjects( oclMat &gimg, CvMemS ...@@ -937,7 +930,7 @@ CvSeq *cv::ocl::OclCascadeClassifier::oclHaarDetectObjects( oclMat &gimg, CvMemS
if( gimg.cols < minSize.width || gimg.rows < minSize.height ) if( gimg.cols < minSize.width || gimg.rows < minSize.height )
CV_Error(CV_StsError, "Image too small"); CV_Error(CV_StsError, "Image too small");
if( flags & CV_HAAR_SCALE_IMAGE ) if( (flags & CV_HAAR_SCALE_IMAGE) && gimg.clCxt->impl->devName.find("Intel(R) HD Graphics") == string::npos )
{ {
CvSize winSize0 = cascade->orig_window_size; CvSize winSize0 = cascade->orig_window_size;
//float scalefactor = 1.1f; //float scalefactor = 1.1f;
...@@ -2170,41 +2163,41 @@ CvType haar_type( CV_TYPE_NAME_HAAR, gpuIsHaarClassifier, ...@@ -2170,41 +2163,41 @@ CvType haar_type( CV_TYPE_NAME_HAAR, gpuIsHaarClassifier,
namespace cv namespace cv
{ {
HaarClassifierCascade::HaarClassifierCascade() {} HaarClassifierCascade::HaarClassifierCascade() {}
HaarClassifierCascade::HaarClassifierCascade(const String &filename) HaarClassifierCascade::HaarClassifierCascade(const String &filename)
{ {
load(filename); load(filename);
} }
bool HaarClassifierCascade::load(const String &filename) bool HaarClassifierCascade::load(const String &filename)
{ {
cascade = Ptr<CvHaarClassifierCascade>((CvHaarClassifierCascade *)cvLoad(filename.c_str(), 0, 0, 0)); cascade = Ptr<CvHaarClassifierCascade>((CvHaarClassifierCascade *)cvLoad(filename.c_str(), 0, 0, 0));
return (CvHaarClassifierCascade *)cascade != 0; return (CvHaarClassifierCascade *)cascade != 0;
} }
void HaarClassifierCascade::detectMultiScale( const Mat &image, void HaarClassifierCascade::detectMultiScale( const Mat &image,
Vector<Rect> &objects, double scaleFactor, Vector<Rect> &objects, double scaleFactor,
int minNeighbors, int flags, int minNeighbors, int flags,
Size minSize ) Size minSize )
{ {
MemStorage storage(cvCreateMemStorage(0)); MemStorage storage(cvCreateMemStorage(0));
CvMat _image = image; CvMat _image = image;
CvSeq *_objects = gpuHaarDetectObjects( &_image, cascade, storage, scaleFactor, CvSeq *_objects = gpuHaarDetectObjects( &_image, cascade, storage, scaleFactor,
minNeighbors, flags, minSize ); minNeighbors, flags, minSize );
Seq<Rect>(_objects).copyTo(objects); Seq<Rect>(_objects).copyTo(objects);
} }
int HaarClassifierCascade::runAt(Point pt, int startStage, int) const int HaarClassifierCascade::runAt(Point pt, int startStage, int) const
{ {
return gpuRunHaarClassifierCascade(cascade, pt, startStage); return gpuRunHaarClassifierCascade(cascade, pt, startStage);
} }
void HaarClassifierCascade::setImages( const Mat &sum, const Mat &sqsum, void HaarClassifierCascade::setImages( const Mat &sum, const Mat &sqsum,
const Mat &tilted, double scale ) const Mat &tilted, double scale )
{ {
CvMat _sum = sum, _sqsum = sqsum, _tilted = tilted; CvMat _sum = sum, _sqsum = sqsum, _tilted = tilted;
gpuSetImagesForHaarClassifierCascade( cascade, &_sum, &_sqsum, &_tilted, scale ); gpuSetImagesForHaarClassifierCascade( cascade, &_sum, &_sqsum, &_tilted, scale );
} }
} }
#endif #endif
...@@ -2579,11 +2572,11 @@ CvPoint pt, int start_stage */) ...@@ -2579,11 +2572,11 @@ CvPoint pt, int start_stage */)
namespace cv namespace cv
{ {
namespace ocl namespace ocl
{ {
struct gpuHaarDetectObjects_ScaleImage_Invoker struct gpuHaarDetectObjects_ScaleImage_Invoker
{ {
gpuHaarDetectObjects_ScaleImage_Invoker( const CvHaarClassifierCascade *_cascade, gpuHaarDetectObjects_ScaleImage_Invoker( const CvHaarClassifierCascade *_cascade,
int _stripSize, double _factor, int _stripSize, double _factor,
const Mat &_sum1, const Mat &_sqsum1, Mat *_norm1, const Mat &_sum1, const Mat &_sqsum1, Mat *_norm1,
...@@ -2623,11 +2616,11 @@ namespace cv ...@@ -2623,11 +2616,11 @@ namespace cv
Mat sum1, sqsum1, *norm1, *mask1; Mat sum1, sqsum1, *norm1, *mask1;
Rect equRect; Rect equRect;
ConcurrentRectVector *vec; ConcurrentRectVector *vec;
}; };
struct gpuHaarDetectObjects_ScaleCascade_Invoker struct gpuHaarDetectObjects_ScaleCascade_Invoker
{ {
gpuHaarDetectObjects_ScaleCascade_Invoker( const CvHaarClassifierCascade *_cascade, gpuHaarDetectObjects_ScaleCascade_Invoker( const CvHaarClassifierCascade *_cascade,
Size _winsize, const Range &_xrange, double _ystep, Size _winsize, const Range &_xrange, double _ystep,
size_t _sumstep, const int **_p, const int **_pq, size_t _sumstep, const int **_p, const int **_pq,
...@@ -2686,9 +2679,9 @@ namespace cv ...@@ -2686,9 +2679,9 @@ namespace cv
const int **p; const int **p;
const int **pq; const int **pq;
ConcurrentRectVector *vec; ConcurrentRectVector *vec;
}; };
} }
} }
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment