[mac][ruby]OpenCVを使って顔認識する
昨日の記事ではCentOSにOpenCVをインストールしましたが、カメラが使えるmacで試そうと思い設定とデモを作成しました。
macのカメラに写った顔の目の部分にモザイクがかかるようにしてみました。
- homebrewでOpenCVのインストール
brew doctor
brew update
brew tap homebrew/science
brew install opencv
- ruby-opencvのインストール
gem install ruby-opencv -- --with-opencv=dir=/usr/local/Cellar/opencv/
- サンプル作成
参考記事にあったサンプルコードをお借りして、少し改造して目の部分にモザイクがかかるようにしてみました。
# camera.rb
require 'opencv'
include OpenCV
MOSAIC_SIZE = 10
def mosaic(img, rect, size)
Range.new(rect.y, rect.y+rect.height).step(size) do |y|
Range.new(rect.x, rect.x+rect.width).step(size) do |x|
w = h = size
w = (img.width - x) if x+size > img.width
h = (img.height - y) if y+size > img.height
topleft = CvPoint.new(x, y)
bottomright = CvPoint.new(x+w, y+h)
avg = img.sub_rect(topleft, CvSize.new(w, h)).avg
img.rectangle!(topleft, bottomright, :color => avg, :thickness => -1)
end
end
end
camera = CvCapture.open(0)
eye = CvHaarClassifierCascade::load('/usr/local/Cellar/opencv/2.4.7.1/share/OpenCV/haarcascades/haarcascade_eye.xml')
size = CvSize.new(320, 240)
window = GUI::Window.new('camera')
while GUI::wait_key(50).nil?
image = camera.query
image = image.resize(size)
eye.detect_objects(image) {|rect_eye|
mosaic(image, rect_eye, MOSAIC_SIZE)
}
window.show image
end
window.destroy
- サンプル実行
macのカメラが立ち上がるので、顔を近づけると目にモザイクがかかります。
画像処理はこれまであまり触れてこなかったので色々よくわかっていないですが、フィルターを色々組み合わせて変なもの作ってみたいと思いました。
ちゃんと理解して使えるようになりたいです。
MediaAmbitionTokyo に展示されていた「扇情的な鏡」も同じような仕組みで実装されているのでしょうか。
rubyから手軽にOpenCVをいじれるのは楽しいですね。