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

add haarclassifier's legacy interface

This commit is contained in:
ser1zw 2016-04-10 18:52:55 +09:00
parent e145a847b2
commit 22ceeb045c
3 changed files with 85 additions and 0 deletions

View file

@ -2,3 +2,4 @@ require_relative "opencv/version"
require "opencv.so"
require_relative "opencv/basic_structs"
require_relative "opencv/cvmat"
require_relative "opencv/cvhaarclassifiercascade"

View file

@ -0,0 +1,15 @@
module Cv
CV_HAAR_DO_CANNY_PRUNING = 1
class CvHaarClassifierCascade < CascadeClassifier
def self.load(filename)
new(filename)
end
def detect_objects(image, options = {})
rects = detect_multi_scale(image, options)
rects.each { |rect| yield rect } if block_given?
rects
end
end
end

View file

@ -0,0 +1,69 @@
#!/usr/bin/env ruby
# -*- mode: ruby; coding: utf-8 -*-
require 'test/unit'
require 'opencv'
require File.expand_path(File.dirname(__FILE__)) + '/../helper'
include OpenCV
# Tests for OpenCV::CvHaarClassifierCascade
class TestCvHaarClassifierCascade < OpenCVTestCase
def setup
@cascade = CvHaarClassifierCascade.load(HAARCASCADE_FRONTALFACE_ALT)
end
def test_load
assert_equal(CvHaarClassifierCascade, @cascade.class)
assert_raise(TypeError) {
CvHaarClassifierCascade.load(DUMMY_OBJ)
}
end
def test_detect_objects
img = CvMat.load(FILENAME_LENA256x256)
detected = @cascade.detect_objects(img)
assert_equal(Array, detected.class)
assert_equal(1, detected.size)
assert_equal(Rect, detected[0].class)
assert_in_delta(100, detected[0].x, 20)
assert_in_delta(100, detected[0].y, 20)
assert_in_delta(85, detected[0].width, 20)
assert_in_delta(85, detected[0].height, 20)
detected = @cascade.detect_objects(img) { |face|
assert_in_delta(100, detected[0].x, 20)
assert_in_delta(100, detected[0].y, 20)
assert_in_delta(85, detected[0].width, 20)
assert_in_delta(85, detected[0].height, 20)
}
assert_equal(Array, detected.class)
assert_equal(1, detected.size)
assert_equal(Rect, detected[0].class)
detected = @cascade.detect_objects(img, :scale_factor => 2.0, :flags => CV_HAAR_DO_CANNY_PRUNING,
:min_neighbors => 5, :min_size => CvSize.new(10, 10),
:max_size => CvSize.new(100, 100))
assert_equal(Array, detected.class)
assert_equal(1, detected.size)
assert_equal(Rect, detected[0].class)
assert_in_delta(100, detected[0].x, 20)
assert_in_delta(100, detected[0].y, 20)
assert_in_delta(85, detected[0].width, 20)
assert_in_delta(85, detected[0].height, 20)
assert_raise(TypeError) {
@cascade.detect_objects(DUMMY_OBJ)
}
# Uncomment the following lines to show the result
#
# detected.each { |r|
# pt1 = Point.new(r.x, r.y)
# pt2 = Point.new(r.x + r.width, r.y + r.height)
# img.rectangle!(pt1, pt2, Scalar.new(0, 255, 255), thickness: 3, line_type: Cv::CV_AA)
# }
# snap(['Test', img])
end
end