さんじゃらっと ruby + OpenCV で顔認識してトリミングするお


こんにちは

前回のさんじゃらっと 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!