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

データ取り込みストリームを作成してアプリに処理ノードを追加したら、処理されたデータを送信する場所を選択する必要があります。ライブ配信アプリの出力を直接受信して、リアルタイム分析に基づいて対応する方法もあります。

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

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

  1. データソース ノード「入力ストリーム」(input-stream
  2. 処理ノード「占有人数」(occupancy-count)
  3. アプリ出力の宛先ノード「Media Warehouse」(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 コンソール)

ストリーム出力を有効にするには、最初にモデルをデプロイするか、モデルをデプロイ解除してから再デプロイします。

Console

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

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

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

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

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

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

  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 アプリ構成を使用します。前の更新コマンドで、出力アノテーションを Vertex AI Vision ストリームに送信できるように occupancy-count ノードを設定しました。このコマンドは、そのプロデューサー 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 ステータスを返します。サービスはそれに応じてアプリケーション インスタンスを更新します。