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 |
---|---|---|