Node-REDで画像処理(opencv4nodejs) その1

 8th March 2023 at 11:02pm

opencv4nodejs」はNode.js上で画像処理ライブラリ「OpenCV」を利用するためのモジュールです。

Node-REDから「opencv4nodejs」を利用する手順を説明します。今回は「opencv4nodejs」のインストール手順について説明します。

以下は、Windows10 64bit + Node.jsバージョン16系での手順です。

各ソフトのインストーラの準備やバージョンの管理などは大変なので、Windowsのパッケージ マネージャである「Chocolatey」を使うことにします。「Chocolatey」の導入については、こちらをご覧ください。

すでに「Chocolatey」がインストールされていることを前提に説明を続けます。

インストール手順

「opencv4nodejs」はバイナリーでは提供されていません。自PCでOpenCVをビルドすることもできますが、様々なPC環境の不具合でエラーが発生します。

本説明では「Chocolatey」でOpenCVのバイナリーを準備します。

自PCでビルドする方法は、古い説明をご覧ください。

まず、Node.jsのネイティブアドオンモジュール(C++で作成したモジュール)をコンパイルするためツール「node-gyp」をインストールします。

コマンド プロンプトを管理者権限で起動し以下を実行します。

> npm install -g node-gyp

「node-gyp」はPythonを利用します。2023/3において、推奨はPython v3.6、v3.7、v3.8、v3.9のようです。

Python/CMake/Git/Visual Studio Build Tools 2017/OpenCVをインストールします。

> choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'

> choco install git

> choco install python39

システム環境変数Pathに、「c:\Python39」を追加しておきましょう。

> choco install OpenCV

以下の環境変数を追加します。(デフォルトの設定では「C:\tools」にインストールされます)

OPENCV_INCLUDE_DIR
C:\tools\opencv\build\include
OPENCV_LIB_DIR
C:\tools\opencv\build\x64\vc15\lib
OPENCV_BIN_DIR
C:\tools\opencv\build\x64\vc15\bin

システム環境変数Pathに「%OPENCV_BIN_DIR%」を追加します。

コマンドプロンプトを再起動し、パスが通っていることを確認します。

> python --version
Python 3.9.13

> cmake --version
cmake version 3.25.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

> git --version
git version 2.39.2.windows.1

バージョン番号は私のPC環境での例なので、ちゃんとバージョン番号が表示されればOKです。

Python、Cmake、Gitのパスが通っていな時は、こちらを参考にして追加してください。

自動ビルド スクリプトが実行されないように環境変数を設定した後、 opencv4nodejsのインストールを実行します。

> set OPENCV4NODEJS_DISABLE_AUTOBUILD=1
> npm install -g opencv4nodejs

changed 30 packages, and audited 31 packages in 8m

found 0 vulnerabilities

正常にインストールされた場合

スタートメニュー -> Node.js -> Node.js を実行してください。

以下のように、const cv = require("opencv4nodejs")を実行した後、cvを実行してください。

> const cv = require("opencv4nodejs")
undefined
> cv
{
  isCustomMatAllocatorEnabled: [Function: isCustomMatAllocatorEnabled],
  dangerousEnableCustomMatAllocator: [Function: dangerousEnableCustomMatAllocator],
  dangerousDisableCustomMatAllocator: [Function: dangerousDisableCustomMatAllocator],
  getMemMetrics: [Function: getMemMetrics],
  version: { major: 3, minor: 4, revision: 6 },
  modules: {
    core: true,
    calib3d: true,
    dnn: true,
    face: true,
    features2d: true,
    imgproc: true,

正常にインストールされなかった場合

その1

> const cv = require("opencv4nodejs")
Uncaught Error: The specified module could not be found.
\\?\C:\Users\[YOUR ACCOUNT]\AppData\Roaming\npm\node_modules\opencv4nodejs\build\Release\opencv4nodejs.node
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1131:18)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at require (internal/modules/cjs/helpers.js:92:18)

上の場合、必要なdllが読み込めなかったようです。

C:\Users\[YOUR ACCOUNT]\AppData\Roaming\npm\node_modules\opencv4nodejs\node_modules\opencv-build\opencv\build\bin\ReleaseのPathを通すことで問題は解決されました。

その2

> const cv = require("opencv4nodejs")
Uncaught Error: Cannot find module 'opencv4nodejs'
Require stack:
- <repl>
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15)
    at Function.Module._load (internal/modules/cjs/loader.js:745:27)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at require (internal/modules/cjs/helpers.js:92:18) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '<repl>' ]
}

この場合、環境変数NODE_PATHC:\Users\[YOUR ACCOUNT]\AppData\Roaming\npm\node_modulesで作成し、環境変数Pathに%NODE_PATH%を追加してください。

これは、Node.jsのインストール時の忘れでした。

最後に

こちらの「How to install」も参考にしてください。

Node-REDで画像処理(opencv4nodejs) その2で、Node-REDからの利用手順を説明します。


HomeへNode-REDの記事Topへ