Ativar a saída de transmissão ao vivo

Depois de criar o fluxo de ingestão de dados e adicionar os nós de processamento ao app, você precisa escolher para onde enviar os dados processados. Uma opção é receber a saída do app de transmissão ao vivo diretamente para que você possa agir com base nessas análises em tempo real.

Em geral, você configura o app para armazenar a saída do modelo em um armazém de dadosGoogle Cloud , como o Media Warehouse da Vertex AI Vision ou o BigQuery. Depois que os dados são armazenados em um desses repositórios, eles podem ser usados para jobs de análise off-line com base no gráfico do aplicativo. No entanto, você também pode receber as saídas do modelo em uma transmissão ao vivo. É possível fazer com que a Vertex AI Vision encaminhe as saídas do modelo para um recurso de stream e usar a ferramenta de linha de comando (vaictl) ou a API Vertex AI Vision para consumi-las em tempo real.

Suponha que você tenha o seguinte gráfico de aplicativo com os três nós a seguir:

  1. O nó da origem de dados "Fluxo de entrada" (input-stream)
  2. O nó de processamento "Occupancy Count" (occupancy-count)
  3. O nó de destino de saída do app "Media Warehouse" (warehouse)

No momento, a saída do app é enviada do stream para o processo de contagem de ocupação e, em seguida, para o Media Warehouse da Vertex AI Vision, onde é armazenada.

Configuração do app da API:

Exemplo de configuração do app no console do 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"
        }
    ]
  }
}

Ativar a saída de streaming (console do Google Cloud)

É possível ativar a saída de fluxo no console do Google Cloud ao implantar seu modelo pela primeira vez ou ao remover e implantar o modelo novamente.

Console

  1. Abra a guia Aplicativos do painel da Vertex AI Vision.

    Acesse a guia "Aplicativos"

  2. Selecione Ver gráfico ao lado do nome do aplicativo na lista.

  3. Na página do criador de gráfico de aplicativo, clique no botão Implantar.

  4. No menu de opções Deploy application que aparece, selecione Enable output streaming.

    Menu "deploy app" no console

  5. No menu suspenso Modelos correspondente, selecione os modelos para os quais você quer ativar a saída de streaming.

  6. Clique em Implantar.

Ativar a saída de streaming (API)

Atualizar o nó do app

É possível atualizar a configuração de um app na linha de comando para que um nó de modelo envie especificamente a saída para um stream.

Depois de concluir esta etapa, você pode atualizar a instância do app para especificar o recurso de stream que recebe os dados de saída do nó de análise.

REST

Este exemplo usa o método projects.locations.applications.patch. Essa solicitação atualiza a configuração do app da API do app de exemplo anterior para que o nó occupancy-count envie anotações de saída para um fluxo da Vertex AI Vision. Esse comportamento é ativado pelo campo output_all_output_channels_to_stream.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "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
        }
    ]
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$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
Se a operação de atualização for concluída, ela retornará um status 200 OK sem nenhum erro, e o serviço vai atualizar o recurso do aplicativo conforme necessário.

Atualizar a instância do app

O exemplo anterior mostra como atualizar o app, o que permite que o nó de destino envie a saída para um stream. Depois de ativar essa opção, é possível atualizar a instância do app para especificar o recurso de stream que recebe os dados de saída do nó de análise.

Se você não especificar um stream com esse comando, a plataforma do app continuará usando um stream padrão criado quando o nó do app for implantado.

É necessário criar um recurso de stream para o qual o nó envie a saída.

antes de enviar a solicitação a seguir.

REST

Este exemplo usa o método projects.locations.applications.updateApplicationInstances. Essa solicitação usa a configuração atualizada do app de API do app de exemplo anterior. O comando de atualização anterior definiu o nó occupancy-count para poder enviar anotações de saída para um fluxo da Vertex AI Vision. Esse comando atualiza a instância do app para enviar os dados do nó occupancy-count do produtor para um recurso de stream existente.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT: o ID ou o número do projeto do Google Cloud.
  • LOCATION_ID: a região em que você está usando a Vertex AI Vision. Por exemplo: us-central1, europe-west4. Consulte as regiões disponíveis.
  • APPLICATION_ID: o ID do aplicativo de destino.
  • inputResources: o recurso (ou recursos) de entrada para a instância atual do aplicativo. É uma matriz de objetos que contém os seguintes campos:
    • consumerNode: o nome do nó do gráfico que recebe o recurso de entrada.
    • inputResource: o nome completo do recurso de entrada.
  • outputResources.outputResource: o recurso stream para gerar dados do app.
  • outputResources.producerNode: o nome do nó do produtor de saída do app. Neste exemplo, este é o nó de análise, occupancy-count.
  • INSTANCE_ID: o ID da instância do app.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "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
    }
  ]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$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
Se a operação de atualização for concluída, ela retornará um status 200 OK sem nenhum erro, e o serviço vai atualizar a instância do aplicativo conforme necessário.