라이브 스트림 출력 사용 설정

데이터 수집 스트림을 만들고 앱에 처리 노드를 추가한 후에는 처리된 데이터를 보낼 위치를 선택해야 합니다. 한 가지 옵션은 실시간 분석에 따라 조치를 취할 수 있도록 라이브 스트림 앱 출력을 직접 수신하는 것입니다.

일반적으로 모델 출력을 Gemini Enterprise Agent Platform Vision의 Media Warehouse 또는 BigQuery와 같은 Google Cloud 데이터 웨어하우스에 저장하도록 앱을 구성합니다. 데이터가 이러한 웨어하우스 중 하나에 저장되면 애플리케이션 그래프를 기반으로 오프라인 분석 작업에 사용할 수 있습니다. 하지만 라이브 스트리밍 방식으로 모델 출력을 수신할 수도 있습니다. Gemini Enterprise Agent Platform Vision에서 모델 출력을 스트림 리소스로 전달하도록 할 수 있으며 명령줄 도구(vaictl) 또는 Gemini Enterprise Agent Platform Vision API를 사용하여 실시간으로 사용할 수 있습니다.

다음 세 개의 노드가 있는 애플리케이션 그래프가 있다고 가정해 보겠습니다.

  1. 데이터 소스 노드 '입력 스트림'(input-stream)
  2. 처리 노드 '점유율 수'(occupancy-count)
  3. 앱 출력 대상 노드 'Media Warehouse'(warehouse)

현재 앱 출력은 스트림에서 점유율 수 프로세스로 전송된 후 Gemini Enterprise Agent Platform 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. Gemini Enterprise Agent Platform Vision 대시보드의 애플리케이션 탭을 엽니다.

    애플리케이션 탭으로 이동

  2. 목록에서 애플리케이션 이름 옆에 있는 그래프 보기 를 선택합니다.

  3. 애플리케이션 그래프 빌더 페이지에서 배포 버튼을 클릭합니다.

  4. 열리는 애플리케이션 배포 옵션 메뉴에서 선택 출력 스트리밍 사용 설정을 선택합니다.

    콘솔에서 앱 메뉴 배포

  5. 해당 모델 드롭다운 메뉴에서 스트리밍 출력을 사용 설정할 모델을 선택합니다.

  6. 배포 를 클릭합니다.

스트림 출력 사용 설정 (API)

앱 노드 업데이트

명령줄에서 앱의 구성을 업데이트하여 모델 노드가 출력을 스트림으로만 전송하도록 할 수 있습니다.

이 단계를 완료한 후에는 분석 노드 출력 데이터를 수신하는 스트림 리소스를 지정하도록 앱 인스턴스를 업데이트할 수 있습니다.

REST

이 예시에서는 projects.locations.applications.patch 메서드를 사용합니다. 이 요청은 이전 샘플 앱의 API 앱 구성을 업데이트하여 occupancy-count 노드가 출력 주석을 Gemini Enterprise Agent Platform 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 노드가 출력 주석을 Gemini Enterprise Agent Platform Vision 스트림으로 전송할 수 있도록 설정했습니다. 이 명령어 는 앱 인스턴스를 업데이트하여 해당 프로듀서 occupancy-count 노드의 데이터를 기존 스트림 리소스로 전송합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT: 프로젝트 ID 또는 프로젝트 번호입니다. Google Cloud
  • LOCATION_ID: Agent Platform Vision을 사용하는 리전입니다. 예: us-central1, europe-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 상태를 반환하고 서비스는 애플리케이션 인스턴스를 적절하게 업데이트합니다.