2020.6.14
RaspberryPiでWebカメラの映像を使ってOpenCVを使った画像認識などをしようと思い試行錯誤してみました。
今回使用しているのは下記の全方位カメラです。
Insta360 Air | Insta360 360度ビデオカメラ | 株式会社アスク
node-opencvをRaspberryPiで動かすまでの記事はこちらです。
RaspberryPiでnode.js上でOpenCVを使う | blog.kwst.site
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
のようです。
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:
そこでラズパイ上で直接実行してみたら、起動しました!
最後の権限まわりは置いといて、ひとまずWebカメラの映像を使うことができました。