こんにちは
前回のさんじゃらっと OSX + ruby でOpenCVの続きです。
ruby-opencvを使って画像から顔を認識して顔の部分だけを切り取ります。
スクリプトはこちらです。
face_detection.rb
require 'opencv'
include OpenCV
if ARGV.length < 1
puts "Usage: ruby #{__FILE__} source dest"
exit
end
data = './haarcascade_frontalface_alt.xml'
detector = CvHaarClassifierCascade::load(data)
image = IplImage.load(ARGV[0])
detector.detect_objects(image).each do |region|
color = CvColor::Blue
image.rectangle! region.top_left, region.bottom_right, :color => color #ここで顔に枠をつけるよ
image.set_roi(region) #ここでさらに顔の部分だけを切り取り
end
#image.save_image(ARGV[1])
window = GUI::Window.new('Face detection')
window.show(image)
GUI::wait_key
ただ、これを実行すると現時点では
error: (-2) The node does not represent a user object (unknown type?) in function cvRead (OpenCV::CvStsError)
こんなエラーが出ました。
cascade用のhaar-like-fatureのxmlの型が古いようです。
そこで最新のxmlをどこかからwgetとかしてきて使いました
例えばこんなん
wget https://raw.githubusercontent.com/bwkeller/warai/master/haarcascade_frontalface_alt.xml
ほんで、
ruby face_detection face.jpg
とかやると
が
こうなりました!
Stay Gold!