Ruby と OpenCV で顔認識

去年の秋に組んだ新しいメインマシンは、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 で顔認識」への1件の返信

  1. […] 前日に引き続き、ruby-opencv でチェッカーボードを認識させてみたいと思います。チェッカーボードとは市松模様のパターンのことで、これを認識することにより映像中の3次元座標系(の行列)を確定させることができ、映像の上に3Dモデルをマッピングする第一歩となります。 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください