Ative a saída de streams em direto

Depois de criar a stream de carregamento de dados e adicionar os nós de processamento à sua app, tem de escolher para onde enviar os dados processados. Uma opção é receber o resultado da app de stream em direto diretamente para poder agir com base nestas estatísticas em tempo real.

Em geral, configura a sua app para armazenar o resultado do modelo num Google Cloud armazém de dados, como o Media Warehouse do Vertex AI Vision ou o BigQuery. Depois de os dados serem armazenados num destes armazéns, podem ser usados para tarefas analíticas offline com base no gráfico da sua aplicação. No entanto, também pode receber os resultados do modelo de forma de streaming em direto. Pode fazer com que o Vertex AI Vision encaminhe os resultados do modelo para um recurso de stream e pode usar a ferramenta de linha de comandos (vaictl) ou a API Vertex AI Vision para os consumir em tempo real.

Supondo que tem o seguinte gráfico de aplicações com os seguintes três nós:

  1. O nó de origem de dados "Stream de entrada" (input-stream)
  2. O nó de processamento "Contagem de ocupação" (occupancy-count)
  3. O nó de destino de saída da app "Media Warehouse" (warehouse)

Atualmente, o resultado da app é enviado da stream para o processo de contagem de ocupação e, em seguida, para o Media Warehouse do Vertex AI Vision, onde é armazenado.

Configuração da app API:

Configuração de app de exemplo na Cloud Console
{
  "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"
        }
    ]
  }
}

Ative a saída de stream (Google Cloud consola)

Pode ativar a saída de stream na Google Cloud consola quando implementar o modelo pela primeira vez ou quando anular a implementação e, em seguida, voltar a implementar o modelo.

Consola

  1. Abra o separador Aplicações do painel de controlo do Vertex AI Vision.

    Aceda ao separador Aplicações

  2. Selecione Ver gráfico junto ao nome da aplicação na lista.

  3. Na página do criador de gráficos de aplicações, clique no botão Implementar.

  4. No menu de opções Implementar aplicação apresentado, selecione Ativar streaming de saída.

    Implemente o menu da app na consola

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

  6. Clique em Implementar

Ative a saída de stream (API)

Atualize o nó da app

Pode atualizar a configuração de uma app na linha de comandos para que um nó do modelo envie especificamente a saída para um fluxo.

Depois de concluir este passo, tem a opção de atualizar a instância da 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. Este pedido atualiza a configuração da app API da app de exemplo anterior para que o nó occupancy-count envie anotações de saída para uma stream do Vertex AI Vision. Este comportamento é ativado pelo campo output_all_output_channels_to_stream.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "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 o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

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

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$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 terminar, a operação devolve um estado 200 OK sem erros e o serviço atualiza o recurso da aplicação em conformidade.

Atualize a instância da app

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

Se não especificar uma stream com este comando, a plataforma de apps continua a usar uma stream predefinida criada quando o nó da app é implementado.

Tem de criar um recurso de stream para o qual o nó envia o resultado

antes de enviar o seguinte pedido.

REST

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

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT: o seu Google Cloud ID do projeto ou número do projeto.
  • LOCATION_ID: A região onde está a usar o Vertex AI Vision. Por exemplo: us-central1, europe-west4. Veja as regiões disponíveis.
  • APPLICATION_ID: o ID da sua aplicação de destino.
  • inputResources: o recurso (ou os recursos) de entrada para a instância da aplicação atual. Esta é 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 da app.
  • outputResources.producerNode: o nome do nó do produtor de saída da app. Neste exemplo, este é o nó de análise, occupancy-count.
  • INSTANCE_ID: o ID da instância da app.

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "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 o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

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

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$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 terminar, a operação devolve um estado 200 OK sem erros e o serviço atualiza a instância da aplicação em conformidade.