App Vertex AI Vision para análise de ocupação com gerenciamento de eventos

1. Objetivos

Visão geral

O foco deste codelab é a criação de um aplicativo completo da Vertex AI Vision para enviar eventos com o recurso de gerenciamento de eventos. Vamos usar o modelo especializado pré-treinado, Análise de ocupação. recursos integrados para gerar eventos com base na captura dos itens a seguir:

  • Conte o número de veículos e pessoas atravessando uma estrada em uma determinada linha.
  • Conte o número de veículos/pessoas em qualquer região fixa da estrada.
  • Detecção de congestionamento em qualquer parte da via.

O que você vai aprender

  • Como transferir vídeos para streaming
  • Como criar um aplicativo na Vertex AI Vision
  • Diferentes recursos disponíveis no Occupancy Analytics e como usá-los
  • Como implantar o app
  • Como pesquisar vídeos no armazenamento de mídia do Vertex AI Vision.
  • Como criar uma função do Cloud que processa os dados do modelo de análise de ocupação.
  • Como criar um tópico do Pub/Sub e assinatura.
  • Como configurar o gerenciamento de eventos para enviar eventos pelo tópico do Pub/Sub.

2. Antes de começar

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud. Observação: se você não quiser manter os recursos criados usando este procedimento, crie um projeto em vez de selecionar um atual. Depois de concluir essas etapas, é possível excluir o projeto. Para fazer isso, basta remover todos os recursos associados a ele. Acessar o seletor de projetos
  2. Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
  3. Ative as APIs do Compute Engine e da Vision AI. Ativar as APIs

Crie uma conta de serviço:

  1. No Console do Google Cloud, acesse a página Criar conta de serviço. Acessar "Criar conta de serviço"
  2. Selecione o projeto.
  3. No campo Nome da conta de serviço, insira um nome. O console do Google Cloud preenche o campo ID da conta de serviço com base nesse nome. No campo Descrição da conta de serviço, insira uma descrição. Por exemplo, conta de serviço para o guia de início rápido.
  4. Clique em Criar e continuar.
  5. Para fornecer acesso ao projeto, conceda os seguintes papéis à conta de serviço: Vision AI > Editor da Vision AI, Compute Engine > Administrador de instâncias do Compute (Beta), Armazenamento > Leitor de objetos do Storage † . Na lista Selecionar papel, escolha uma opção. Para papéis adicionais, clique em Adicionar outro papel e acrescente cada um deles. Observação: o campo Papel afeta quais recursos a conta de serviço pode acessar no projeto. É possível revogar esses papéis ou conceder outros papéis posteriormente. Em ambientes de produção, não conceda os papéis de Proprietário, Editor ou Leitor. Em vez disso, conceda um papel predefinido ou um papel personalizado que atenda às suas necessidades.
  6. Clique em Continuar.
  7. Clique em Concluído para terminar a criação da conta de serviço. Não feche a janela do navegador. Você vai usá-lo na próxima etapa.

Crie uma chave de conta de serviço:

  1. No console do Google Cloud, clique no endereço de e-mail da conta de serviço que você criou.
  2. Clique em Chaves.
  3. Clique em Adicionar chave e em Criar nova chave.
  4. Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
  5. Clique em Fechar.
  6. Instale e inicialize a Google Cloud CLI.

† O papel só é necessário se você copia um arquivo de vídeo de amostra de um bucket do Cloud Storage.

3. Ingerir um arquivo de vídeo para streaming

Use vaictl para transmitir os dados do vídeo para seu app de análise de ocupação.

Para começar, ative a API Vision AI no console do Cloud

Registrar uma nova transmissão

  1. Clique na guia "Streams" no painel esquerdo da Vertex AI Vision.
  2. Clique em "Registrar"
  3. No nome do fluxo, insira "traffic-stream".
  4. Na região, insira "us-central1"
  5. Clique em "Registrar"

O registro da transmissão leva alguns minutos.

