RaspberryPi上でOpenCVでWebカメラの映像入力を使う(node-opencv使用)

2020.06.14

RaspberryPiでWebカメラの映像を使ってOpenCVを使った画像認識などをしようと思い試行錯誤してみました。

今回使用しているのは下記の全方位カメラです。

Insta360 Air | Insta360 360度ビデオカメラ | 株式会社アスク

node-opencvをRaspberryPiで動かすまでの記事はこちらです。

RaspberryPiでnode.js上でOpenCVを使う | blog.kwst.site

Webカメラの映像を表示するサンプル実行

OpenCVでWebカメラの映像を表示するサンプル(main.js)を実行してみます。

var cv = require('opencv');

try {
    var camera = new cv.VideoCapture(0);
    var window = new cv.NamedWindow('Video', 0)

    setInterval(function () {
        camera.read(function (err, im) {
            if (err) throw err;
            console.log(im.size())
            if (im.size()[0] > 0 && im.size()[1] > 0) {
                window.show(im);
            }
            window.blockingWaitKey(0, 50);
        });
    }, 20);

} catch (e) {
    console.log("Couldn't start camera:", e)
}

実行します。

sudo node ./src/main.js 

エラーが出ました。

internal/modules/cjs/loader.js:718
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: The module '/home/pi/opencv-virtualuvc/node_modules/opencv/build/Release/opencv.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 72. This version of Node.js requires
NODE_MODULE_VERSION 64. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:718:18)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/home/pi/opencv-virtualuvc/node_modules/opencv/lib/bindings.js:1:80)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)

現在NODE_MODULE_VERSION 72を使っているのですが、node-opencvではNODE_MODULE_VERSION 64が必要だというエラーのようです。

リリース一覧でNODE_MODULE_VERSION 64の最新は10.21.0のようです。

リリース一覧 | Node.js

nvmでインストールします。

nvm install v10.21.0

再度main.jsを実行してみましたが同じエラーが出てしまいました…。

エラーをよく読むとnode_modules内のopencv.nodeというプログラムで使用しているnode.jsに問題がありそうなのでnode_modulesを一度消して再実行してみました。

すると以下のエラーが出ました。おそらくsshでリモート接続しているのでウィンドウを開くための権限が無いのが原因でしょう。

Unable to init server: Could not connect: 接続を拒否されました
(Video:3657): Gtk-WARNING **: 10:01:12.779: cannot open display: 

そこでラズパイ上で直接実行してみたら、起動しました!

          2020 06 14 10 10 52

最後の権限まわりは置いといて、ひとまずWebカメラの映像を使うことができました。

参考

Node.jsでもOpenCVしてみる - uepon日々の備忘録

© 2019-2020 kwst.site.