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

1. Objetivos

Visão geral

Este codelab vai se concentrar na criação de um aplicativo completo da Vertex AI Vision para enviar eventos com o recurso de gerenciamento de eventos. Vamos usar os recursos integrados do modelo especializado pré-treinado Análise de ocupação para gerar eventos com base nos seguintes dados:

  • Conte o número de veículos e pessoas atravessando uma estrada em uma determinada linha.
  • Contar o número de veículos/pessoas em qualquer região fixa da via.
  • Detectar 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 na Análise de ocupação e como usá-los
  • Como implantar o app
  • Como pesquisar vídeos no Media Warehouse da 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 e uma assinatura do Pub/Sub.
  • 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 Compute Engine e 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 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 da instância do Compute Engine (Beta), Armazenamento > Leitor de objeto do Storage † . Na lista Selecionar um papel, escolha uma funçã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 visualizador. Em vez disso, conceda um papel predefinido ou 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

Você pode usar o vaictl para transmitir os dados de vídeo para seu app de análise de ocupação.

Comece ativando a API Vision AI no Console do Cloud

Registrar uma nova transmissão

  1. Clique na guia "Streams" no painel à esquerda 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 exemplo

  1. É possível copiar um vídeo de exemplo com o comando gsutil cp a seguir. Substitua a seguinte variável:
  • FONTE: o local de um arquivo de vídeo a ser usado. Você pode usar sua própria origem de arquivo de vídeo (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, origem).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Ingerir dados no fluxo

  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 seu projeto do Google Cloud.
  • LOCATION_ID: o ID do local. Por exemplo, us-central1. Para mais informações, consulte Locais na nuvem.
  • 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 flag –loop, o vídeo será reproduzido em loop no stream até que o comando seja interrompido. Vamos executar esse comando como um job em segundo plano para que ele continue sendo transmitido.
  • Adicione nohup no início e "&' no final para torná-lo 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 transferência do vaictl e a exibição do vídeo 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"

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 no 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 pelo canal de eventos.

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

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

  1. Acesse a página de criação da IU do Cloud Function.
  2. Defina o nome da função, que será usado mais tarde 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 a parte do "código". Falha ao carregar o exemplo de criação de função do Cloud
  6. Edite a função do Cloud. Confira um exemplo com o 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 no botão "Implantar" para implantar a função.

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

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

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

Criar 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

Criar 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 sua configuração.

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

Você também pode usar a interface 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 o seguinte:

  • 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 transferência.
  • 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 repositório 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.

Crie 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.

Acesse a guia "Aplicativos"

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

Adicionar nós do componente 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 transmissão que ingere dados.
  2. Nó de processamento: o modelo de análise de ocupação que atua nos 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 repositórios de metadados incluem informações de análise sobre dados de vídeo ingeridos e informações inferidas pelos modelos de IA.

Adicione nós de componentes ao app no console.

  1. Abra a guia Aplicativos do painel da Vertex AI Vision. Acessar a guia "Aplicativos"
  2. Na linha do app de tráfego, selecione Ver gráfico. Isso leva você à visualização em 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 que é aberto, selecione Adicionar streams.
  3. No menu Adicionar streams, escolha Registrar novos streams e adicione traffic-stream como o 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ó de 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 de vários pontos para desenhar as linhas em que você precisa detectar carros ou pessoas saindo ou entrando.
  4. Desenhe as zonas ativas para contar pessoas/veículos nessa zona.
  5. Adição de configurações para o tempo de permanência para detectar congestionamento se uma zona ativa for desenhada.
  • A zona ativa no momento e a travessia de linha 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 (armazenamento) de saída, selecione a opção Armazenamento de mídia 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 warehouse como traffic-warehouse e deixe a duração do TTL em 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, vamos configurar 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, que ajuda a evitar que o canal de eventos seja inundado pelo mesmo evento em um curto período.

Selecionar a função do Cloud para o 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) no menu suspenso "Pós-processamento".
  3. O gráfico do aplicativo vai salvar suas mudanças automaticamente.

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

Configurar o canal de eventos

  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 evento" na seção "Notificação de eventos". Falha ao carregar o exemplo de notificação de evento
  3. Selecione o tópico do Pub/Sub no menu suspenso.
  4. (opcional) Defina o intervalo/frequência mínimo para a publicação de eventos.

Falha ao carregar o exemplo de caixa de diálogo de notificação de evento

8. Implantar o app para uso

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

  1. Abra a guia Aplicativos do painel da Vertex AI Vision. Acessar a guia "Aplicativos"
  2. Selecione Visualizar gráfico ao lado do app traffic-app na lista.
  3. Na página do criador de gráfico de aplicativo, clique no botão Implantar.
  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. Em seguida, esses eventos precisam ser publicados como mensagens pelo seu tópico do Pub/Sub e recebidos pela sua assinatura.

As etapas a seguir pressupõem que você tenha 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 de lista de assinaturas do Pub/Sub
  2. Acesse a guia "Mensagem".
  3. Clique no botão "puxar".
  4. Confira sua mensagem na tabela. Erro ao carregar a imagem da mensagem de assinatura 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 Moderadamente útil