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:
parent
eb7a797c26
commit
d9b9a7629f
4 changed files with 61 additions and 11 deletions
|
@ -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, "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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;
|
||||||
|
|
BIN
test/samples/haarcascade_frontalface_alt.xml.gz
Normal file
BIN
test/samples/haarcascade_frontalface_alt.xml.gz
Normal file
Binary file not shown.
49
test/test_cvhaarclassifiercascade.rb
Executable file
49
test/test_cvhaarclassifiercascade.rb
Executable 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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue