RaspberryPiでnode.js上でOpenCVを使う

June 13, 2020

RaspberryPi上でnode.jsを使ってOpenCVプログラミングをして見たいと思います。

Webカメラを使って画像認識させます。Webカメラをラズパイ上で動かすまでの記事はこちらです。

RaspberryPiでカメラを使う(raspivid, raspistill, fsbcam) | blog.kwst.site

node.jsをラズパイ上でバージョン管理するまでの記事はこちらです。

RaspberryPiにnvmを入れてnode.jsのバージョン管理を行う | blog.kwst.site

node-opencvをインストール

今回はnode.jsで動かしてみます。

opencv - npm

インストールしてみます。

npm install -S opencv

いきなりエラーが出ました。おそらくOpenCV本体がインストールされていないのが原因みたいです。

> opencv@7.0.0 install /home/pi/opencv-virtualuvc/node_modules/opencv
> node-gyp rebuild

/home/pi/opencv-virtualuvc/node_modules/opencv/utils/find-opencv.js:29
              throw new Error("ERROR: failed to run: pkg-config" + opencv + " " + flag + " - Is OpenCV installed?");
              ^

Error: ERROR: failed to run: pkg-config "opencv >= 2.3.1" --cflags - Is OpenCV installed?
    at /home/pi/opencv-virtualuvc/node_modules/opencv/utils/find-opencv.js:29:21
    at ChildProcess.exithandler (child_process.js:310:5)
    at ChildProcess.emit (events.js:315:20)
    at maybeClose (internal/child_process.js:1021:16)
    at Socket.<anonymous> (internal/child_process.js:443:11)
    at Socket.emit (events.js:315:20)
    at Pipe.<anonymous> (net.js:674:12)
gyp: Call to 'node utils/find-opencv.js --cflags' returned exit status 1 while in binding.gyp. 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 (/home/pi/.nvm/versions/node/v12.18.0/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 5.4.45-v7l+
gyp ERR! command "/home/pi/.nvm/versions/node/v12.18.0/bin/node" "/home/pi/.nvm/versions/node/v12.18.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/opencv-virtualuvc/node_modules/opencv
gyp ERR! node -v v12.18.0
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok 
npm WARN opencv-virtualuvc@1.0.0 No description

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! opencv@7.0.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the opencv@7.0.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2020-06-13T22_23_18_808Z-debug.log

コンパイル済みのOpenCVをインストール

こちらの記事を参考にして、コンパイル済みのOpenCVをインストールしてみます。

raspberry pi opencv ビデオで顔認識(コンパイルなし!) - KOKENSHAの技術ブログ

インストールします。結構時間かかりますがインストールできました。

sudo apt-get install libopencv-dev

途中で容量に関するクエスチョンが出ますが、Yで進めます。

この操作後に追加で 398 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y

インストールされたOpenCVのバージョンを確認します。3.2.0がインストールされたようです。

$ pkg-config --modversion opencv
3.2.0

もう一度node-opencvをインストールします。これも結構時間かかりますが、インストールできました。

npm i -S opencv

サンプルを実行

サンプルを実行してみる。mona.pngはnode-opencvのexampleにあるこちらを使用しました。

https://raw.githubusercontent.com/peterbraden/node-opencv/master/examples/files/mona.png

var cv = require('opencv');

cv.readImage("./mona.png", 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');
    });
})

結果、顔認識できているようです。

          2020 06 14 8 23 09