概要
Mac のカメラを使って OpenCV + Nodejs で顔検出をしてみました
公式のサンプルが静止画の顔検出だったので動画でリアルタイムに顔検出してみました
環境
- Mac OS X 10.10.5
- OpenCV .2.4.12
- Nodejs 0.12.0
- npm 2.5.1
OpenCV のインストール
node-opencv は OpenCV3 にまだ対応していません
今回は OpenCV のバージョン 2 をインストールします
- brew install pkg-config
brew link --overwrite numpy
- brew install homebrew/science/opencv
- brew install ffmpeg
- npm install opencv
とりあえずこれでインストールできました
自分の場合、過去 に OpenCV3 をインストールしていたので若干コマンドが異なる可能性があるかもしれません
顔検出するサンプルスクリプト
今回作成したサンプルは以下の通りです
- vim face_detect.js
var cv = require('opencv')
var s = new cv.VideoCapture(0)
var camWidth = 320;
var camHeight = 240;
var rectColor = [0, 255, 0];
var rectThickness = 2;
s.setWidth(camWidth);
s.setHeight(camHeight);
var detect = function(){
s.read(function(err, im){
if (err) throw err;
im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
console.log("I spy", faces.length, "faces...")
for (var i = 0; i < faces.length; i++) {
face = faces[i];
im.rectangle([face.x, face.y], [face.width, face.height], rectColor, rectThickness);
}
w = new cv.NamedWindow("face detect", 1)
w.show(im)
w.blockingWaitKey(0, 50);
detect();
})
})
}
detect()
- node face_detect.js
まず opencv を require
して VideoCapture
を使ってビデオを使用する準備をします
detect
という関数を作成してこれを無限ループさせます
s.read
でカメラで撮影している画面を読み込みます
読み込んだら読み込んだオブジェクトを元に im.detectObject
で顔検出します
顔が検出できたら顔の分だけ四角で囲います
読み込んでかつ四角で囲った画像を w.show(im)
で出力します
これを無限にループすることで動画のようにリアルタイムに顔検出しているように見せています
最後に
実際に実行できると別ウィンドウが立ち上がります
Mac に付属のカメラの画像が表示されているので顔を近づけると四角で囲まれると思います
今回ウィンドウサイズを 320 x 240 にしています
サイズを上げても問題ないですが、かなり動きが重くなるので PC のスペックに合わせて調整してください
とりあえずカメラで顔認識することができました
今度は Mac 内臓のカメラではなく外部のカメラとかを使ってやってみようと思います
0 件のコメント:
コメントを投稿