コマンドラインを使用して動画オブジェクトを追跡する

このクイックスタートでは、以下のプロセスを順を追って説明します。

  • Cloud Storage に一連の動画をコピーする。
  • 動画とそのラベルをリストした CSV ファイルを作成する。
  • AutoML Video Object Tracking を使用してデータセットを作成し、モデルをトレーニングして使用する。

始める前に

プロジェクトを設定する

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. AutoML and Cloud Storage API を有効にします。

    gcloud services enable storage-component.googleapis.comautoml.googleapis.comstorage-api.googleapis.com
  7. Google Cloud CLI をインストールします。
  8. gcloud CLI を初期化するには:

    gcloud init
  9. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  10. Google Cloud プロジェクトで課金が有効になっていることを確認します

  11. AutoML and Cloud Storage API を有効にします。

    gcloud services enable storage-component.googleapis.comautoml.googleapis.comstorage-api.googleapis.com
  12. 環境変数 PROJECT_IDプロジェクト ID に設定します。
    export PROJECT_ID=PROJECT_ID
    AutoML API 呼び出しとリソース名には、プロジェクト ID が含まれています。環境変数 PROJECT_ID は、ID の指定に便利です。

データセットの作成とトレーニング データのインポート

データセットの作成

データセットの名前を決め、次の curl または PowerShell コマンドを使用して、その名前で新しいデータセットを作成します。

REST

POST リクエストを送信する方法は次のとおりです。この例では、Google Cloud CLI を使用してアクセス トークンを作成します。gcloud CLI のインストール手順については、AutoML Video Intelligence Object Tracking のクイックスタートをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • dataset-name: ターゲット データセットの名前。
    例: my_dataset_01
  • 注:
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets

リクエストの本文(JSON):

{
    "displayName": "dataset-name",
    "videoObjectTrackingDatasetMetadata": { }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets" | Select-Object -Expand Content
レスポンスが成功すると、AutoML Video Intelligence Object Tracking API からオペレーションの名前が返されます。返されるレスポンスの例は、次のとおりです。ここで、project-number はプロジェクトの数、operation-id はリクエストに対して作成された長時間実行オペレーションの ID です。たとえば、VOT12345.... です。

トレーニング データをインポートする

REST

トレーニング データをインポートするには、importData メソッドを使用します。この方法では、次の 2 つのパラメータを指定する必要があります。

  1. トレーニングへのパスを含む CSV へのパス。
  2. テストデータの CSV ファイル。注: これらのファイルは、Cloud Storage の「automl-video-demo-data」バケットで使用できます。

リクエストのデータを使用する前に、次のように置き換えます。

  • dataset-id: データセットの IDこの ID は、データセットの名前の最後の要素です。例:
    • データセット名: projects/project-number/locations/location-id/datasets/3104518874390609379
    • データセット ID: 3104518874390609379
  • bucket-name: モデル トレーニング ファイルリストの CSV ファイルを保存した Cloud Storage バケットの名前に置き換えます。
  • csv-file-name: モデル トレーニング ファイルリストの CSV ファイル名に置き換えます。
  • 注:
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id:importData

リクエストの本文(JSON):

{
  "inputConfig": {
    "gcsSource": {
      "inputUris": ["gs://bucket-name/csv-file-name.csv"]
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id:importData"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id:importData" | Select-Object -Expand Content
データ インポート オペレーションのオペレーション ID が返されます。この例は、インポート オペレーション ID VOT7506374678919774208 を含むレスポンスを示しています。

インポート オペレーションのステータスを取得する

次の curl または PowerShell コマンドを使用して、データ インポート オペレーションのステータスをクエリできます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • operation-id: リクエストに対して作成され、オペレーション開始時にレスポンスで指定された長時間実行オペレーションの ID(例: VOT12345....
  • 注:
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id" | Select-Object -Expand Content
インポート オペレーションが完了するまでに時間がかかることがあります。インポート タスクが終了すると、上記の例に示すように、オペレーションのステータスが done: true と表示されます。エラーは発生していません。
  • operation-name: AutoML Video Intelligence Object Tracking API から返されたオペレーションの名前。オペレーション名の形式は projects/project-number/locations/location-id/operations/operation-id です。

すべてのデータセットを一覧表示する

次の curl または PowerShell コマンドを使用して、データセットのリストと、データセットにインポートされたサンプル動画の数を取得します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • project-number: プロジェクトの数
  • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets "

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets " | Select-Object -Expand Content
下記のレスポンスの VOT3940649673949184000 は、リクエストに対して作成され、オペレーション開始時にレスポンスで指定された、長時間実行オペレーションのオペレーション ID です。

モデルのトレーニング

モデル トレーニング オペレーションを開始する

データセットを作成し、トレーニング データをデータセットにインポートしたら、カスタムモデルをトレーニングできます。次の curl または PowerShell コマンドを使用して、モデルをトレーニングします。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • dataset-id: ターゲット データセットの名前。 たとえば、my_dataset_01 表示名です。
  • model-name: モデルに選択した名前に置き換えます。
  • 注:
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models

リクエストの本文(JSON):

{
  "datasetId": "dataset-id",
  "displayName": "model-name",
  "videoObjectTrackingModelMetadata": {},
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models" | Select-Object -Expand Content
モデルのトレーニング オペレーションのオペレーション ID を取得する必要があります。上記の例は、モデルのトレーニング オペレーション ID VOT1741767155885539328 を含むレスポンスを示しています。

モデル トレーニング オペレーションのステータスを取得する

モデルのトレーニング オペレーションのステータスを確認するには、次の curl または PowerShell コマンドを実行します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • operation-name: AutoML Video Intelligence Object Tracking API から返されたオペレーションの名前。オペレーション名の形式は projects/project-number/locations/location-id/operations/operation-id です。
  • 注:
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

GET https://automl.googleapis.com/v1beta1/operation-name

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/operation-name"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/operation-name" | Select-Object -Expand Content
オペレーションが完了すると、オペレーション ステータスが done: true と表示されます。エラーはありません。

モデルが使用可能であることを確認する

モデル トレーニング オペレーションが正常に完了したら、次のコマンドを使用してプロジェクトのモデルを一覧表示することにより、モデルが使用可能であることを確認できます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • project-number: プロジェクトの数
  • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

予測を行う

batchPredict メソッドを使用して、動画のアノテーション(予測)をリクエストできます。batchPredict メソッドには次の 2 つの入力が必要です。

  1. アノテーションを付ける動画へのパスを含む Cloud Storage バケットに保存された CSV ファイル。
  2. アノテーションを付ける動画のセグメントを特定する開始時間と終了時間。

このクイックスタートでは、traffic_video_batch_predict.csv という名前の CSV ファイルを使用します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • model-id: モデルの識別子に置き換えます。
  • input-uri: アノテーションを付けるファイルを含む Cloud Storage バケット(ファイル名を含む)。gs:// で始まる必要があります。
    例: "inputUris": ["gs://automl-video-demo-data/traffic_videos/traffic_video_batch_predict.csv"],
  • output-bucket: 予測の結果を格納する Cloud Storage バケットに置き換えます。
  • object-id: 予測リクエストの出力を Cloud Storage バケットのどこに保存するかを識別するオブジェクト名に置き換えます。注: Cloud Storage バケットへの書き込み権限が必要です。
  • 注:
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id:batchPredict

リクエストの本文(JSON):

{
  "inputConfig": {
    "gcsSource": {
      "inputUris": ["input-uri"]
    }
  },
  "outputConfig": {
    "gcsDestination": {
      "outputUriPrefix": "gs://output-bucket/object-id"
    }
  }
  "params": {
    "score_threshold": "0.0"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

予測オペレーションのステータスを取得する

次の curl または PowerShell コマンドを使用して、バッチ予測オペレーションのステータスをクエリできます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

    • project-number: プロジェクトの数
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。
    • operation-id: リクエストに対して作成され、オペレーション開始時にレスポンスで指定された長時間実行オペレーションの ID(例: VOT12345....

HTTP メソッドと URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id" | Select-Object -Expand Content
operation-name は、AutoML Video Intelligence Object Tracking API から返されたオペレーションの名前です。オペレーション名の形式は projects/project-number/locations/location-id/operations/operation-id です。

バッチ予測タスクが完了すると、コマンドで指定した Cloud Storage バケットに予測の出力が保存されます。動画セグメントごとに JSON ファイルがあります。JSON ファイルは my-video-01.avi.json に似た形式であり、ファイル拡張子 .json が元のファイル名に追加されます。

{
  "inputUris": ["automl-video-demo-data/sample_video.avi"],
  "object_annotations": [ {
    "annotation_spec": {
      "display_name": "Cat",
      "description": "Cat"
    },
    "confidence": 0.43253016
    "frames": [ {
      "frame": {
        "time_offset": {
          "seconds": 4,
          "nanos": 960000000
        },
        "normalized_bounding_box": {
          "x_min": 0.1,
          "y_min": 0.1,
          "x_max": 0.8,
          "y_max": 0.8
        }
      }
    }, {
      "frame": {
        "time_offset": {
          "seconds": 5,
          "nanos": 960000000
        },
        "normalized_bounding_box": {
          "x_min": 0.2,
          "y_min": 0.2,
          "x_max": 0.9,
          "y_max": 0.9
        }
      }
    } ],
    "segment": {
      "start_time_offset": {
          "seconds": 4,
          "nanos": 960000000
      },
      "end_time_offset": {
          "seconds": 5,
          "nanos": 960000000
      }
    }
  } ],
  "error": {
    "details": [ ]
  }
}

クリーンアップ

カスタムモデルや関連するデータセットが不要になった場合は削除できます。

モデルの削除

次の curl または PowerShell コマンドを使用して、モデルを削除できます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • project-number: プロジェクトの数
  • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。
  • model-id: モデル ID に置き換えます。

HTTP メソッドと URL:

DELETE https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id

リクエストを送信するには、次のいずれかのオプションを展開します。

成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。

データセットの削除

次の curl または PowerShell コマンドを使用して、データセットを削除できます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • project-number: プロジェクトの数
  • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。
  • datase-id: データセット ID の ID に置き換えます。

HTTP メソッドと URL:

DELETE https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id

リクエストを送信するには、次のいずれかのオプションを展開します。

成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。