Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

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