ailia JS

ブラウザ上で機械学習モデルを実行できる AI 推論ライブラリ。WebAssembly を使用して、ONNX モデルを JavaScript から直接実行できます。

はじめに

ランタイムファイルを配置して、ブラウザで最初の推論を動かすまでの手順です。

1

サンプルをクローン

ailia JS のライブラリ本体は ailia-js リポジトリで公開されています。サンプルリポジトリ ailia-models-js をクローンしてサブモジュールを初期化すると、ライブラリ (ailia.js / ailia_s.wasm / ailia_simd_s.wasm など) が取得されます。

git clone https://github.com/ailia-ai/ailia-models-js.git
cd ailia-models-js
git submodule init
git submodule update

実行環境に応じて SIMD 版と非 SIMD 版の WebAssembly バイナリが自動的に選択されます。

ライブラリ サンプルリポジトリ
2

サンプルを実行

wasm は file:// では読み込めないため、ローカルサーバーを起動してブラウザからアクセスします。顔検出 (BlazeFace) や物体検出 (YOLOX) などのサンプルをブラウザ上で実行できます。

python3 -m http.server 8080
# → http://localhost:8080 にアクセス

ビルド不要で試したい場合は、公開中のサンプルサイトからブラウザだけで動作を確認できます。

サンプルサイト Get Started チュートリアル (EN)

動作環境

ailia JS は WebAssembly 上で ailia の推論エンジンを動作させるため、インストール不要でブラウザネイティブに AI 推論を実行できます。

対応ブラウザ

  • Chrome / Edge
  • Safari
  • Firefox
  • WebAssembly 対応のモダンブラウザ

SIMD アクセラレーション

  • Windows: 対応
  • macOS: 対応
  • Android: 対応
  • iOS: 16.4 以降で対応 (それ以前は非 SIMD 版で自動動作)

モデル形式

  • ONNX (.onnx)
  • モデル定義 (.onnx.prototxt)
  • ailia-models のモデルを利用可能

配布形態

  • GitHub (ailia-js) で公開
  • ES6 モジュールとして提供
  • 旧式 JavaScript からも利用可能

特徴

エッジ AI をブラウザへ。サーバーにデータを送らずクライアント内で推論が完結します。

WebAssembly ベース

  • ailia の推論エンジンを wasm 化
  • JavaScript から ailia API を利用可能
  • インストール不要で実行

SIMD による高速化

  • SIMD 版 / 非 SIMD 版を自動選択
  • BlazeFace 推論: 21ms → 8ms
  • (M2 Mac / Chrome での計測)

ユースケース

  • ビデオチャットの背景切り抜き
  • マイクのノイズ除去・音声検知 (VAD)
  • 顔検知・顔認証
  • QR コード検知

サンプルモデル

  • 顔検出 (BlazeFace)
  • 手検出 (BlazeHand / BlazePalm)
  • 物体検出 (YOLOX)
  • 物体検出 (MobileNetV2-SSDLite)

プロジェクトで API を使う

ONNX モデルを読み込み、前処理・後処理コールバックを渡して推論を実行する最小サンプル。

import {Ailia} from './ailia.js';

// モジュールを初期化 (SIMD 対応を自動判定)
await Ailia.initialize();

// インスタンスを生成してモデルと重みを読み込み
const ailia = new Ailia();
ailia.loadModelAndWeights(modelFileContents, weightsFileContents);

// 前処理・後処理コールバックを定義
const preprocess = (inputBuffers) => {
  inputBuffers.byIndex[0].buffer.Float32.set(inputData);
};
const postprocess = (outputBuffers) => {
  return Array.from(outputBuffers.byIndex[0].buffer.Float32);
};

// 入力形状を指定して推論を実行
const result = ailia.run(preprocess, postprocess, [[1, 1, width, height]]);

// 終了時にデストラクタを呼び出し
ailia.destroy();

API リファレンス

チュートリアル

よくある質問

ailia JS についてのよくある質問。

ailia JS はどうやって入手できますか?

ライブラリ本体は ailia-js リポジトリからダウンロードできます。サンプルは ailia-models-js をクローンし、git submodule initgit submodule update を実行するとライブラリごと取得できます。

SIMD には対応していますか?

対応しています。SIMD 版 (ailia_simd_s.wasm) と非 SIMD 版 (ailia_s.wasm) の 2 種類のバイナリが同梱されており、実行環境に応じて最適な方が自動的に選択されます。SIMD を有効にすると、BlazeFace の推論時間が 21ms から 8ms に短縮されます (M2 Mac / Chrome での計測)。

Windows / macOS / Android のブラウザは SIMD に対応しています。iOS も 16.4 (Safari 16.4) 以降で WebAssembly SIMD に対応しました。それ以前の iOS では非 SIMD 版が自動的に使用されます。

どのようなモデルを実行できますか?

ONNX フォーマットのモデルに対応しています。モデル定義ファイル (.onnx.prototxt) と重みファイル (.onnx) を loadModelAndWeights() で読み込みます。ailia-models-js には BlazeFace / BlazeHand / YOLOX などのサンプルモデルが含まれており、ailia-models で公開されているモデルも利用できます。

サーバーに画像や音声は送信されますか?

いいえ。推論はすべてブラウザ内 (WebAssembly) で実行されるため、入力データがサーバーに送信されることはありません。ビデオチャットの背景切り抜きやマイクのノイズ除去など、プライバシーが重要な用途に適しています。

ES6 モジュール以外からも使えますか?

はい。ailia JS は ES6 モジュールとして提供されていますが、旧式の JavaScript からも利用できます。

ライセンスはどう扱われますか?

評価ライセンスは開発・評価用途に利用できます。商用配布には製品ライセンスを申請してください。詳細は ailia ライセンス規約 を参照してください。

資料

関連記事

ailia Tech Blog の解説記事です。

ailia.JS: ブラウザ上で機械学習モデルを実行可能にするライブラリ
tech.ailia.ai