1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

tested CvHaarClassifierCascade

This commit is contained in:
ser1zw 2011-05-21 02:41:46 +09:00
parent eb7a797c26
commit d9b9a7629f
4 changed files with 61 additions and 11 deletions

View file

@ -52,6 +52,15 @@ rb_allocate(VALUE klass)
return OPENCV_OBJECT(klass, 0); return OPENCV_OBJECT(klass, 0);
} }
VALUE
cvhaarclassifiercascade_free(void* ptr)
{
if (ptr) {
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)ptr;
cvReleaseHaarClassifierCascade(&cascade);
}
}
/* /*
* call-seq: * call-seq:
* CvHaarClassiferCascade.load(<i>path</i>) -> object-detector * CvHaarClassiferCascade.load(<i>path</i>) -> object-detector
@ -71,14 +80,8 @@ rb_load(VALUE klass, VALUE path)
{ {
CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*)cvLoad(StringValueCStr(path), 0, 0, 0); CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*)cvLoad(StringValueCStr(path), 0, 0, 0);
if(!CV_IS_HAAR_CLASSIFIER(cascade)) if(!CV_IS_HAAR_CLASSIFIER(cascade))
rb_raise(rb_eTypeError, "invalid format haar classifier cascade file."); rb_raise(rb_eArgError, "invalid format haar classifier cascade file.");
return OPENCV_OBJECT(rb_klass, cascade); return Data_Wrap_Struct(klass, 0, cvhaarclassifiercascade_free, cascade);
}
VALUE
rb_save(VALUE self, VALUE path)
{
rb_raise(rb_eNotImpError, "");
} }
/* /*

View file

@ -23,15 +23,13 @@ VALUE rb_class();
void define_ruby_class(); void define_ruby_class();
VALUE rb_allocate(VALUE klass); VALUE rb_allocate(VALUE klass);
VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
VALUE rb_load(VALUE klass, VALUE path); VALUE rb_load(VALUE klass, VALUE path);
VALUE rb_save(VALUE self, VALUE name);
VALUE rb_detect_objects(int argc, VALUE *argv, VALUE self); VALUE rb_detect_objects(int argc, VALUE *argv, VALUE self);
VALUE rb_detect_objects_with_pruning(int argc, VALUE *argv, VALUE self); VALUE rb_detect_objects_with_pruning(int argc, VALUE *argv, VALUE self);
__NAMESPACE_END_CVHAARCLASSIFERCASCADE __NAMESPACE_END_CVHAARCLASSIFERCASCADE
inline CvHaarClassifierCascade *CVHAARCLASSIFIERCASCADE(VALUE object){ inline CvHaarClassifierCascade *CVHAARCLASSIFIERCASCADE(VALUE object) {
CvHaarClassifierCascade *ptr; CvHaarClassifierCascade *ptr;
Data_Get_Struct(object, CvHaarClassifierCascade, ptr); Data_Get_Struct(object, CvHaarClassifierCascade, ptr);
return ptr; return ptr;

Binary file not shown.

View file

@ -0,0 +1,49 @@
#!/usr/bin/env ruby
# -*- mode: ruby; coding: utf-8-unix -*-
require 'test/unit'
require 'opencv'
require File.expand_path(File.dirname(__FILE__)) + '/helper'
include OpenCV
# Tests for OpenCV::CvHaarClassifierCascade
class TestCvHaarClassifierCascade < OpenCVTestCase
FILENAME_LENA256x256 = File.expand_path(File.dirname(__FILE__)) + '/samples/lena-256x256.jpg'
HAARCASCADE_FRONTALFACE_ALT = File.expand_path(File.dirname(__FILE__)) + '/samples/haarcascade_frontalface_alt.xml.gz'
def setup
@cascade = CvHaarClassifierCascade.load(HAARCASCADE_FRONTALFACE_ALT)
end
def test_load
assert_equal(CvHaarClassifierCascade, @cascade.class)
assert_raise(ArgumentError) {
CvHaarClassifierCascade.load('not/exist.xml')
}
end
def test_detect_objects
img = CvMat.load(FILENAME_LENA256x256)
detected = @cascade.detect_objects(img)
assert_equal(CvSeq, detected.class)
assert_equal(1, detected.size)
assert_equal(CvAvgComp, detected[0].class)
assert_equal(106, detected[0].x)
assert_equal(100, detected[0].y)
assert_equal(89, detected[0].width)
assert_equal(89, detected[0].height)
assert_equal(48, detected[0].neighbors)
detected = @cascade.detect_objects(img) { |face|
assert_equal(106, face.x)
assert_equal(100, face.y)
assert_equal(89, face.width)
assert_equal(89, face.height)
assert_equal(48, face.neighbors)
}
assert_equal(CvSeq, detected.class)
assert_equal(1, detected.size)
assert_equal(CvAvgComp, detected[0].class)
end
end