去年の秋に組んだ新しいメインマシンは、MSI のB150M MORTAR ARCTIC (MS-7A45) という新しいマザボで、LMDE2 x64 を乗せて使おうとすると USB デバイスまわりが突然使用不能になったりして厄介でした。
USB デバイスの抜き差し時にホストコントローラが全部死ぬという惨事。PS/2キーボードもマウスもインターフェイスがないので、USB接続なんですが、それも使えなくなっちゃいます。何度かネットワーク経由でログインして再起動してました。Linux カーネル 4.x 系では USB デバイス関連のモジュールが充実していたようですが、なかなか時間が取れずに騙し騙し使っていました。ここ数ヶ月の LMDE のアップデートで同様の症状はなくなったみたいなので、ようやくメインマシンにカメラなどの USB デバイスを差して遊んでいます。ビバ他力本願。
仕事で上司が「ARをやってみたいな~」と言っていたので、久々に OpenCV を触ってみようと思い、今更感はあるものの Ruby で顔認識をやってみました。 OpenCV は2013年2月に Python でスネークさんのフィギュアの顔認識をして遊んだ程度…今度はちゃんと長続きするかな!
以下、自分用のメモです。
環境
- LMDE2 (Linux Mint Debian Edition) x64
- Ruby 2.1.0
- ruby-opencv 0.0.7
1. ライブラリのインストール
sudo gem install opencv
2. 顔認識用の定義ファイルのダウンロード
wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_alt.xml
3. コード
ほぼサンプルのままです。認識した部分に赤い枠線を描いて保存します。
facedetect.rb
#!/usr/bin/ruby
require 'opencv'
include OpenCV
if ARGV.size < 2
STDERR.puts "Usage: #{$0} srcfile destdest"
exit 1
end
src = ARGV.shift
dest = ARGV.shift
img = IplImage::load src
d = CvHaarClassifierCascade::load "./haarcascade_frontalface_default.xml"
d.detect_objects(img).each do |r|
img.rectangle! r.top_left, r.bottom_right, :color => CvColor::Red, :thickness => 3
end
img.save dest
4. 実行
ruby facedetect.rb srcfile.jpg destfile.jpg
動きました!
変なところを認識してるけれど、まずはひと安心 _(:3」∠)_
[…] 前日に引き続き、ruby-opencv でチェッカーボードを認識させてみたいと思います。チェッカーボードとは市松模様のパターンのことで、これを認識することにより映像中の3次元座標系(の行列)を確定させることができ、映像の上に3Dモデルをマッピングする第一歩となります。 […]