ウェブ向けオブジェクト検出ガイド

MediaPipe Object Detector タスクを使用すると、複数のクラスのオブジェクトの有無と位置を検出できます。このタスクは画像データを受け取り、検出結果のリストを出力します。各検出結果は、画像内で識別されたオブジェクトを表します。ウェブブラウザだけで Object Detector のサンプル を表示、実行、編集できます。

このタスクの機能、モデル、および 構成オプションの詳細については、概要をご覧ください。

設定

このセクションでは、Object Detector を使用するために開発環境を設定する主な手順について説明します。ウェブと JavaScript の開発環境の設定に関する一般的な情報については、プラットフォームのバージョンの要件など、 ウェブの設定ガイドをご覧ください。

JavaScript パッケージ

Object Detector コードは、MediaPipe @mediapipe/tasks-vision NPM パッケージから入手できます。これらのライブラリは、プラットフォーム 設定ガイドの手順に沿って 検索してダウンロードできます。

次のコマンドを使用して、NPM から必要なパッケージをインストールできます。

npm install @mediapipe/tasks-vision

コンテンツ配信ネットワーク(CDN) サービス経由でタスクコードをインポートする場合は、HTML ファイルの <head> タグに次のコードを追加します。

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
    crossorigin="anonymous"></script>
</head>

モデル

MediaPipe Object Detector タスクには、このタスクと互換性のあるトレーニング済みモデルが必要です。Object Detector で使用できるトレーニング済みモデルの詳細については、 モデル セクションのタスクの概要をご覧ください。

モデルを選択してダウンロードし、プロジェクト ディレクトリに保存します。

<dev-project-root>/app/shared/models/

タスクを作成する

Object Detector の ObjectDetector.createFrom...() 関数のいずれかを使用して、推論を実行するタスクを準備します。トレーニング済みモデル ファイルへの相対パスまたは絶対パスを指定して、createFromModelPath() 関数を使用します。 モデルがすでにメモリに読み込まれている場合は、createFromModelBuffer() メソッドを使用できます。次のコード例は、createFromOptions() 関数を使用して、より多くの構成オプションを設定する方法を示しています。使用可能な構成オプションの詳細については、 構成オプションのセクションをご覧ください。

次のコードは、このタスクをビルドして構成する方法を示しています。

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
objectDetector = await ObjectDetector.createFromOptions(vision, {
  baseOptions: {
    modelAssetPath: `https://storage.googleapis.com/mediapipe-tasks/object_detector/efficientdet_lite0_uint8.tflite`
  },
  scoreThreshold: 0.5,
  runningMode: runningMode
});

Object Detector タスクの作成の実装例については、 コード例をご覧ください。

構成オプション

このタスクには、ウェブ アプリケーション用の次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
runningMode タスクの実行モードを設定します。次の 2 つの モードがあります:

IMAGE: 単一の画像入力のモード。

VIDEO: 動画のデコードされたフレームまたはカメラなどの入力データのライブ ストリームのモード。
{IMAGE, VIDEO} IMAGE
displayNamesLocale タスクのモデルの メタデータで提供される表示名に使用するラベルの言語を設定します(使用可能な場合)。デフォルトはen英語の です。TensorFlow Lite Metadata Writer API を使用して、カスタムモデルのメタデータにローカライズされたラベルを追加できます。 ロケールコード en
maxResults 返される上位スコアの検出結果の最大数(省略可)を設定します。 任意の正の数 -1(すべての結果が返されます)
scoreThreshold モデルのメタデータで提供される予測スコアのしきい値(存在する場合)をオーバーライドするしきい値を設定します。この値より小さい結果は拒否されます。 任意の浮動小数点数 未設定
categoryAllowlist 許可されるカテゴリ名のリスト(省略可)を設定します。空でない場合、カテゴリ名がこのセットに含まれていない検出結果はフィルタで除外されます。重複または不明なカテゴリ名は無視されます。 このオプションは categoryDenylist と相互に排他的であり、両方を使用するとエラーが発生します。 任意の文字列 未設定
categoryDenylist 許可されないカテゴリ名のリスト(省略可)を設定します。空でない場合、カテゴリ名がこのセットに含まれている検出結果はフィルタで除外されます。重複または不明なカテゴリ名は無視されます。このオプションは categoryAllowlist と相互に排他的であり、両方を使用するとエラーが発生します。 任意の文字列 未設定

データの準備

Object Detector は、ホストブラウザでサポートされている任意の形式の画像内のオブジェクトを検出できます。また、タスクは、サイズ変更、回転、値の正規化など、データ入力の前処理も行います。動画内のオブジェクトを検出するには、API を使用してフレームを 1 つずつ迅速に処理し、フレームのタイムスタンプを使用して動画内のジェスチャーの発生時刻を特定します。

タスクを実行する

Object Detector は、単一の画像を処理する場合は detect() を使用し、動画フレーム内のオブジェクトを検出する場合は detectForVideo() を使用します。タスクはデータを処理し、オブジェクトの認識を試み、結果を報告します。

detect() メソッドと detectForVideo() メソッドの呼び出しは同期的に実行され、ユーザー インターフェース スレッドをブロックします。デバイスのカメラから動画フレーム内のオブジェクトを認識する場合、分類ごとにメインスレッドがブロックされます。これを防ぐには、ウェブワーカーを実装して別のスレッドで検出を実行します。

次のコードは、タスクモデルで処理を実行する方法を示しています。

画像

const image = document.getElementById("image") as HTMLImageElement;
const detections = objectDetector.detect(image);

動画

await objectDetector.setOptions({ runningMode: "video" });

let lastVideoTime = -1;
function renderLoop(): void {
  const video = document.getElementById("video");

  if (video.currentTime !== lastVideoTime) {
    const detections = detector.detectForVideo(video);
    processResults(detections);
    lastVideoTime = video.currentTime;
  }

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Object Detector タスクの実行の実装例については、 コード例をご覧ください。

結果の処理と表示

Object Detector は、検出を実行するたびに検出結果オブジェクトを生成します。 結果オブジェクトには検出のリストが含まれます。各検出には、検出されたオブジェクトの境界ボックスとカテゴリ情報(オブジェクトの名前や信頼スコアなど)が含まれます。

次のコードは、このタスクからの出力データの例を示しています。

ObjectDetectorResult:
 Detection #0:
  Box: (x: 355, y: 133, w: 190, h: 206)
  Categories:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1:
  Box: (x: 103, y: 15, w: 138, h: 369)
  Categories:
   index       : 17
   score       : 0.73047
   class name  : dog

次の画像は、タスク出力の可視化を示しています。

境界ボックスでハイライト表示された 2 匹の犬

Object Detector のサンプルコードは、タスクから返された検出 結果を表示する方法を示しています。詳細については、 コード例 をご覧ください。