Preparar um vídeo de amostra

  1. É possível copiar um vídeo de amostra com o seguinte comando gsutil cp. Substitua a seguinte variável:
  • FONTE: a localização de um arquivo de vídeo. É possível usar uma origem de arquivo de vídeo própria (por exemplo, gs://BUCKET_NAME/FILENAME.mp4) ou o vídeo de exemplo (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 )(vídeo com pessoas e veículos, source)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Ingerir os dados no stream

  1. Para enviar esse arquivo de vídeo local ao stream de entrada do app, use o comando a seguir. Faça as seguintes substituições de variáveis:
  • PROJECT_ID: é o ID do projeto do Google Cloud.
  • LOCATION_ID: ID do local. Por exemplo, us-central1. Para mais informações, consulte Locais do Cloud.
  • LOCAL_FILE: o nome de um arquivo de vídeo local. Por exemplo, Street_vehicles_people.mp4.
  • flag –loop: opcional. Repete os dados do arquivo para simular o streaming.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. Esse comando transmite um arquivo de vídeo para um stream. Se você usar a sinalização –loop, o vídeo será repetido no stream até que você interrompa o comando. Executaremos esse comando como um job em segundo plano para que ele continue transmitindo.
  • ( adicione "nohup" no início e "&" no final para criar um job em segundo plano.)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

Pode levar cerca de 100 segundos entre o início da operação de ingestão do vaictl e o vídeo que aparece no painel.

Depois que a ingestão de streaming estiver disponível, selecione o fluxo de tráfego para ver o feed de vídeo na guia Streams do painel da Vertex AI Vision.

Acessar a guia "Streams"

Visualização do vídeo ao vivo sendo transmitido na interfaceImagem ao vivo do vídeo sendo ingerido no stream no console do Google Cloud. Crédito do vídeo: Elizabeth Mavor em Pixabay (pixelização adicionada).

4. Criar uma função do Cloud

Vamos precisar de uma função do Cloud para processar os dados do modelo e gerar eventos que serão enviados posteriormente pelo canal do evento.

Saiba mais sobre a função do Cloud neste link

Criar uma função do Cloud que detecta seu modelo

  1. Navegue até a página de criação da interface de funções do Cloud.
  2. Defina o nome da função, que será usada posteriormente para se referir a essa função do Cloud nas configurações de gerenciamento de eventos.
  3. Verifique se a região corresponde ao seu aplicativo.
  4. Ajuste e salve as configurações do acionador.
  5. Clique no botão “Próxima” para acessar o "código" parte. Falha ao carregar o exemplo de criação da função do Cloud
  6. Edite a função do Cloud. Confira um exemplo com ambiente de execução do Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. Clique em "Implantar" para implantar a função.

5. Criar tópico do Pub/Sub e assinatura

É preciso fornecer um tópico do Pub/Sub ao aplicativo para que ele envie o evento. Para receber os eventos, uma assinatura do Pub/Sub precisa se inscrever na ótica configurada.

Saiba mais sobre os tópicos do Pub/Sub aqui e sobre as assinaturas aqui.

Crie um tópico do Pub/Sub

Para criar um tópico do Pub/Sub, use a gcloud CLI: substitua SUBSCRIPTION_ID pelo valor real da configuração.

gcloud pubsub topics create TOPIC_ID

Como alternativa, use a IU do Pub/Sub

Crie uma assinatura do Pub/Sub

Para criar uma assinatura do Pub/Sub, use a CLI gcloud: substitua SUBSCRIPTION_ID e TOPIC_ID pelo valor real da configuração.

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

Como alternativa, use a IU do Pub/Sub

6. Criar um aplicativo

A primeira etapa é criar um app que processe seus dados. Um app pode ser considerado um pipeline automatizado que conecta:

  • Ingestão de dados: um feed de vídeo é processado em um stream.
  • Análise de dados: um modelo de IA(visão computacional) pode ser adicionado após a ingestão.
  • Armazenamento de dados: as duas versões do feed de vídeo (o stream original e o stream processado pelo modelo de IA) podem ser armazenadas em um warehouse de mídia.

No console do Google Cloud, um app é representado como um gráfico.

Criar um app vazio

Antes de preencher o gráfico do app, é necessário criar um app vazio.

Criar um app no console do Google Cloud.

  1. Acesse o console do Google Cloud.
  2. Abra a guia Aplicativos do painel da Vertex AI Vision.

Acessar a guia "Aplicativos"

  1. Clique no botão Criar.
  2. Digite "traffic-app" como nome do app e escolha sua região.
  3. Clique em Criar.

Adicionar nós dos componentes do app

Depois de criar o aplicativo vazio, adicione os três nós ao gráfico do app:

  1. Nó de ingestão: o recurso de stream que ingere dados.
  2. Nó de processamento: o modelo de análise de ocupação que atua sobre dados ingeridos.
  3. Nó de armazenamento: o warehouse de mídia que armazena vídeos processados e funciona como um repositório de metadados. Os armazenamentos de metadados incluem informações analíticas sobre dados de vídeo ingeridos e informações inferidas pelos modelos de IA.

Adicione nós de componentes ao seu app no console.

  1. Abra a guia Aplicativos do painel da Vertex AI Vision. Acessar a guia "Aplicativos"
  2. Na linha Traffic-app, selecione Ver gráfico. Isso leva você à visualização do gráfico do pipeline de processamento.

Adicionar um nó de ingestão de dados

  1. Para adicionar um nó de stream de entrada, selecione a opção Streams na seção Conectores do menu lateral.
  2. Na seção Origem do menu Stream, selecione Adicionar streams.
  3. No menu Adicionar streams, escolha Registrar novos streams e adicione "Traffic-stream" como nome do stream.
  4. Para adicionar o stream ao gráfico do app, clique em Adicionar streams.

Adicionar um nó de processamento de dados

  1. Para adicionar o nó do modelo de contagem de ocupação, selecione a opção Análise de ocupação na seção Modelos especializados do menu lateral.
  2. Deixe as seleções padrão Pessoas e Veículos.
  3. Adicionar linhas no cruzamento de linhas. Use a ferramenta de linha multiponto para desenhar os pontos necessários para detectar a entrada e saída de carros ou pessoas.
  4. Desenhe as zonas ativas para contar pessoas/veículos.
  5. Adicione configurações de tempo de permanência para detectar congestionamento se uma zona ativa for desenhada.
  • No momento, a zona ativa e o cruzamento de linhas não são compatíveis simultaneamente. Use apenas um recurso por vez.

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Adicionar um nó de armazenamento de dados

  1. Para adicionar o nó de destino de saída (armazenamento), selecione a opção Media Warehouse da Vertex AI Vision na seção Conectores do menu lateral.
  2. No menu Media Warehouse da Vertex AI Vision, clique em Conectar warehouse.
  3. No menu Conectar warehouse, selecione Criar novo warehouse. Nomeie o armazém de tráfego do armazém e deixe a duração de TTL como 14 dias.
  4. Clique no botão Criar para adicionar o warehouse.

7. Configurar o gerenciamento de eventos

Duração: 02:00

Vamos conectar o modelo à função do Cloud criada anteriormente para o pós-processamento, onde ela poderá processar livremente a saída do modelo e gerar eventos que atendam às suas necessidades. Em seguida, configuraremos o canal de eventos definindo o tópico do Pub/Sub criado anteriormente como nosso destino. Também é possível definir um intervalo mínimo para evitar que seu canal de eventos seja inundado pelo mesmo evento em um curto período.

Selecionar a função do Cloud para pós-processamento

  1. Clique no nó de processamento de dados(análise de ocupação) no gráfico do aplicativo para abrir o menu lateral.
  2. Selecione a função do Cloud (identificada pelo nome dela) no menu suspenso "Pós-processamento".
  3. O gráfico do aplicativo salvará as alterações automaticamente.

Falha ao carregar o exemplo de configuração de pós-processamento

Configurar o canal do evento

  1. Clique no nó de processamento de dados(análise de ocupação) no gráfico do aplicativo para abrir o menu lateral.
  2. Clique em "CONFIGURAR NOTIFICAÇÃO DE EVENTOS" na seção "Notificação de eventos". Falha ao carregar o exemplo de notificação de evento
  3. Selecione seu tópico do Pub/Sub no menu suspenso.
  4. (opcional) defina a frequência/o intervalo mínimo para a publicação de eventos.

Falha ao carregar a caixa de diálogo de notificação de eventos

8. Implantar o app para uso

Depois de criar seu app completo com todos os componentes necessários, a última etapa para usar o app é implantá-lo.

  1. Abra a guia Aplicativos do painel da Vertex AI Vision. Acessar a guia "Aplicativos"
  2. Selecione Ver gráfico ao lado do app de tráfego na lista.
  3. Na página do criador de gráficos do aplicativo, clique no botão Deploy.
  4. Na caixa de diálogo de confirmação a seguir, selecione Implantar. A operação de implantação pode levar vários minutos para ser concluída. Depois que a implantação for concluída, marcas de seleção verdes vão aparecer ao lado dos nós. ee78bbf00e5db898.png

9. Verificar eventos/mensagens na assinatura do Pub/Sub

Depois de ingerir dados de vídeo no seu app de processamento, a função do Cloud vai gerar eventos quando o modelo de análise de ocupação gerar anotações. Depois esses eventos devem ser publicados como mensagens pelo seu tópico do Pub/Sub recebidos pela sua assinatura.

As etapas a seguir pressupõem que você tem uma assinatura de pull.

  1. Abra a lista de assinaturas do Pub/Sub no seu projeto e encontre a assinatura correspondente. Acessar a página da lista de assinaturas do Pub/Sub
  2. Acesse "Mensagem" .
  3. Clique em "Puxar" .
  4. Veja sua mensagem na tabela. erro ao carregar a imagem da mensagem de inscrição do Pub/Sub

Como alternativa, você pode aprender a receber mensagens sem interface. Acessar a página de assinatura

10. Parabéns

Parabéns, você concluiu o laboratório.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto ou mantenha o projeto e exclua cada um dos recursos.

Excluir o projeto

Excluir recursos individuais

Recursos

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

Feedback

Clique aqui para enviar feedback

Pesquisa

Como você vai usar este tutorial?

Apenas leitura Leitura e exercícios

Este codelab foi útil?

Muito útil Útil