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 conhecer os diferentes parâmetros na configuração do filtro de movimento:
- Sensibilidade à detecção de movimento
- Duração mínima do evento
- Janela de lookback
- Tempo de resfriamento
- 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 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 do Compute Engine e da 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 guia de 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 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.
- 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 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. Filtro de movimento
O filtro de movimento captura segmentos de vídeo do produto e de movimento que contêm eventos de movimento. Ao ajustar a sensibilidade ao movimento, o tamanho mínimo do evento, a janela de lookback, o período de espera e a zona de detecção de movimento, o usuário pode configurar a base de filtros de acordo com as próprias necessidades.
Configuração do filtro de movimento
Há cinco configurações disponíveis no filtro de movimento para personalização.
- Sensibilidade ao movimento: com que sensibilidade o movimento deve ser acionado.
- Duração mínima do evento: a duração mínima de um evento de movimento.
- 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, ocorrerá um período de espera com a duração especificada. Durante o período de espera, os eventos de movimento não serão acionados.
- Zona de detecção de movimento: zona configurada pelo usuário para especificar onde a detecção de movimento deve 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. É possível escolher entre baixa, média ou alta.
Quanto maior a sensibilidade da detecção de movimento, mais sensível ela é a ruídos e movimentos menores. Recomendamos usar essa opção em locais com iluminação estável e objetos menores em movimento, como pessoas à distância.
Por outro lado, a sensibilidade baixa é menos sensível à interferência de iluminação. Essa configuração é perfeita para quando há mais interferência de iluminação, como em um ambiente externo, e para vídeos de baixa qualidade, onde pode haver mais ruídos. Como essa configuração é a filtragem mais agressiva de todas, ela pode ignorar movimentos de objetos pequenos.
Duração mínima do evento
Use a sinalização min_event_length_in_seconds
no comando vaictl.
Número inteiro. O padrão é de 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.
Número inteiro. O padrão é de 3 segundos. Varia de 0 a 3.600 segundos.
A janela de lookback é a duração do cache antes que um evento de movimento seja detectado. Ela é útil quando temos interesse em ver o que acontece no frame alguns segundos antes de eventos de movimento serem detectados.
Período de espera
Use a sinalização 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 resfriamento é por quanto tempo a detecção de movimento fica pausada depois que um evento de movimento é capturado. Durante o período de espera, nenhum cálculo é executado para detectar movimento.
4. Exemplo básico de filtro de movimento
Manual do SDK do Vaictl
Para conferir o fluxo de entrada com filtro de movimento no manual do vaictl
, use o comando abaixo.
vaictl send video-file applying motion-filter -h
Preparar um vídeo de amostra
- É 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 .
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 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
Variáveis de filtro de movimento
- MOTION_SENSITIVITY: a sensibilidade da 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 após um evento de movimento ser 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 stream no console do Cloud. A segunda opção é enviar os eventos de movimento para o armazenamento local.
Como enviar resultados ao Console do Cloud
É possível usar vaictl para fazer streaming dos dados de saída do vídeo 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 fluxo, digite
motion-detection-stream
- Na região, digite
us-central1
- Clique em "Registrar"
Enviando resultados para streaming
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 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 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.
Como 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 analisar o uso da zona de detecção de movimento e como configurá-la. 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 funciona apenas na área anotada; (2) Zonas negativas em que a detecção de movimento ignora qualquer movimento na área com anotação.
Anotação de zona
Use a sinalização zone_annotation
no comando vaictl para inserir coordenadas para polígonos de zona.String
. Padrão vazio para 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 precisará especificar as coordenadas da imagem dos eixos x e y para cada nó da zona. Uma zona precisa ter três ou mais nós para formar um polígono. Um frame pode ter várias zonas. Se as zonas se sobrepuserem, a área de cobertura das duas zonas 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, em uma zona com nós de(0,0)
,(100,0)
,(100,100)
e(0, 100)
, ela será indicada como0:0;100:0;100:100;0:100
. Sempre insira os nós como nós conectando um ao lado do outro. A ordem pode ser no sentido horário ou anti-horário.
*Uma zona quadrada com quatro nós.
*Uma zona com triângulos com três nós.
- Para indicar várias zonas em um único frame, use
-
para conectar zonas diferentes. 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 - Obter coordenadas da imagem
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.
A opção "Excluir zona anotada" é uma entrada booleana do usuário, indicando se ele quer ou não excluir a zona com anotação na detecção de movimento.
- Se definida como
true
, a zona com anotação 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 definida como falsa, a zona atuará como uma zona positiva, onde a detecção de movimento será focada.
*Execute a detecção de movimento apenas nas zonas de entrada.
6. Exemplo de filtro de movimento com zona de detecção de movimento
Neste exemplo, usaremos um vídeo com uma árvore que se move constantemente em primeiro plano. Na configuração normal do filtro de movimento, o vídeo produz apenas um evento de movimento com a duração do vídeo original, porque esse filtro registra a árvore em movimento como "em constante movimento 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 para vídeo
O vídeo de exemplo (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) contém árvore, 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: Um novo conjunto de dados de comparativo de mercado de detecção de alterações, em Proc. Workshop do IEEE sobre detecção de mudanças (CDW-2012) no CVPR-2012, Providence, RI, 16 a 21 de junho 2012
Preparação da variável de ambiente
Variáveis de 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.
Selecione abaixo para conferir os diferentes tipos de uso da zona de detecção de movimento.
Excluir a árvore da detecção de movimento.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Execute 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
*Execute 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 vaictl para fazer streaming dos dados de saída do vídeo 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 fluxo, digite
motion-detection-stream
- Na região, digite
us-central1
- Clique em "Registrar"
Enviando resultados para streaming
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 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 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.
Como enviar resultados para o armazenamento local
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 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 vaictl SDK 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