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 da Vertex AI Vision de ponta a ponta 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 na captura dos seguintes itens:

  • Conta o número de veículos e pessoas que atravessam uma rua em uma determinada linha.
  • Conte 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 ingerir vídeos para streaming
  • Como criar um aplicativo na Vertex AI Vision
  • Diferentes recursos disponíveis no Analytics 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 processe 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 na nuvem do Google. Observação: se você não pretende manter os recursos criados neste procedimento, crie um projeto novo em vez de selecionar um que já existe. 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

Criar uma conta de serviço:

  1. No Console do Google Cloud, acesse a página Criar conta de serviço. Acesse "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 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 (Beta), Storage > Leitor de objetos do Storage † . Na lista Selecionar um papel, escolha um. Para papéis adicionais, clique em Adicionar outro papel e adicione cada papel adicional. 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 uma função personalizada 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 CLI do Google Cloud.

† Função necessária apenas se você copiar 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 ao app de análise de ocupação.

Comece ativando a API Vision AI no Console do Cloud

Registrar um novo stream

  1. Clique na guia "Fluxos de cliques" no painel à esquerda da Vertex AI Vision.
  2. Clique em "Registrar"
  3. Em "Nome do stream", insira "traffic-stream".
  4. Em região, insira "us-central1".
  5. Clique em "Registrar".

O registro do stream leva alguns minutos.

Prepare um vídeo de amostra

  1. Você pode copiar um vídeo de amostra com o seguinte comando gsutil cp. Substitua a seguinte variável:
  • SOURCE: 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 usar o vídeo de amostra (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(vídeo com pessoas e veículos, fonte).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Ingerir dados no seu stream

  1. Para enviar esse arquivo de vídeo local para o fluxo 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: seu ID do local. Por exemplo, us-central1. Para mais informações, consulte Locais do Cloud.
  • LOCAL_FILE: o nome de arquivo de um arquivo de vídeo local. Por exemplo, street_vehicles_people.mp4.
  • –loop flag: opcional. Faz um loop nos 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á repetido no stream até que você interrompa o comando. Vamos executar esse comando como um job em segundo plano para que ele continue transmitindo.
  • ( adicione nohup no início e "&" no final para que seja 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 aparecimento do vídeo no painel.

Depois que a ingestão de stream estiver disponível, você poderá ver o feed de vídeo na guia Streams do painel da Vertex AI Vision selecionando o stream de tráfego.

Acessar a guia "Streams"

Visualização de vídeo ao vivo sendo transmitido na interfaceImagens 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 posteriormente pelo canal de eventos.

Saiba mais sobre o Cloud Functions aqui.

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

  1. Acesse a página de criação da interface do Cloud Functions.
  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 gatilho.
  5. Clique no botão "Próxima" para acessar a parte "código". Falha ao carregar o exemplo de criação da 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

Precisamos fornecer um tópico do Pub/Sub para o aplicativo, que pode enviar o evento para ele. Para receber os eventos, uma assinatura do Pub/Sub precisa se inscrever na opção configurada.

Saiba mais sobre o tópico do Pub/Sub aqui e a assinatura aqui.

Criar um tópico do Pub/Sub

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

gcloud pubsub topics create TOPIC_ID

Outra opção é usar a interface 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 \

Outra opção é 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 é ingerido 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 de apps, é 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. Insira 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 stream 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 serve como um repositório de metadados. Os armazenamentos 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. Acesse a guia "Aplicativos"
  2. Na linha de tráfego do app, selecione Ver gráfico. Isso leva você à visualização gráfica 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 de apps, 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. Adicione linhas em "Cruzamento de linhas". Use a ferramenta de linha multiponto para desenhar as linhas onde você precisa detectar carros ou pessoas saindo ou entrando.
  4. Desenhe as zonas ativas para contar pessoas/veículos nelas.
  5. Adicione configurações de tempo de permanência para detectar congestionamento se uma zona ativa for criada.
  • No momento, não é possível usar a zona ativa e a detecção de cruzamento de linha 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 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 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 pós-processamento. Assim, a função do Cloud pode processar livremente a saída do modelo e gerar eventos adequados à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 para evitar que o 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 sua Função do Cloud (identificada pelo nome da função) no menu suspenso "Pós-processamento".
  3. O gráfico de aplicativo salva as 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 evento". 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ínima para publicação de eventos.

Falha ao carregar o exemplo da 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 usar o app é implantá-lo.

  1. Abra a guia Aplicativos do painel da Vertex AI Vision. Acesse a guia "Aplicativos"
  2. Selecione Ver gráfico ao lado do app de trânsito na lista.
  3. Na página do criador de gráficos de aplicativos, 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 alguns minutos para ser concluída. Quando 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 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 no tópico do Pub/Sub e recebidos pela sua assinatura.

As etapas a seguir pressupõem que você tenha uma assinatura por 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 a guia "Mensagem".
  3. Clique no botão "pull".
  4. Confira sua mensagem na tabela. erro ao carregar a imagem da mensagem de assinatura do Pub/Sub

Ou saiba como 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 Razoavelmente útil