Ruby × OpenCVで顔認識した画像をポラロイド風に加工してみた

こちらの記事を参考にさせていただきましたー。
まずは、Ubuntu10.10にOpenCVをインストール

$ sudo apt-get install libcv-dev libcv2.1 libcvaux-dev libcvaux2.1 libhighgui-dev libhighgui2.1 opencv-doc
$ cd /usr/share/doc/opencv-doc/examples/haarcascades/haarcascades/

# 顔画像を識別する為のパターンファイルを解凍
$ gzip -d haarcascade_frontalface_alt2.xml.gz

# /usr/share/opencv/haarcascades/にコピー
$ sudo cp haarcascade_frontalface_alt2.xml /usr/share/opencv/haarcascades/

RMagickをインストールする際に必要なライブラリをインストール

sudo apt-get install libmagick++-dev

必要なgemをインストール

$ sudo gem install rmagick
$ sudo gem install objectdetect

objectdetect
gem objectdetect を公開しました - dara日記


実装は参考サイトとほぼ一緒ですが...

require 'rubygems'
require 'RMagick'
require 'objectdetect'
               
model = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml"
file = "/home/t-taira/images/photo.jpg"

# 顔認識               
faces = ObjectDetect::detect(model, file)
original = Magick::ImageList.new(file)
new_image = Magick::ImageList.new()
               
faces.each do |position|
  x, y, width, height = position
  face = original.crop(x, y, width, height)
  new_image << face
end
               
new_image.write('/home/t-taira/images/face.jpg')
  
# ポラロイド加工する             
clown = Magick::Image.read("output.jpg").first
cols, rows = clown.columns, clown.rows
               
clown[:caption] = "Taylor Swift"
clown = clown.polaroid { self.gravity = Magick::CenterGravity }
               
clown.change_geometry!("#{cols}x#{rows}") do |ncols, nrows, img|
  img.resize!(ncols, nrows)
end
               
clown.write('/home/t-taira/images/polaroid.png')


出来上がりはこんな感じです。

photo.jpg face.jpg polaroid.png
f:id:t-taira:20101204050019j:image:w110 f:id:t-taira:20101204050020j:image:w100 f:id:t-taira:20101204050021p:image