Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

rubyでopenCVを使う

rubyでも画像処理の定番ライブラリopenCVを使うことができます。

導入

まずopenCVがなければ導入します。

$ brew install opencv

次に、gem「ruby-opencv」を入れます。
導入時にライブラリのインストール先を指示する必要があります。
brewで導入した場合はログを見るとインストール先が出ているので、
それをwith-opencv-dirオプションの引数に指定します。

$ gem install ruby-opencv -- --with-opencv-dir=/usr/local/Cellar/opencv/2.4.9/

つかってみる

では、試しに顔認識アプリを走らせる環境をそろえてみます。
顔認識には標準添付のライブラリが必要なのでコピーしてきます。

$ mkdir -p ./data/haarcascades
$ cp /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml .//data/haarcascades/haarcascade_frontalface_alt.xml
$ touch test.rb

サンプルコードは公式そのまんまです。

# test.rb
require 'opencv'
include OpenCV

if ARGV.length < 2
  puts "Usage: ruby #{__FILE__} source dest"
  exit
end

data = './data/haarcascades/haarcascade_frontalface_alt.xml'
detector = CvHaarClassifierCascade::load(data)
image = CvMat.load(ARGV[0])
detector.detect_objects(image).each do |region|
  color = CvColor::Blue
  image.rectangle! region.top_left, region.bottom_right, :color => color
end

image.save_image(ARGV[1])
window = GUI::Window.new('Face detection')
window.show(image)
GUI::wait_key

あとは

$ ruby test.rb pic_with_face.jpg result.jpg

とやると、顔を青枠で囲んだ画面が出てきます。
画面を消すには、アクティブにして適当なキーを押せばよいです。