ライブ ストリーム出力を有効にする

データ取り込みストリームを作成し、アプリに処理ノードを追加したら、処理されたデータの送信先を選択する必要があります。1 つの方法は、ライブ配信アプリの出力を直接受け取り、これらのリアルタイム分析に基づいてアクションを実行することです。

一般に、モデルの出力をGoogle Cloud データ ウェアハウス(Vertex AI Vision の Media Warehouse や BigQuery など)に保存するようにアプリを構成します。データがこれらのウェアハウスのいずれかに保存されると、アプリケーション グラフに基づいてオフライン分析ジョブに使用できます。ただし、モデルの出力をライブ ストリーミングで受け取ることもできます。Vertex AI Vision でモデル出力をストリーム リソースに転送し、コマンドライン ツール(vaictl)または Vertex AI Vision API を使用してリアルタイムで消費できます。

次の 3 つのノードを含むアプリケーション グラフがあるとします。

  1. データソースノード「入力ストリーム」(input-stream
  2. 処理ノード「Occupancy Count」(occupancy-count
  3. アプリの出力先ノード「メディア ウェアハウス」(warehouse

アプリの出力は現在、ストリームから占有数プロセスに送信され、Vertex AI Vision の Media Warehouse に送信されて保存されます。

API アプリの構成:

Cloud コンソールでのサンプルアプリの構成
{
  "applicationConfigs": {
    "nodes": [
        {
          "displayName": "Input Stream",
          "name": "input-stream",
          "processor": "builtin:stream-input"
        },
        {
          "displayName": "Occupancy Count",
          "name": "occupancy-count",
          "nodeConfig": {
            "occupancyCountConfig": {
              "enablePeopleCounting": true,
              "enableVehicleCounting": true
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            }
          ],
          "processor": "builtin:occupancy-count"
        },
        {
          "displayName": "Media Warehouse",
          "name": "warehouse",
          "nodeConfig": {
            "mediaWarehouseConfig": {
              "corpus": "projects/PROJECT_ID/locations/LOCATION_ID/corpora/CORPUS_ID",
              "ttl": "86400s"
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            },
            {
              "parentNode": "occupancy-count"
            }
          ],
          "processor": "builtin:media-warehouse"
        }
    ]
  }
}

ストリーム出力を有効にする(Google Cloud コンソール)

ストリーム出力は、最初にモデルをデプロイするとき、またはモデルをデプロイ解除してから再デプロイするときに、 Google Cloud コンソールで有効にできます。

コンソール

  1. Vertex AI Vision ダッシュボードの [アプリケーション] タブを開きます。

    [アプリケーション] タブに移動

  2. リストからアプリケーションの名前の横にある [グラフを表示] を選択します。

  3. アプリケーション グラフ ビルダー ページで [デプロイ] ボタンをクリックします。

  4. 表示された [Deploy application] オプション メニューで、出力ストリーミングを有効にするを選択します。

    コンソールのアプリ メニューをデプロイする

  5. 対応する [モデル] プルダウン メニューから、ストリーミング出力の有効化を希望するモデルを 選択します。

  6. [デプロイ] をクリックします。

ストリーム出力を有効にする(API)

アプリノードを更新する

コマンドラインでアプリの構成を更新して、モデルノードが特定のストリームに出力を送信するようにできます。

この手順を完了すると、アプリ インスタンスを更新して、分析ノードの出力データを受信するストリーム リソースを指定できます。

REST

この例では、projects.locations.applications.patch メソッドを使用します。このリクエストは、前のサンプルアプリから API アプリの構成を更新して、occupancy-count ノードが出力アノテーションを Vertex AI Vision ストリームに送信するようにします。この動作は、output_all_output_channels_to_stream フィールドで有効になります。

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

HTTP メソッドと URL:

PATCH https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID

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

{
  "applicationConfigs": {
    "nodes": [
        {
          "displayName": "Input Stream",
          "name": "input-stream",
          "processor": "builtin:stream-input"
        },
        {
          "displayName": "Occupancy Count",
          "name": "occupancy-count",
          "nodeConfig": {
            "occupancyCountConfig": {
              "enablePeopleCounting": true,
              "enableVehicleCounting": true
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            }
          ],
          "processor": "builtin:occupancy-count",
          "output_all_output_channels_to_stream": true
        }
    ]
  }
}

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

curl

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

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID"

PowerShell

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

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

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID" | Select-Object -Expand Content
更新オペレーションが完了すると、オペレーションはエラーなしで 200 OK ステータスを返し、サービスはそれに応じてアプリケーション リソースを更新します。

アプリ インスタンスを更新する

前のサンプルは、アプリを更新して、ターゲット ノードが出力をストリームに送信できるようにする方法を示しています。このオプションを有効にしたら、必要に応じてアプリ インスタンスを更新して、分析ノードの出力データを受信するストリーム リソースを指定できます。

このコマンドでストリームを指定しない場合、アプリ プラットフォームはアプリノードのデプロイ時に作成されたデフォルトのストリームを引き続き使用します。

ノードが出力を送信するストリーム リソースを作成する必要があります。

次のリクエストを送信する前に、

REST

この例では、projects.locations.applications.updateApplicationInstances メソッドを使用します。このリクエストでは、前のサンプルアプリから更新された API アプリの構成を使用します。前の更新コマンドでは、occupancy-count ノードが Vertex AI Vision ストリームに出力アノテーションを送信できるように設定しました。このコマンドは、そのプロデューサー occupancy-count ノードから既存のストリーム リソースにデータを送信するようにアプリ インスタンスを更新します。

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

  • PROJECT: Google Cloud プロジェクト ID またはプロジェクト番号
  • LOCATION_ID: Vertex AI Vision を使用しているリージョン。たとえば、us-central1europe-west4 などです。利用可能なリージョンをご覧ください。
  • APPLICATION_ID: ターゲット アプリケーションの ID。
  • inputResources: 現在のアプリケーション インスタンスの入力リソース。これは、次のフィールドを含むオブジェクトの配列です。
    • consumerNode: 入力リソースを受け取るグラフノードの名前。
    • inputResource: 入力リソースの完全な名前。
  • outputResources.outputResource: アプリデータを出力する stream リソース。
  • outputResources.producerNode: アプリの出力プロデューサー ノード名。この例では、これは分析ノード occupancy-count です。
  • INSTANCE_ID: アプリ インスタンスの ID。

HTTP メソッドと URL:

POST https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances

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

{
  "applicationInstances": [
    {
      "instance": {
        "inputResources": [
          {
            "consumerNode": "input-stream",
            "inputResource": "projects/PROJECT_NUMBER/locations/LOCATION_ID/clusters/application-cluster-0/streams/INPUT_STREAM_ID"
          }
        ],
        "outputResources":[
          {
            "outputResource": "projects/PROJECT_NUMBER/locations/LOCATION_ID/clusters/application-cluster-0/streams/OUTPUT_STREAM_ID",
            "producerNode": "occupancy-count"
          }
        ]
      },
      "instanceId": INSTANCE_ID
    }
  ]
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances"

PowerShell

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

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

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances" | Select-Object -Expand Content
更新オペレーションが完了すると、オペレーションはエラーなしで 200 OK ステータスを返し、サービスはそれに応じてアプリケーション インスタンスを更新します。