Help us understand the problem. What is going on with this article?

Node.jsとOpenCVで顔認識してみます。

More than 3 years have passed since last update.

やることとバージョン

OpenCVが気になっていたのでNode.jsから使えるライブラリを探して試してみました。

ライブラリはこちらを使ってみます。
https://github.com/peterbraden/node-opencv

  • Node.js 0.12.0
  • Mac OS 10.10.2 Yosemite
  • Homebrew 0.9.5
  • OpenCV 2.4
  • node-opencv 3.0

OpenCV

OpenCVはインテルが開発した画像処理や画像解析等のライブラリです。

http://opencv.jp/

準備(とハマったところ)

opencvインストールで戸惑う。

npm install opencvだけやろうとするとエラーめっちゃ出ました苦笑

$ npm install opencv
\
> opencv@3.0.0 install /Users/sugawara_nobisuke/n0bisuke/lab/opencv/node_modules/opencv
> node-pre-gyp install --fallback-to-build

child_process: customFds option is deprecated, use stdio instead.
child_process: customFds option is deprecated, use stdio instead.
/bin/sh: pkg-config: command not found
gyp: Call to 'pkg-config --cflags opencv' returned exit status 127. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/Users/sugawara_nobisuke/.nvm/versions/v0.12.0/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:343:16)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1067:12)
gyp ERR! System Darwin 14.1.0
・
・
・

どうやらpkg-configが無いよって怒られてるみたい

$ brew install pkg-config

まだエラーでてます。opencvがそもそも入ってなかった疑惑

$ brew install opencv
Error: No available formula for opencv
Searching formulae...
Searching taps...
homebrew/science/opencv

こうすると良いみたい。
http://qiita.com/laprasDrum/items/59092e96608dd106be63

$ brew tap homebrew/science
$ brew install opencv
・
・
・
==> python setup.py build --fcompiler=gnu95 install --prefix=/usr/local/Cellar/numpy
?  /usr/local/Cellar/numpy/1.9.1: 693 files, 14M, built in 112 seconds
==> Installing opencv
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/science/opencv-
######################################################################## 100.0%
==> Pouring opencv-2.4.10.1.yosemite.bottle.tar.gz
?  /usr/local/Cellar/opencv/2.4.10.1: 219 files, 39M

上手くいったみたいです。
これでMac(Yosemite)にopencv2.4がインストールされたみたいです。

もう一度node-opencvを入れてみます。

$ npm install opencv
-
> opencv@3.0.0 install /Users/sugawara_nobisuke/n0bisuke/lab/opencv/node_modules/opencv
> node-pre-gyp install --fallback-to-build

child_process: customFds option is deprecated, use stdio instead.
child_process: customFds option is deprecated, use stdio instead.
  CXX(target) Release/obj.target/opencv/src/init.o
  CXX(target) Release/obj.target/opencv/src/Matrix.o
  CXX(target) Release/obj.target/opencv/src/OpenCV.o
  CXX(target) Release/obj.target/opencv/src/CascadeClassifierWrap.o
  CXX(target) Release/obj.target/opencv/src/Contours.o
  CXX(target) Release/obj.target/opencv/src/Point.o
  CXX(target) Release/obj.target/opencv/src/VideoCaptureWrap.o
  CXX(target) Release/obj.target/opencv/src/CamShift.o
  CXX(target) Release/obj.target/opencv/src/HighGUI.o
  CXX(target) Release/obj.target/opencv/src/FaceRecognizer.o
  CXX(target) Release/obj.target/opencv/src/BackgroundSubtractor.o
  CXX(target) Release/obj.target/opencv/src/Constants.o
  CXX(target) Release/obj.target/opencv/src/Calib3D.o
  CXX(target) Release/obj.target/opencv/src/ImgProc.o
  SOLINK_MODULE(target) Release/opencv.node
  SOLINK_MODULE(target) Release/opencv.node: Finished
  COPY /Users/sugawara_nobisuke/n0bisuke/lab/opencv/node_modules/opencv/build/opencv/v3.0.0/Release/node-v14-darwin-x64/opencv.node
  TOUCH Release/obj.target/action_after_build.stamp
opencv@3.0.0 node_modules/opencv
├── buffers@0.1.1
├── nan@1.4.3
└── node-pre-gyp@0.5.31

動かしてみる

まずは画像を用意します。 LIGの入社式記事から拝借。

n0bisuke.jpgとして保存してapp.jsと同じ階層に設置しました。

app.js
var cv = require('opencv');

cv.readImage("./n0bisuke.jpg", function(err, im){
  im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
    for (var i=0;i<faces.length; i++){
      var x = faces[i]
      im.ellipse(x.x + x.width/2, x.y + x.height/2, x.width/2, x.height/2);
    }
    im.save('./out.jpg');
  });
})

実行してみます。

$ node app.js

out.jpgが出力されているので確認してみます。

顔に印がついてますね!

どうやら顔認識ができたみたいです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away