1. Objetivos
Visão geral
Este codelab vai se concentrar na criação de um aplicativo completo da Vertex AI Vision para monitorar imagens de vídeo de tráfego em tempo real. Vamos usar os recursos integrados do modelo especializado pré-treinado Análise de ocupação para capturar as seguintes informações:
- Contar o número de veículos e pessoas que cruzam uma estrada em uma determinada linha.
- Contar o número de veículos/pessoas em qualquer região fixa da via.
- Detecção de congestionamento em qualquer parte da via.
O que você vai aprender
- Como configurar uma VM para importar 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 Media Warehouse da Vertex AI Vision.
- Como conectar a saída ao BigQuery, escrever uma consulta SQL para extrair insights da saída JSON do modelo e visualizar o resultado no Looker Studio em tempo real.
2. Antes de começar
- 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
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
- Ative as APIs Compute Engine e Vision AI. Ativar as APIs
Crie uma conta de serviço:
- No Console do Google Cloud, acesse a página Criar conta de serviço. Acesse "Criar conta de serviço"
- Selecione o projeto.
- 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.
- Clique em Criar e continuar.
- 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 papel, escolha uma opção. 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 Leitor. Em vez disso, conceda um papel predefinido ou personalizado que atenda às suas necessidades.
- Clique em Continuar.
- 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:
- No console do Google Cloud, clique no endereço de e-mail da conta de serviço que você criou.
- Clique em Chaves.
- Clique em Adicionar chave e em Criar nova chave.
- Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
- Clique em Fechar.
- Instale e inicialize a CLI do Google Cloud.
† Função necessária apenas se você copiar um arquivo de vídeo de exemplo de um bucket do Cloud Storage.
3. Configurar uma VM para transmitir vídeos
Antes de criar um app no Ocupação por Analytics, você precisa registrar um stream que possa ser usado posteriormente pelo app.
Neste tutorial, você cria uma instância de VM do Compute Engine que hospeda um vídeo e envia os dados de streaming de vídeo da VM.
Criar uma VM do Linux
A primeira etapa para enviar vídeos de uma instância de VM do Compute Engine é criar a instância de VM.
- No console, acesse a página Instâncias de VM. Acessar instâncias de VM
- Selecione o projeto e clique em Continuar.
- Clique em Criar instância.
- Especifique um Nome para sua VM. Saiba mais em Convenção de nomenclatura de recursos.
- Opcional: altere a zona desta VM. O Compute Engine organiza aleatoriamente a lista de zonas em cada região para incentivar o uso em várias zonas.
- Aceite as outras opções padrão. Para mais informações sobre essas opções, consulte Criar e iniciar uma VM.
- Para criar e iniciar a VM, clique em Criar.
Configurar o ambiente da VM
Depois que a VM for iniciada, use o console para se conectar via SSH à VM pelo navegador. Em seguida, faça o download da ferramenta de linha de comando vaictl para transferir vídeos para o stream.
Estabeleça uma conexão SSH com sua VM
- No console, acesse a página Instâncias de VM. Acessar instâncias de VM
- Na seção Conectar da linha de instância criada, clique em SSH. Isso abre uma conexão SSH em uma nova janela do navegador.
Fazer o download da ferramenta de linha de comando vaictl
- Na janela SSH no navegador, faça o download da ferramenta de linha de comando da Vertex AI Vision (vaictl) usando o seguinte comando:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
- Instale a ferramenta de linha de comando executando o seguinte comando:
sudo apt install ./visionai_0.0-4_amd64.deb
- Para testar a instalação, execute o seguinte comando:
vaictl --help
4. Ingerir um arquivo de vídeo para streaming
Depois de configurar o ambiente da VM, copie um arquivo de vídeo de exemplo e use o vaictl para transmitir os dados de vídeo para o app de análise de ocupação.
Comece ativando a API Vision AI no Console do Cloud
Registrar uma nova transmissão
- Clique na guia "Streams" no painel esquerdo da Vertex AI Vision.
- Clique em "Registrar".
- No nome do fluxo, insira "traffic-stream".
- Na região, insira "us-central1".
- Clique em "Registrar".
O registro da transmissão leva alguns minutos.
Copiar um vídeo de exemplo para a VM
- Na janela SSH no navegador da VM, copie um vídeo de exemplo com o comando gsutil cp abaixo. 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 .
Transmitir vídeos do VM e ingerir dados no stream
- 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: 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
- 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. Vamos executar esse comando como um job em segundo plano para que ele continue o streaming mesmo depois que a VM for desconectada.
- 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 transferência de stream estiver disponível, selecione o stream de tráfego na guia Streams do painel da Vertex AI Vision para conferir o feed de vídeo.
Imagem 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).
5. 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 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.
Criar um app no console do Google Cloud.
- Acesse o console do Google Cloud.
- Abra a guia Aplicativos do painel da Vertex AI Vision.
- Clique no botão Criar.
- Digite traffic-app como o nome do app e escolha sua região.
- 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:
- Nó de ingestão: o recurso de stream que ingere dados enviados de uma instância de VM do Compute Engine criada por você.
- Nó de processamento: o modelo de análise de ocupação que atua nos dados ingeridos.
- Nó de armazenamento: o repositório de mídia que armazena vídeos processados e serve como 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 seu app no console.
- Abra a guia Aplicativos do painel da Vertex AI Vision. Acesse a guia "Aplicativos"
- Na linha Traffic-app, selecione Ver gráfico. Isso leva você à visualização em gráfico do pipeline de processamento.
Adicionar um nó de ingestão de dados
- Para adicionar um nó de stream de entrada, selecione a opção Streams na seção Conectores do menu lateral.
- Na seção Origem do menu Stream que é aberto, selecione Adicionar streams.
- No menu Adicionar streams, escolha Registrar novos streams e adicione "Traffic-stream" como nome do stream.
- Para adicionar o stream ao gráfico do app, clique em Adicionar streams.
Adicionar um nó de processamento de dados
- 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.
- Deixe as seleções padrão Pessoas e Veículos.
- 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.
- Desenhe as zonas ativas para contar pessoas/veículos.
- 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.
Adicionar um nó de armazenamento de dados
- 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.
- No menu Media Warehouse da Vertex AI Vision, clique em Conectar warehouse.
- No menu Conectar warehouse, selecione Criar novo warehouse. Nomeie o warehouse como traffic-warehouse e deixe a duração do TTL em 14 dias.
- Clique no botão Criar para adicionar o warehouse.
6. Conectar a saída à tabela do BigQuery
Quando você adiciona um conector do BigQuery ao seu app da Vertex AI Vision, todas as saídas do modelo do app conectado são processadas na tabela de destino.
Você pode criar sua própria tabela do BigQuery e especificar essa tabela ao adicionar um conector do BigQuery ao app ou permitir que a plataforma do app Vertex AI Vision crie a tabela automaticamente.
Criação automática de tabelas
Se você permitir que a plataforma de apps da Vertex AI Vision crie a tabela automaticamente, poderá especificar essa opção ao adicionar o nó do conector do BigQuery.
As condições de conjunto de dados e tabela a seguir se aplicam se você quiser usar a criação automática de tabelas:
- Conjunto de dados: o nome do conjunto de dados criado automaticamente é visionai_dataset.
- Tabela: o nome da tabela criada automaticamente é visionai_dataset.APPLICATION_ID.
- Tratamento de erros:
- Se a tabela com o mesmo nome no mesmo conjunto de dados existir, nenhuma criação automática vai acontecer.
- Abra a guia Aplicativos do painel da Vertex AI Vision. Acesse a guia "Aplicativos"
- Selecione Ver app ao lado do nome do aplicativo na lista.
- Na página do criador de aplicativos, selecione BigQuery na seção Conectores.
- Deixe o campo Caminho do BigQuery em branco.
- Em Armazenar metadados de:, selecione apenas "Google Analytics de ocupação" e desmarque as transmissões.
O gráfico final do app vai ficar assim:
7. Implantar o app para uso
Depois de criar o app completo com todos os componentes necessários, a última etapa para usá-lo é implantar.
- Abra a guia Aplicativos do painel da Vertex AI Vision. Acesse a guia "Aplicativos"
- Selecione Visualizar gráfico ao lado do app traffic-app na lista.
- Na página do criador de gráficos do aplicativo, clique no botão Deploy.
- 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. Depois que a implantação for concluída, marcas de seleção verdes vão aparecer ao lado dos nós.
8. Pesquisar conteúdo de vídeo no repositório de armazenamento
Depois de ingerir dados de vídeo no app de processamento, você pode conferir os dados analisados e pesquisar com base nas informações de análise de ocupação.
- Abra a guia Warehouses do painel da Vertex AI Vision. Acesse a guia "Armazenamentos"
- Encontre o depósito de armazenamento de tráfego na lista e clique em Ver recursos.
- Na seção Contagem de pessoas ou Contagem de veículos, defina o valor Mín. como 1 e o valor Máx. como 5.
- Para filtrar os dados de vídeo processados armazenados no Media Warehouse da Vertex AI Vision, clique em Pesquisar.
Uma visualização dos dados de vídeo armazenados que correspondem aos critérios de pesquisa no console do Google Cloud. Crédito do vídeo: Elizabeth Mavor em Pixabay (critérios de pesquisa aplicados).
9. Analisar a saída na tabela do BigQuery
Acessar o BigQuery
Selecione o conjunto de dados: visionai_dataset
Selecione a tabela: seu APPLICATION_ID (neste caso, traffic-app)
Clique nos três pontos à direita do nome da tabela e clique em Consulta.
Escreva a seguinte consulta:
Consulta 1: consulta para verificar a contagem de veículos que cruzam cada linha por minuto
abc.sql
—- Get list of active marked lines for each timeframe
WITH line_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
SELECT
line_array.ingestion_time,
JSON_VALUE(line.annotation.id) as line_id,
JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
FROM line_array, unnest(line_array.lines) as line
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM
flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id
Consulta 2: consulta para verificar a contagem de veículos por minuto em cada zona
—- Get list of active zones for each timeframe
WITH zone_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
JSON_QUERY_ARRAY(zone["counts"]) AS entities
FROM zone_array, unnest(zone_array.zones) as zone
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time,
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id
Nas consultas acima, você pode mudar "Veículo" para "Pessoa" para contar pessoas.
Este codelab vai mostrar os dados de amostra e a visualização apenas para a consulta 1. Siga um processo semelhante para a consulta 2.
Clique em "Explorar dados" no menu à direita e selecione "Explorar com o Looker Studio"
No painel "Dimensão", adicione hora e altere a configuração de tempo para data-hora. Em "dimensão detalhada", adicione "line_id".
O gráfico acima mostra o número de veículos/pessoas cruzando cada linha por minuto.
As barras azul profundo e azul claro indicam os dois IDs de linha diferentes.
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