![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
Emscripten は LLVM から JavaScript へのコンパイラである。OpenCV.js をビルドするために Emscripten を使用する。
Emscripten をインストールするには、Emscripten SDK の手順に従うこと。
例:
インストール後、EMSDK 環境が正しくセットアップされていることを確認する。
例:
最近のバージョンの Emscripten では、emcmake / emmake ランチャーを使用する必要がある。
最新の WebAssembly については emscripten のバージョン 2.0.10 で検証済みである。WebAssembly の最新機能を使用するには Emscripten のバージョンを確認すること。
例:
最新の安定版 OpenCV を使用するか、Git リポジトリ から最新のスナップショットを取得できる。
Git クライアントを起動し、OpenCV リポジトリをクローンする。
例:
git がインストールされている必要がある。opencv.js をビルドするには、python スクリプト <opencv_src_dir>/platforms/js/build_js.py <build_dir> を実行する。このビルドスクリプトはデフォルトで WebAssembly 版をビルドする(--build_wasm スイッチは後方互換性のために残されている)。デフォルトでは、WebAssembly コードを base64 エンコードして1つの JavaScript ファイルにすべてまとめる。本番ビルドでは --disable_single_file を追加でき、これにより WebAssembly コードを専用の .wasm ファイルに書き出し(生成された JavaScript ファイルが自動的に読み込む)、全体のサイズを削減できる。
例えば、build_js ディレクトリにビルドするには次のようにする。
python と cmake がインストールされている必要がある。[省略可能] OpenCV.js ローダーをビルドするには、--build_loader を追加する。
例:
<opencv_js_dir>/bin/loader.js のパスにある js ファイルとして実装されている。ローダーは WebAssembly Feature Detection を利用してブラウザの機能を検出し、対応する OpenCV.js を自動的に読み込む。これを使用するには、WebAssembly Feature Detection の UMD 版を使用し、Web アプリケーションに loader.js を導入する必要がある。コード例:
[省略可能] ドキュメントをビルドするには、--build_doc オプションを追加する。
例:
doxygen がインストールされている必要がある。[省略可能] テストをビルドするには、--build_test オプションを追加する。
例:
[省略可能] OpenCV contrib モジュールを有効にするには --cmake_option="-DOPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules/" を追加する。
例:
[省略可能] WebNN バックエンドを有効にするには、--webnn オプションを追加する。
例:
前述のとおり、ビルドコマンドの起動時に --build_test を渡すことを忘れないこと。これにより、build_js/bin 内の opencv.js ファイルと一緒に実行できるテストのソースコードが生成される。
テストを実行するには、\<build_dir\>/bin フォルダでローカル Web サーバを起動する。例えば、localhost:8080 で配信する node http-server などである。
Web ブラウザで http://localhost:8080/tests.html にアクセスすると、ユニットテストが自動的に実行される。コマンド例:
あるいは、テストは GoogleChrome/puppeteer を使って実行することもできる。これはターミナル上で動作するGoogle Chromeの一種である(travis CIなどの継続的インテグレーションで便利)
node run_puppeteer --help を確認すること。npm install コマンドはツールの依存関係をインストールするため、一度だけ実行すればよい。その後はすぐに使用できる。PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 npm install --no-save puppeteer を使用する。環境変数 PUPPETEER_EXECUTABLE_PATH=$(which google-chrome) を通じて独自のChromium/Chromeバイナリを指定することもできる。注意: Puppeteerは同梱のChromiumでのみ動作が保証されている。それ以外の使用は自己責任で行うこと。例:
nvm の lts/carbon)の使用を検討すること。[省略可能] opencv.js をスレッド最適化付きでビルドするには、--threads オプションを付加する。
例:
デフォルトのスレッド数は、使用しているデバイスの論理コア数である。cv.parallel_pthreads_set_threads_num(number) を使って自分でスレッド数を設定したり、cv.parallel_pthreads_get_threads_num() を使って現在のスレッド数を取得したりできる。
opencv.js のwasm版をビルドする必要がある。また、スレッド最適化はブラウザでのみ動作し、node.jsでは動作しない。まずブラウザで WebAssembly threads support 機能を有効にする必要がある。例えばChromeを使用している場合は、chrome://flags でこのフラグを有効にすること。[省略可能] opencv.js をwasm simd最適化付きでビルドするには、--simd オプションを付加する。
例:
wasm simdはまだ開発中であるため、simd最適化は実験的なものである。
opencv.js のwasm版をビルドする必要がある。ブラウザの場合は、まず WebAssembly SIMD support 機能を有効にする必要がある。例えばChromeを使用している場合は、chrome://flags でこのフラグを有効にすること。Node.jsの場合は、--experimental-wasm-simd フラグを付けてスクリプトを実行する必要がある。opencv.js のsimd版は、安定版ブラウザや古いバージョンのNode.jsでは動作しない場合がある。Chrome Dev のような最新の不安定版ブラウザまたはNode.jsを使用して、新機能を利用すること。[省略可能] wasm intrinsicsテストをビルドするには、--build_wasm_intrin_test オプションを付加する。
例:
wasm intrinsicsテストでは、以下の関数を使ってすべてのケースをテストできる:
失敗したケースはJavaScriptのデバッグコンソールに記録される。
wasm intrinsicsの単一データ型のみをテストしたい場合は、以下の関数を使用できる:
[省略可能] パフォーマンステストをビルドするには、--build_perf オプションを付加する。
例:
パフォーマンステストを実行するには、<build_dir>/bin フォルダでローカルWebサーバを起動する。例えば、localhost:8080 で配信するnode http-serverなど。
パフォーマンステストには現在 cvtColor、resize、threshold といったカーネルがある。例えば threshold をテストしたい場合は、Webブラウザで http://localhost:8080/perf/perf_imgproc/perf_threshold.html にアクセスする。(1920x1080, CV_8UC1, THRESH_BINARY) のようなテストパラメータを入力し、Run ボタンをクリックしてケースを実行する。パラメータを入力しない場合は、このカーネルのすべてのケースが実行される。
Node.jsを使ってテストを実行することもできる。
例えば、パラメータ (1920x1080, CV_8UC1, THRESH_BINARY) で threshold を実行する:
あるいは、同じビルドを docker コンテナを使って行うこともできる。これは特に非Linuxシステムにおいて、しばしばより簡単で信頼性が高い。システムに docker をインストールし、emscriptenビルド向けにクリーンで十分にテストされた環境を提供する一般的なコンテナを使用するだけでよい。このようなコンテナには、必要なツールの最新版がすべてインストールされている。
したがって、システムに docker がインストールされ、実行されていることを確認すること。以下のシェルスクリプトはLinuxとMacOSで動作するはずである:
Windowsでは以下のPowerShellコマンドを使用する:
2.0.10 を以下のコマンドで試すとよい:Windowsでは以下のPowerShellコマンドを使用する:
ドキュメントをビルドするには doxygen がインストールされている必要がある。以下の内容で Dockerfile という名前のファイルを作成する:
次に、以下のコマンドでdockerイメージをビルドし、opencv-js-doc という名前を付ける(このコマンドは一度だけ実行すればよい):
次に、今度は新しいイメージを使い --build_doc を渡して、もう一度ビルドコマンドを実行する: