Imager::AnimeFaceをRubyから使えるようにしました
Perlでアニメ顔を検出&解析するImager::AnimeFace
http://d.hatena.ne.jp/ultraist/20090412/1239497216
このライブラリをRubyから呼べるようにしました。Mac OS X Leopard で動作確認してます。
使い方
動作にはnvxsとRMagickが必要です。
下のアドレスからファイルをとってきて、
http://oblgt.es.land.to/src/AnimeFace-Ruby.zip
% ruby extconf.rb % make
してください。
うまくmakeできないときは、extconf.rbをいじるといいかもしれません。
makeがうまくいくとAnimeFace.*ができています。
あとはアニメ顔検出をしたいRubyプログラムで
require "pp" require "rubygems" require "RMagick" require "AnimeFace" def anime_detect(imagelist, window = 42.592, step = 4.0, scale_factor = 1.095) AnimeFace::detect(imagelist, window, step, scale_factor) end image = Magick::ImageList.new("test.jpg") result = anime_detect(image) pp result
とでもやれば、こんな風に結果が返ってきます。
[{"face"=>{"x"=>326, "y"=>104, "height"=>170, "width"=>170}, "skin_color"=>{"green"=>242, "blue"=>235, "red"=>252}, "likelihood"=>0.999998152256012, "eyes"=> {"left"=> {"x"=>436, "y"=>146, "height"=>55, "colors"=>{"green"=>30, "blue"=>67, "red"=>68}, "width"=>50}, "right"=> {"x"=>340, "y"=>132, "height"=>55, "colors"=>{"green"=>21, "blue"=>43, "red"=>64}, "width"=>52}}, "hair_color"=>{"green"=>90, "blue"=>104, "red"=>190}, "nose"=>{"x"=>407, "y"=>203}, "chin"=>{"x"=>398, "y"=>257}}]
AnimeFace::detect
この関数はアニメ顔の検出を行って結果を返します。得られる値はハッシュの配列です。
引数はImager::AnimaFaceとほぼ同じですが、第一引数はImagerのインスタンスではなくMagick::ImageListのインスタンスにしてください。
ライセンス
NYSLです。
言い訳
(Perl版に比べて)遅いです。ImageListのインスタンスからPixelの配列を取り出す→各PixelからRGB値をメソッド経由で呼び出す、なんてことをやってるからかもしれません。
問題があれば連絡ください。
感想
NYSLだとこういう少し置換しただけのライブラリがすぐ作れたり、すぐ配布できたり、ゆるくてうれしい。