ブラウザ側で動作する背景削除ツールを構築した方法

処理すべき300枚の商品写真がありました。Shopifyストアのために、それらの背景を削除する必要がありました。

未公開のこれらの写真を、どこにでもあるようなサーバーにアップロードしたくはありませんでした。ブラウザ内でローカルに動作するソリューションを求めていました。

どちらが最適かを確認するために、2つの異なる手法をテストしました。

手法1: Canvas API この手法はピクセル操作を利用します。隅にある色を選択し、それと似たすべてのピクセルを透明に設定します。

• メリット: 非常に高速。追加のダウンロードファイルなし。メモリ消費がほとんどない。 • デメリット: 背景に影、グラデーション、テクスチャがある場合に失敗する。エッジがギザギザになる。

手法2: WebAssembly (WASM) + 機械学習 この手法は、ONNX Runtime Webを介してMLモデルを使用し、何が人物や物体であるかを理解します。

• メリット: 髪の毛、毛皮、複雑なエッジにも対応。ほぼあらゆる背景で動作する。 • デメリット: 8MBのモデルをダウンロードする必要がある。CPUとメモリを大幅に消費する。

結果 MacBook Proで500枚の画像をテストしました。比較結果は以下の通りです。

  • Canvasの速度: 1枚あたり12〜18 ms。
  • WASMの速度: 1枚あたり180〜220 ms。
  • Canvasの精度: 500枚中187枚。
  • WASMの精度: 500枚中412枚。

私の解決策: ハイブリッド・アプローチ 両方を使用するツールを構築しました。まずCanvasの手法を試し、背景が複雑すぎる場合はMLモデルに切り替えます。これにより、平均で1枚あたり40 msとなります。

技術的なヒント:

  • getImageData() はデータをGPUからCPUに移動させるため、遅延が発生します。時間を節約するために、操作をバッチ処理してください。
  • 3〜5倍高速化するために、ONNX RuntimeではWebGLバックエンドを使用してください。
  • モデルの入力サイズは256x256に固定してください。サイズを大きくすると、商品写真としてのメリットが十分でないにもかかわらず、処理速度が4倍遅くなります。

シンプルな写真に対して素早い修正が必要ならCanvasを、品質が必要なら機械学習を使用してください。

出典: https://dev.to/saba_khan_50d6d6e112c484f/how-i-built-a-browser-side-background-remover-and-benchmarked-canvas-vs-webassembly-5bf2

オプションの学習コミュニティ: https://t.me/GyaanSetuAi