1. Objetivos
Visão geral
Este codelab se concentra na 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 explicar os diferentes parâmetros na configuração do filtro de movimento:
- Sensibilidade da detecção de movimento
- Duração mínima de eventos
- Janela de lookback
- Tempo de espera
- Zona de detecção de movimento
O que você vai aprender
- Como ingerir 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 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
- 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
Criar 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 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 (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.
- 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 amostra de um bucket do Cloud Storage.
3. Filtro de movimento
O filtro de movimento captura segmentos de vídeo de produtos e movimentos que contêm eventos de movimento. Ao ajustar a sensibilidade ao 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: o nível de sensibilidade para que o movimento seja detectado.
- Duração mínima do evento: a duração mínima que um evento de movimento será capturado.
- Janela de lookback: por quanto tempo o vídeo deve começar a gravar antes que um evento de movimento seja detectado.
- Período de espera: após o fim de um evento de movimento, um período de espera com a duração especificada vai ocorrer. 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. (Será elaborado em uma seção posterior)
Sensibilidade de movimento
Use a flag motion_detection_sensitivity no comando vaictl.
String. Mídia padrão. Você pode escolher entre baixo, médio ou alto.
Quanto maior a sensibilidade à detecção de movimento, mais sensível ela será a ruídos e movimentos menores. Essa configuração é recomendada para ambientes com objetos pequenos 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 do vídeo mais baixa, em que 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 de eventos
Use a flag min_event_length_in_seconds no comando vaictl.
Número inteiro. O padrão é 10 segundos. Intervalo de 0 a 3.600 segundos.
A duração mínima dos vídeos de eventos de movimento que serão analisados assim que um segmento do evento de movimento for detectado no frame.
Janela de lookback
Use a flag look_back_window_in_seconds no comando vaictl.
Número inteiro. O padrão é 3 segundos. Intervalo de 0 a 3.600 segundos.
A janela de lookback é a duração armazenada em cache antes da detecção de um evento de movimento. Isso é útil quando queremos ver o que acontece no frame alguns segundos antes da detecção de eventos de movimento.
Período de espera
Use a flag cool_down_period_in_seconds no comando vaictl.
Número inteiro. O padrão é 300 segundos. Intervalo de 0 a 3.600 segundos.
O período de resfriamento é o tempo em que a detecção de movimento fica pausada depois que um evento de movimento é capturado. Durante o período de espera, nenhum cálculo será executado para detectar movimento.
4. Exemplo de filtro de movimento básico
Manual do SDK Vaictl
Para conferir o manual do vaictl para fluxo de entrada com filtro de movimento, use o comando abaixo.
vaictl send video-file applying motion-filter -h
Prepare um vídeo de amostra
- 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 .
Preparar variáveis de ambiente
Defina as variáveis de ambiente abaixo para usar o modelo de comando fornecido.
vaictl variables
- 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
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 a ser capturada 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 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 "Fluxos de cliques" no painel esquerdo da Vertex AI Vision.
- Clique em "Registrar"
- Em "Nome do stream", insira
motion-detection-stream. - Em "Região", digite
us-central1 - Clique em "Registrar".
Enviando resultados para transmissão
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 ele seja executado 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 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.
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 que ele seja executado 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 explicar como usar e configurar a zona de detecção de movimento. A zona tem como objetivo melhorar a detecção de movimento, mascarando o movimento de áreas que não são do seu interesse.
A zona de detecção de movimento tem dois tipos: (1) zonas positivas, em que a detecção de movimento só é executada 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 de polígonos de zona.
String. O padrão é vazio para anotação de zona.
A anotação de zona será uma entrada de string do usuário, indicando as zonas no frame que ele quer ocultar ou focar. Para classificar a zona, o usuário precisa especificar as coordenadas de imagem dos eixos x e y de 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 sobrepuserem, a área coberta por ambas ainda será coberta.
A anotação de 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 conectar os nós. 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 indicar 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.
Para extrair coordenadas de uma imagem, há algumas ferramentas disponíveis on-line. Por exemplo, consulte Wolfram: extrair coordenadas de uma imagem.
Excluir zona anotada
Use a flag exclude_annotated_zone no comando vaictl para configurar a detecção de movimento dentro ou fora da zona.
booleano. Padrão false.
A exclusão da zona anotada é uma entrada booleana do usuário que indica se ele quer excluir ou não a zona anotada na detecção de movimento.
- Se definido como
true, a zona anotada vai agir como uma zona negativa. Os movimentos nas zonas anotadas não serão detectados.
*Execute a detecção de movimento apenas fora das zonas de entrada.
- Se definido como "false", a zona vai agir como uma zona positiva, em que a detecção de movimento vai se concentrar.
*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, vamos usar um vídeo com uma árvore se movendo constantemente em primeiro plano. Na configuração normal do filtro de movimento, o vídeo só vai produzir um evento de movimento com a duração do vídeo original, porque o filtro 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 adequadamente o movimento da árvore e focar no movimento de carros e pedestres.
Preparação de vídeo
O vídeo de amostra (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, and 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 de variáveis de ambiente
Variáveis de projeto na nuvem 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 ver diferentes tipos de uso da zona de detecção de movimento.
Exclua 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.
Foque 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 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 "Fluxos de cliques" no painel esquerdo da Vertex AI Vision.
- Clique em "Registrar"
- Em "Nome do stream", insira
motion-detection-stream. - Em "Região", digite
us-central1 - Clique em "Registrar".
Enviando resultados para transmissão
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 ele seja executado 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 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.
Como 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á 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 ele seja executado 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