OpenCVで顔認識しよ?

元はと言えば、Rubyで画像処理で何かおもしろそうなネタはないかなぁと探していた。どうやらwikipedia:OpenCVを使用した顔認識がRubyistの中で流行っていた*1らしい。早速試してみた。

まずRuby用のOpenCVライブラリobjectdetectを使って顔認識、wikipedia:ImageMagickライブラリRMagickで画像をいじる、というわけですな。

$sudo port install opencv
$sudo port install ImageMagick
$sudo gem install rmagick
$sudo gem install objectdetect

Macだとこんなところ。

ロックオンさんを参考に、下記のようにコーディング。

require 'rubygems'
require 'objectdetect'
require 'RMagick'

image = "Leah.jpg"
model = "/opt/local/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml"

d = ObjectDetect::detect(model, image)

pic = Magick::ImageList.new(image)
square = Magick::Draw.new
square.stroke('red')
square.fill_opacity(0.5)

d.each { |pos|
  x, y, w, h = pos
  square.polyline(x, y, x+w, y, x+w, y+h, x, y+h, x, y)
  square.draw(pic)
}  
  
pic.write('output.jpg')

それでは結果を見てみましょう。

Leah.jpg(元画像) output.jpg(結果)

おもしろいかも!これを使ったネタをちょっと考えておきます。はい。

*1:過去形