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);
|
||||
}
|
||||
|
||||
VALUE
|
||||
cvhaarclassifiercascade_free(void* ptr)
|
||||
{
|
||||
if (ptr) {
|
||||
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)ptr;
|
||||
cvReleaseHaarClassifierCascade(&cascade);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* 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);
|
||||
if(!CV_IS_HAAR_CLASSIFIER(cascade))
|
||||
rb_raise(rb_eTypeError, "invalid format haar classifier cascade file.");
|
||||
return OPENCV_OBJECT(rb_klass, cascade);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_save(VALUE self, VALUE path)
|
||||
{
|
||||
rb_raise(rb_eNotImpError, "");
|
||||
rb_raise(rb_eArgError, "invalid format haar classifier cascade file.");
|
||||
return Data_Wrap_Struct(klass, 0, cvhaarclassifiercascade_free, cascade);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -23,10 +23,8 @@ VALUE rb_class();
|
|||
void define_ruby_class();
|
||||
|
||||
VALUE rb_allocate(VALUE klass);
|
||||
VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
|
||||
|
||||
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_with_pruning(int argc, VALUE *argv, VALUE self);
|
||||
|
||||
|
|
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