diff --git a/ext/opencv/cvhaarclassifiercascade.cpp b/ext/opencv/cvhaarclassifiercascade.cpp index 1bbb77f..ae24053 100644 --- a/ext/opencv/cvhaarclassifiercascade.cpp +++ b/ext/opencv/cvhaarclassifiercascade.cpp @@ -11,11 +11,7 @@ /* * Document-class: OpenCV::CvHaarClassifierCascade * - * CvHaarClassifierCascade object is "fast-object-detector". - * This detector can discover object (e.g. human's face) from image. - * - * Find face-area from picture "lena"... - * link:../images/face_detect_from_lena.jpg + * Haar Feature-based Cascade Classifier for Object Detection */ __NAMESPACE_BEGIN_OPENCV __NAMESPACE_BEGIN_CVHAARCLASSIFERCASCADE @@ -28,23 +24,6 @@ rb_class() return rb_klass; } -void define_ruby_class() -{ - if (rb_klass) - return; - /* - * opencv = rb_define_module("OpenCV"); - * - * note: this comment is used by rdoc. - */ - VALUE opencv = rb_module_opencv(); - - rb_klass = rb_define_class_under(opencv, "CvHaarClassifierCascade", rb_cObject); - rb_define_alloc_func(rb_klass, rb_allocate); - rb_define_singleton_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load), 1); - rb_define_method(rb_klass, "detect_objects", RUBY_METHOD_FUNC(rb_detect_objects), -1); -} - VALUE rb_allocate(VALUE klass) { @@ -61,18 +40,13 @@ cvhaarclassifiercascade_free(void* ptr) } /* - * call-seq: - * CvHaarClassiferCascade.load(path) -> object-detector - * * Load trained cascade of haar classifers from file. - * Object detection classifiers are stored in XML or YAML files. - * sample of object detection classifier files is included by OpenCV. * - * You can found these at - * C:\Program Files\OpenCV\data\haarcascades\*.xml (Windows, default install path) - * - * e.g. you want to try to detect human's face. - * detector = CvHaarClassiferCascade.load("haarcascade_frontalface_alt.xml") + * @overload load(filename) + * @param filename [String] Haar classifer file name + * @return [CvHaarClassifierCascade] Object detector + * @scope class + * @opencv_func cvLoad */ VALUE rb_load(VALUE klass, VALUE path) @@ -90,35 +64,23 @@ rb_load(VALUE klass, VALUE path) } /* - * call-seq: - * detect_objects(image[, options]) -> cvseq(include CvAvgComp object) - * detect_objects(image[, options]){|cmp| ... } -> cvseq(include CvAvgComp object) + * Detects objects of different sizes in the input image. * - * Detects objects in the image. This method finds rectangular regions in the - * given image that are likely to contain objects the cascade has been trained - * for and return those regions as a sequence of rectangles. - * - * * option should be Hash include these keys. - * :scale_factor (should be > 1.0) - * The factor by which the search window is scaled between the subsequent scans, - * 1.1 mean increasing window by 10%. - * :storage + * @overload detect_objects(image, options = nil) + * @param image [CvMat,IplImage] Matrix of the type CV_8U containing an image where objects are detected. + * @param options [Hash] Options + * @option options [Number] :scale_factor + * Parameter specifying how much the image size is reduced at each image scale. + * @option options [Number] :storage * Memory storage to store the resultant sequence of the object candidate rectangles - * :flags - * Mode of operation. Currently the only flag that may be specified is CV_HAAR_DO_CANNY_PRUNING . - * If it is set, the function uses Canny edge detector to reject some image regions that contain - * too few or too much edges and thus can not contain the searched object. The particular threshold - * values are tuned for face detection and in this case the pruning speeds up the processing - * :min_neighbors - * Minimum number (minus 1) of neighbor rectangles that makes up an object. - * All the groups of a smaller number of rectangles than min_neighbors - 1 are rejected. - * If min_neighbors is 0, the function does not any grouping at all and returns all the detected - * candidate rectangles, whitch many be useful if the user wants to apply a customized grouping procedure. - * :min_size - * Minimum window size. By default, it is set to size of samples the classifier has been - * trained on (~20x20 for face detection). - * :max_size - * aximum window size to use. By default, it is set to the size of the image. + * @option options [Number] :min_neighbors + * Parameter specifying how many neighbors each candidate rectangle should have to retain it. + * @option options [CvSize] :min_size + * Minimum possible object size. Objects smaller than that are ignored. + * @option options [CvSize] :max_size + * Maximum possible object size. Objects larger than that are ignored. + * @return [CvSeq] Detected objects as a list of rectangles + * @opencv_func cvHaarDetectObjects */ VALUE rb_detect_objects(int argc, VALUE *argv, VALUE self) @@ -164,5 +126,23 @@ rb_detect_objects(int argc, VALUE *argv, VALUE self) return result; } +void +init_ruby_class() +{ +#if 0 + // For documentation using YARD + VALUE opencv = rb_define_module("OpenCV"); +#endif + + if (rb_klass) + return; + + VALUE opencv = rb_module_opencv(); + rb_klass = rb_define_class_under(opencv, "CvHaarClassifierCascade", rb_cObject); + rb_define_alloc_func(rb_klass, rb_allocate); + rb_define_singleton_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load), 1); + rb_define_method(rb_klass, "detect_objects", RUBY_METHOD_FUNC(rb_detect_objects), -1); +} + __NAMESPACE_END_CVHAARCLASSIFERCASCADE __NAMESPACE_END_OPENCV diff --git a/ext/opencv/cvhaarclassifiercascade.h b/ext/opencv/cvhaarclassifiercascade.h index a167556..17e504c 100644 --- a/ext/opencv/cvhaarclassifiercascade.h +++ b/ext/opencv/cvhaarclassifiercascade.h @@ -20,7 +20,7 @@ __NAMESPACE_BEGIN_CVHAARCLASSIFERCASCADE VALUE rb_class(); -void define_ruby_class(); +void init_ruby_class(); VALUE rb_allocate(VALUE klass); diff --git a/ext/opencv/opencv.cpp b/ext/opencv/opencv.cpp index 28e9086..aac8cfc 100644 --- a/ext/opencv/opencv.cpp +++ b/ext/opencv/opencv.cpp @@ -711,7 +711,7 @@ extern "C" { mOpenCV::cCvConnectedComp::init_ruby_class(); mOpenCV::cCvAvgComp::init_ruby_class(); - mOpenCV::cCvHaarClassifierCascade::define_ruby_class(); + mOpenCV::cCvHaarClassifierCascade::init_ruby_class(); mOpenCV::mGUI::define_ruby_module(); mOpenCV::mGUI::cWindow::define_ruby_class(); mOpenCV::mGUI::cTrackbar::define_ruby_class(); diff --git a/images/face_detect_from_lena.jpg b/images/face_detect_from_lena.jpg deleted file mode 100644 index eabd54e..0000000 Binary files a/images/face_detect_from_lena.jpg and /dev/null differ