1. Objetivos
Visão geral
O foco deste codelab é a criação de um aplicativo completo da Vertex AI Vision para demonstrar o envio de vídeos com o recurso de filtragem de movimento. Neste tutorial, vamos abordar os diferentes parâmetros na configuração do filtro de movimento:
- Sensibilidade da detecção de movimento
- Duração mínima do evento
- Janela de lookback
- Tempo de espera
- Zona de detecção de movimento
O que você vai aprender
- Como transferir vídeos para streaming
- Diferentes recursos disponíveis no filtro de movimento e como usá-los
- Onde verificar as estatísticas do Filtro de movimento
- Como ajustar a configuração com base no seu vídeo
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 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
- 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. Acessar "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 um papel, escolha uma funçã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.
† O papel só é necessário se você copia um arquivo de vídeo de amostra de um bucket do Cloud Storage.
3. Filtro de movimento
O filtro de movimento captura segmentos de vídeo de movimento e de produto que contêm eventos de movimento. Ao ajustar a sensibilidade de movimento, a duração mínima do evento, a janela de lookback, o período de espera e a zona de detecção de movimento, o usuário pode configurar o filtro com base nas próprias necessidades.
Configuração do filtro de movimento
Há cinco configurações disponíveis no filtro de movimento para personalização.
- Sensibilidade de movimento: quão sensível o movimento precisa ser acionado.
- Duração mínima do evento: a duração mínima de um evento de movimento que será capturada.
- Janela de lookback: por quanto tempo o vídeo deve começar a ser gravado antes que um evento de movimento seja detectado.
- Período de espera: após o término de um evento de movimento, um período de espera com a duração especificada vai acontecer. Durante o período de espera, os eventos de movimento não são acionados.
- Zona de detecção de movimento: zona configurada pelo usuário para especificar onde a detecção de movimento precisa ser executada. (Isso será detalhado em outra seção)
Sensibilidade de movimento
Use a sinalização motion_detection_sensitivity
no comando vaictl.
String. Mídia padrão. Pode escolher entre baixo, médio ou alto.
Quanto maior a sensibilidade da detecção de movimento, mais sensível ela é ao ruído e a movimentos menores. Essa configuração é recomendada para ambientes com objetos menores em movimento (como pessoas à distância) e iluminação estável.
Por outro lado, a baixa sensibilidade é menos sensível à interferência da iluminação. Essa configuração é perfeita para quando há mais interferência de iluminação, como em um ambiente externo, e para qualidade de vídeo mais baixa, em que pode haver mais ruídos. Como essa configuração é a mais agressiva de todas, ela pode ignorar movimentos de objetos pequenos.
Duração mínima do evento
Use a flag min_event_length_in_seconds
no comando vaictl.
Inteiro. O padrão é 10 segundos. Varia de 0 a 3.600 segundos.
A duração mínima dos vídeos de evento de movimento que serão analisados quando um segmento desse tipo for detectado no frame.
Janela de lookback
Use a sinalização look_back_window_in_seconds
no comando vaictl.
Inteiro. O padrão é 3 segundos. Varia de 0 a 3.600 segundos.
A janela de lookback é a duração armazenada em cache antes que um evento de movimento seja detectado. Isso é útil quando queremos saber o que acontece no frame alguns segundos antes de os eventos de movimento serem detectados.
Período de espera
Use a flag cool_down_period_in_seconds
no comando vaictl.
Número inteiro. O padrão é 300 segundos. Varia de 0 a 3.600 segundos.
O período de espera é o tempo em que a detecção de movimento fica pausada após a captura de um evento de movimento. Durante o período de espera, nenhuma computação será executada para detectar movimento.
4. Exemplo básico de filtro de movimento
Manual do SDK do Vaictl
Para verificar o manual vaictl
para o fluxo de entrada com filtro de movimento, use o comando abaixo.
vaictl send video-file applying motion-filter -h
Preparar um vídeo de exemplo
- É 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 .
Preparar as variáveis de ambiente
Defina as variáveis de ambiente abaixo para usar o modelo de comando fornecido.
variáveis vaictl
- 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
Variáveis do filtro de movimento
- MOTION_SENSITIVITY: quão sensível será a detecção de movimento.
- MIN_EVENT_LENGTH: duração mínima dos eventos de movimento.
- LOOK_BACK_WINDOW: a duração da captura antes do primeiro movimento em um evento de movimento.
- COOL_DOWN_PERIOD: o período em que a detecção de movimento será pausada depois que um evento de movimento for capturado.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Preparar o comando de filtro de movimento
Há duas opções para usar o filtro de movimento com o fluxo de entrada. A primeira opção é enviar os eventos de movimento para um fluxo no console do Cloud. A segunda opção é enviar os eventos de movimento para o armazenamento local.
Como enviar resultados para o console do Cloud
É possível usar o vaictl para transmitir os dados de vídeo de saída para o console do Cloud. Comece ativando a API Vision AI no Console do Cloud.
Registrar um novo stream
- Clique na guia "Streams" no painel à esquerda da Vertex AI Vision.
- Clique em "Registrar".
- No nome do stream, digite
motion-detection-stream
. - Na região, digite
us-central1
- Clique em "Registrar".
Como enviar resultados para a transmissão
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.
INPUT_VIDEO=street_vehicles_people.mp4 vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to streams motion-detection-stream --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.
Enviar resultados para o armazenamento local
Esse comando transmite um arquivo de vídeo para um stream.
Adicione nohup
no início e &
no final para torná-lo um job em segundo plano.
INPUT_VIDEO=street_vehicles_people.mp4 OUTPUT_PATH=<path_to_store_motion_events_on_local_disk> nohup vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5. Zona de detecção de movimento
Nesta seção, vamos abordar o uso da zona de detecção de movimento e como fazer a configuração. O objetivo da zona é melhorar a detecção de movimento mascarando o movimento proveniente de áreas em que você não está interessado.
A zona de detecção de movimento tem dois tipos: (1) zonas positivas, em que a detecção de movimento é executada apenas na área anotada; (2) zonas negativas, em que a detecção de movimento ignora qualquer movimento na área anotada.
Anotação de zona
Use a flag zone_annotation
no comando vaictl para inserir coordenadas para polígonos de zona.
String. O padrão é vazio para a anotação de zona.
A anotação de zona será uma entrada de string do usuário, denotando as zonas no frame que o usuário gostaria de ocultar ou focar. Para anotar a zona, o usuário precisa especificar as coordenadas da imagem dos eixos x e y para cada nó na zona. Uma zona precisa ter três ou mais nós para formar um polígono. Pode haver várias zonas em um frame. Se as zonas se sobrepõem, a área coberta por ambas ainda será coberta.
A anotação da zona tem uma sintaxe de entrada específica a ser seguida.
- Para indicar um único nó, use
:
para conectar os eixos x e y de uma coordenação de imagem. Por exemplo, um nó de(0,0)
no canto superior esquerdo será indicado como0:0
. - Para indicar todos os nós em uma única zona, use
;
para conectá-los. Por exemplo, para uma zona com nós de(0,0)
,(100,0)
,(100,100)
e(0, 100)
, a zona será indicada como0:0;100:0;100:100;0:100
. Sempre insira os nós como nós de conexão próximos uns dos outros. A ordem pode ser no sentido horário ou anti-horário.
*Uma zona quadrada com quatro nós.
*Uma zona triangular com três nós.
- Para denotar várias zonas em um único frame, use
-
para conectar diferentes zonas. Por exemplo, se quisermos inserir(0,0)
,(100,0)
,(100,100)
,(0,100)
e(120,120)
,(110,150)
,(200,160)
, a anotação da zona de entrada será0:0;100:0;100:100;0:100-120:120;110:150;200:160
.
*Duas zonas em um frame.
Existem algumas ferramentas disponíveis on-line que ajudam a extrair as coordenadas da imagem. Por exemplo, consulte Wolfram - Get Coordinates from Image.
Excluir zona com anotação
Use a flag exclude_annotated_zone
no comando vaictl para configurar a detecção de movimento na zona ou fora dela.Booleano
. Padrão false.
Excluir zona anotada é uma entrada booleana do usuário, indicando se ele quer excluir a zona anotada na detecção de movimento ou não.
- Se definido como
true
, a zona anotada vai funcionar como uma zona negativa. Os movimentos nas zonas com anotação não serão detectados.
*Execute a detecção de movimento apenas fora das zonas de entrada.
- Se definido como "false", a zona vai funcionar como uma zona positiva, em que a detecção de movimento vai se concentrar.
*Executar apenas a detecção de movimento nas zonas de entrada.
6. Exemplo de filtro de movimento com zona de detecção de movimento
Neste exemplo, vamos usar um vídeo com uma árvore em movimento constante em primeiro plano. Na configuração de filtro de movimento normal, o vídeo só vai produzir um evento de movimento com a duração do vídeo original, porque o filtro de movimento registra a árvore em movimento como "em movimento constante durante todo o vídeo". No entanto, com a ajuda da zona de detecção de movimento, podemos mascarar corretamente o movimento da árvore e focar no movimento de carros e pedestres.
Preparação do vídeo
O vídeo de exemplo (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) contém árvores, carros e pedestres de www.changedetection.net.
Crédito do vídeo: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad e P. Ishwar, changedetection.net: A new change detection benchmark dataset, in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012
Preparação da variável de ambiente
Variáveis do projeto do Google Cloud.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
Configuração básica do filtro de movimento.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Configuração da zona de detecção de movimento.
Escolha uma das opções abaixo para conferir os diferentes tipos de uso da zona de detecção de movimento.
Excluir a árvore para a detecção de movimento.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Executar a detecção de movimento apenas fora das zonas de entrada.
Focar a detecção de movimento na rua.
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*Executar a detecção de movimento apenas fora das zonas de entrada.
Enviar stream de vídeo com filtro de movimento
Enviar os eventos de movimento para o console do Cloud
É possível usar o vaictl para transmitir os dados de vídeo de saída para o console do Cloud. Para começar, ative 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 stream, digite
motion-detection-stream
. - Na região, digite
us-central1
- Clique em "Registrar".
Como enviar resultados para a transmissão
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.
vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to streams motion-detection-stream --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.
Enviar resultados para o armazenamento local
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.
OUTPUT_PATH=<path_to_store_motion_events> vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=$ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7. Parabéns
Parabéns, você concluiu o laboratório!
Limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, encerre a operação do SDK vaictl pela linha de comando com ctrl
+ z
.
Recursos
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
Feedback
Clique aqui para enviar feedback