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:
parent
e145a847b2
commit
22ceeb045c
3 changed files with 85 additions and 0 deletions
|
@ -2,3 +2,4 @@ require_relative "opencv/version"
|
|||
require "opencv.so"
|
||||
require_relative "opencv/basic_structs"
|
||||
require_relative "opencv/cvmat"
|
||||
require_relative "opencv/cvhaarclassifiercascade"
|
||||
|
|
15
lib/opencv/cvhaarclassifiercascade.rb
Normal file
15
lib/opencv/cvhaarclassifiercascade.rb
Normal 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
|
69
test/legacy/test_cvhaarclassifiercascade.rb
Executable file
69
test/legacy/test_cvhaarclassifiercascade.rb
Executable 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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue