クイックスタート: 動画の分類にコマンドラインを使用する

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

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

始める前に

プロジェクトを設定する

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

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

    API を有効にする

  5. gcloud コマンドライン ツールをインストールします。
  6. 手順に沿ってサービス アカウントを作成し、キーファイルをダウンロードします
  7. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、サービス アカウントの作成時にダウンロードしたサービス アカウント キーファイルのパスに設定します。
    export GOOGLE_APPLICATION_CREDENTIALS=key-file
  8. 環境変数 PROJECT_IDプロジェクト ID に設定します。
    export PROJECT_ID=your-project-id
    AutoML API 呼び出しとリソース名には、プロジェクト ID が含まれています。環境変数 PROJECT_ID は、ID の指定に便利です。
  9. プロジェクトのオーナーである場合は、サービス アカウントを AutoML 編集者の IAM ロールに追加し、service-account-name を新しいサービス アカウントの名前に置き換えます。例: service-account1@myproject.iam.gserviceaccount.com
    gcloud auth login
    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:service-account-name" \
       --role="roles/automl.editor"
    
  10. それ以外の場合(プロジェクト オーナーでない場合)は、プロジェクト オーナーにユーザー ID とサービス アカウントの両方を AutoML 編集者の IAM ロールに追加するよう依頼します。

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

データセットの作成

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

REST とコマンドライン

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

  • dataset-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/datasets

JSON 本文のリクエスト:

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

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

curl

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

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-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 application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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 API はオペレーションの name を返します。このようなレスポンスの例を次に示します。project-number はプロジェクトの番号、operation-id はリクエストに対して作成された長時間実行オペレーションの ID です。

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

REST とコマンドライン

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

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

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

  • input-uri: アノテーションを付けるファイルを含む Cloud Storage バケット(ファイル名を含む)。先頭は gs:// でなければなりません。例:
    "inputUris": ["gs://automl-video-demo-data/hmdb_split1.csv"]
  • dataset-id: データセットのデータセット識別子(表示名ではない)に置き換えます。例: VCN4798585402963263488
  • 注:
    • 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": input-uri
      }
   }
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-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 application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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 VCN7506374678919774208 を含むレスポンスを示しています。

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

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

REST とコマンドライン

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

  • operation-id: データ インポート オペレーションのオペレーション ID に置き換えます。
  • 注:
    • 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 application-default print-access-token) \
https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

PowerShell

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

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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 と表示されます。エラーは発生していません。

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

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

REST とコマンドライン

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

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

HTTP メソッドと URL:

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

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

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

モデルのトレーニング

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

データセットを作成し、トレーニング データをデータセットにインポートしたら、カスタムモデルをトレーニングできます。

次の curl または PowerShell コマンドを使用して、モデルをトレーニングします。

REST とコマンドライン

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

  • dataset-id: この ID は、データセットの名前の最後の要素です。たとえば、データセットの名前が projects/434039606874/locations/us-central1/datasets/VCN3104518874390609379 の場合、データセットの ID は VCN3104518874390609379 です。
  • 注:
    • 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 本文のリクエスト:

{
  "displayName": "test_model",
  "dataset_id": "dataset-id",
  "videoClassificationModelMetadata": {}
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-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 application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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
オペレーションの開始時に、operation-id がレスポンスで返されます(例: VCN123....)。
{
  "name": "projects/project-number/locations/location-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "progressPercentage": 100,
    "createTime": "2020-02-27T01:56:28.395640Z",
    "updateTime": "2020-02-27T02:04:12.336070Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.Model",
    "name": "projects/project-number/locations/location-id/models/operation-id",
    "createTime": "2020-02-27T02:00:22.329970Z",
    "videoClassificationModelMetadata": {
      "trainBudget": "1",
      "trainCost": "1",
      "stopReason": "BUDGET_REACHED"
    },
    "displayName": "a_98487760535e48319dd204e6394670"
  }
}

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

次の curl または PowerShell コマンドを使用して、モデルをトレーニングします。

REST とコマンドライン

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

  • operation-id: トレーニング オペレーションのオペレーション ID に置き換えます。
  • 注:
    • 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 application-default print-access-token) \
https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

PowerShell

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

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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 が表示されます。エラーはありません。

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

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

REST とコマンドライン

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

  • dataset-id: データセットのデータセット識別子(表示名ではない)に置き換えます。
  • model-name: モデルに選択した名前に置き換えます。
  • 注:
    • 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 application-default print-access-token) \
https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

PowerShell

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

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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
データ インポート オペレーションのオペレーション ID が返されます。
例: VCN1741767155885539328

予測を行う

動画のアノテーション(予測)をリクエストするには、batchPredict コマンドを実行します。batchPredict コマンドは、Cloud Storage バケットに保存されている CSV ファイルを入力として受け取ります。このファイルには、アノテーションを付ける動画へのパス、アノテーションを付ける動画のセグメントを特定する開始時間と終了時間が格納されています。このクイックスタートでは、この CSV ファイルの名前は hmdb_split1_test_gs_predict.csv です。

次の curl または PowerShell コマンドを実行して、バッチ(非同期)予測リクエストを行います。

REST とコマンドライン

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

  • input-uri: アノテーションを付けるファイルを含む Cloud Storage バケット(ファイル名を含む)。先頭は gs:// でなければなりません。例:
    "inputUris": ["gs://automl-video-demo-data/hmdb_split1_test_gs_predict.csv"]
  • output-bucket: Cloud Storage バケットの名前に置き換えます。例: my-project-vcm
  • object-id: データ インポート オペレーションのオペレーション ID に置き換えます。
  • 注:
    • 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"
    }
  }
}

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

curl

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

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

PowerShell

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

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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/model-id:batchPredict " | Select-Object -Expand Content

バッチ予測リクエストのオペレーション ID が返されます(例: VCN926615623331479552)。

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

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

REST とコマンドライン

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

  • operation-id: データ インポート オペレーションのオペレーション ID に置き換えます。
  • 注:
    • 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 application-default print-access-token) \
https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

PowerShell

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

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

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
CSV ファイルで指定した動画の数によっては、バッチ予測タスクが完了するまでに時間がかかることがあります。タスクが完了すると、次の例のように、オペレーションのステータスが done: true と表示されます。エラーは発生していません。

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

{
  "inputUris": ["gs://automl-video-demo-data/sample_video.avi"]
  "segment_classification_annotations": [ {
    "annotation_spec": {
      "display_name": "ApplyLipstick",
      "description": "ApplyLipstick"
    },
    "segments": [ {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 4,
          "nanos": 960000000
        }
      },
      "confidence": 0.43253016
    }, {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 4,
          "nanos": 960000000
        }
      },
      "confidence": 0.56746984
    } ],
    "frames": [ ]
  } ],
  "shot_classification_annotations": [ {
    "annotation_spec": {
      "display_name": "ApplyLipstick",
      "description": "ApplyLipstick"
    },
    "segments": [ {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 5
        }
      },
      "confidence": 0.43253016
    }, {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 5
        }
      },
      "confidence": 0.56746984
    } ],
    "frames": [ ]
  } ],
  "one_second_sliding_window_classification_annotations": [ {
    "annotation_spec": {
      "display_name": "ApplyLipstick",
      "description": "ApplyLipstick"
    },
    "segments": [ ],
    "frames": [ {
      "time_offset": {
        "nanos": 800000000
      },
      "confidence": 0.54533803
    }, {
      "time_offset": {
        "nanos": 800000000
      },
      ...
      "confidence": 0.57945728
    }, {
      "time_offset": {
        "seconds": 4,
        "nanos": 300000000
      },
      "confidence": 0.42054281
    } ]
  } ],
  "object_annotations": [ ],
  "error": {
    "details": [ ]
  }
}

クリーンアップ

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

モデルの一覧表示

次の curl または PowerShell コマンドを使用して、プロジェクトのモデルとその ID を一覧表示できます。

REST とコマンドライン

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

  • model-name: モデルの作成時にレスポンスで指定された完全なモデル名。完全な名前の形式: projects/project-number/locations/location-id/models
  • 注:
    • 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 レスポンスが返されます。

モデルの削除

モデルを削除するには、次のコマンドを使用します。

REST とコマンドライン

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

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

HTTP メソッドと URL:

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

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

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

データセットの一覧表示

次の curl または PowerShell コマンドを使用して、プロジェクトのデータセットとその ID を一覧表示できます。

REST とコマンドライン

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

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

HTTP メソッドと URL:

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

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

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

データセットの削除

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

REST とコマンドライン

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

  • dataset-name: 完全なデータセット名。データセットの作成時にレスポンスで返されます。完全な名前の形式:
    projects/project-number/locations/location-id/datasets/dataset-id
    • project-number: プロジェクトの番号。
    • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。
    • dataset-id: データセットの作成時に指定された ID

HTTP メソッドと URL:

DELETE  https://automl.googleapis.com/v1beta1/dataset-name

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

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