đŸŽ„ Aplicando Machine Learning em seus vĂ­deos com a Vertex AI Vision đŸŽ„

Luciano Martins
google-cloud-brasil
10 min readNov 22, 2022

--

* TLDR: Aqui vamos criar uma aplicação que irĂĄ (1) Ingerir vĂ­deos prĂ©-gravados (arquivos MP4 em formato H.264); (2) Salvar e buscar informaçÔes no Warehouse, (3) Armazenar metadados em uma tabela no BigQuery e, numa experiĂȘncia low code, gerar analytics a partir de uma cĂąmera de monitoramento de trĂĄfego.

Os sistemas fechados de televisĂŁo (ou cctv, do inglĂȘs closed circuit television) sĂŁo uma tecnologia que jĂĄ existe hĂĄ mais de 20 anos e que Ă© aplicada em diversas indĂșstrias — financeira, transporte, entretenimento, logĂ­stica e a lista segue longa.

Com o aumento do acesso Ă  cĂąmeras com maior qualidade e links de maior velocidade, aumentou, tambĂ©m, a sua adoção — em diferentes casos de usos, pra diferentes indĂșstrias:

Diferentes desafios em diferentes indĂșstrias
Diferentes desafios em diferentes indĂșstrias

o que nos traz um desafio: como podemos processar os dados de todos esses dispositivos, o mais prĂłximo possĂ­vel do “tempo real” e retirar informaçÔes dessas imagens?

Para simplificar esse processo, lançamos no Google Next 2022 a Vertex AI Vision, onde vocĂȘ consegue consolidar as atividades de ingestĂŁo, processamento dos dados com modelos de machine learning e armazenamento dos vĂ­deos e dos metadados.

Para começar a implementar soluçÔes usando a Vertex Vision, é importante entender e revisar alguns conceitos e componentes:

Streams: representam a camada de streaming de vídeo da sua solução. A origem do vídeo pode ser um vídeo ao vivo (ou seja, uma cùmera IP), ou um arquivo de vídeo (ou seja, um arquivo MP4).

Application: É a entidade na Vertex Vision que conecta seu stream de vídeo a um processador de IA para realizar uma operação de aprendizado de máquina no vídeo (ou seja, conectar um fluxo de cñmera CCTV a um modelo de IA para extração de insights).

Media Warehouse: É onde serĂŁo armazenados os vĂ­deos ingeridos por stream, e tambĂ©m os metadados dos processadores de IA aplicados nos streams ingeridos.

Com estes conceitos em mente, vocĂȘ consegue construir soluçÔes que seguirĂŁo um fluxo de processamento similar ao abaixo:

pipeline de funcionamento da Vertex AI Vision
pipeline de funcionamento da Vertex AI Vision

Onde vocĂȘ irĂĄ:

- Numa primeira etapa, conectar suas cùmeras, ou arquivos de gravação das cùmeras, em um stream da Vertex Vision, para realizar a ingestão das informaçÔes

- Depois decidir que ação tomar com esses vĂ­deos — como utilizar modelos prĂ©-treinados pelo Google, ou utilizar um modelo de detecção de objetos treinado por vocĂȘ

- E, finalmente, utilizar a Vision Warehouse para fazer anålise ou busca de vídeos, ou ainda conectar os metadados no BigQuery e gerar mais informaçÔes analíticas com estes dados.

Mas como funcionaria esse processo todo? Bom vamos ver isso passo a passo.

Pré-requisitos para criar sua solução com a Vertex AI Vision

Algumas açÔes sĂŁo necessĂĄrias antes de irmos para a criação da solução em si — Isso inclui ativar o serviço da Vertex AI Vision na console, algumas configuraçÔes de acesso no IAM e tambĂ©m a instalação do SDK.

Ativação do serviço da Vertex AI Vision

Primeiro vocĂȘ precisa fazer a ativação do serviço da Vertex AI Vision. VocĂȘ pode clicar no botĂŁo “enable Vertex AI Vision API” que aparece na tela, quando vocĂȘ acessa o serviço na console:

Habilitando o serviço da Vertex AI Vision
Habilitando o serviço da Vertex AI Vision

Ou vocĂȘ pode fazer a ativação do serviço via linha de comando:

$ gcloud services enable visionai.googleapis.com
Operation "operations/acat.p2–674219556369–7e9d3d6c-9f49–452e-a184-af2ea9b61681" finished successfully.

$ gcloud services list --enabled | grep -i visionai
visionai.googleapis.com Vision AI API

Configuração de IAM para acesso à Vertex AI Vision

Para montar a jornada apresentada aqui nesta postagem, vamos conceder ao usuário que realizará as etapas a permissão de Editor na Vertex AI Vision — Para isso, vamos utilizar o comando glcoud abaixo:

$ gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member 'SECURITY_PRINCIPAL' --role='roles/visionai.editor'

EntĂŁo, por exemplo, se o seu project id Ă© ‘meu-projeto-ai’ e vocĂȘ quer dar acesso ao usuĂĄrio usuario01@dominio.com.br, vocĂȘ deve executar o comando como:

$ gcloud projects add-iam-policy-binding meu-projeto-ai \
--member user:usuario01@dominio.com.br --role='roles/visionai.editor'

Para garantir que vocĂȘ nĂŁo tenha problemas de autenticação, antes de seguir com as configuraçÔes de serviços, Ă© interessante vocĂȘ executar os dois comandos abaixo:

$ gcloud auth login
$ gcloud auth application-default login

Instalação da SDK da Vertex AI Vision

De Ășltimo, mas nĂŁo menos importante, vocĂȘ precisa do utilitĂĄrio de linha de comando da SDK da Vertex AI Vision — o vaictl — para realizar algumas atividades descritas aqui. Abaixo como fiz para instalar utilizando um servidor Linux, baseado em Debian x86_64:

$ gsutil cp gs://visionai-artifacts/visionai_0.0–3_amd64.deb .
$ sudo apt install ./visionai_0.0–3_amd64.deb

Se a instalação ocorreu sem problemas, vocĂȘ deve conseguir executar o comando “vaictl” direto no seu shell:

$ vaictl --help
This command line tool enables the user to
manage and interact with resources in Vision AI.
Usage:
vaictl [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
create Create API resources in Vision AI.
delete Delete API resources in Vision AI.
disable Disable features for specific resources in Vision AI.
enable Enable features for specific resources in Vision AI.
help Help about any command
list List API resources in Vision AI.
receive Receive data from Vision AI.
send Send data to Vision AI.
Flags:
-c, --cluster-id string The cluster id.
-h, --help help for vaictl
-l, --location-id string The GCP location id.
-p, --project-id string The GCP project id.
--service-endpoint string The service endpoint for Vision AI. (default "visionai.googleapis.com")
--timeout int The default timeout (in seconds) for operations. (default 10)
-v, --verbose Verbose output.
Use "vaictl [command] - help" for more information about a command.

Neste ponto, o seu ambiente estå pronto para seguir em frente com esta experimentação.

Caso vocĂȘ queira mais alternativas de instalação, consulte a documentação da Vertex AI Vision.

Criação de tabela de metadados no BigQuery

Como uma das atividades que faremos aqui Ă© o armazenamento de metadados dos vĂ­deos no BigQuery, precisamos criar a tabela que utilizaremos. Para isso, executei a query abaixo (para o seu cenĂĄrio, altere o nome do dataset de “vision_ai_analytics” para o nome de seu dataset e de “metadata_table” para o nome da tabela que vocĂȘ quer criar:

CREATE TABLE `vision_ai_analytics.metadata_table` (
ingestion_time TIMESTAMP NOT NULL,
application STRING NOT NULL,
instance STRING NOT NULL,
node STRING NOT NULL,
annotation STRING)

Criação da sua Vertex AI Vision Application

Para começar a utilizar seus vĂ­deos na Vertex AI Vision, vocĂȘ precisa trazĂȘ-los para a plataforma. Para isso, criaremos um “stream” — que serĂĄ responsĂĄvel pela ingestĂŁo dos dados, seja o conteĂșdo de uma cĂąmera IP, em tempo real, ou dados histĂłricos/gravados anteriormente.

Para começar a criar nossa aplicação de contagem de carros, primeiro vamos abrir a dashboard da Vertex AI Vision, vocĂȘ deve acessar sua console da Google Cloud, ir na seção “InteligĂȘncia Artificial” e clicar na opção da Vertex AI Vision. ApĂłs isso, clique na opção “Studio”, escolha a opção “Create a new application” e escolha o nome da sua aplicação (no meu caso, “contador-carros”):

Criando sua aplicação na Vertex AI Vision
Criando sua aplicação na Vertex AI Vision

O Studio lhe darĂĄ uma interface de construção em blocos, onde vocĂȘ clica nos itens que vocĂȘ quer incluir em sua aplicação e ele serĂĄ introduzido no grafo de execução de sua aplicação.

O primeiro bloco que vocĂȘ vai incluir Ă© o de ingestĂŁo do vĂ­deo. Em “Connectors”, clique em “Streams”. No lado direito, aparecerĂĄ um menu — clique em “+ Add Streams”:

Adicionando um stream Ă  sua application
Adicionando um stream Ă  sua application

Na próxima tela, selecione “Register new streams”, informe o nome do stream (no meu caso, “camera-carros”) e clique em “Add Streams”:

Configuração do novo stream
Configuração do novo stream

O prĂłximo passo Ă© incluir um bloco de “Vision Warehouse”. No menu do lado esquerdo, em “Connectors”, selecione “Vision AI Warehouse”. No menu que aparecerĂĄ no lado direito, clique em “Connect Warehouse”:

Conectando uma Vision Warehouse
Conectando uma Vision Warehouse

Na próxima tela, selecione a opção “Create new warehouse” e informe o nome do warehouse (no meu caso, “carros-warehouse”):

Criação de novo Vision Warehouse
Criação de novo Vision Warehouse

O prĂłximo passo Ă© incluir o bloco que processarĂĄ o vĂ­deo, aplicando um modelo de Machine Learning. Aqui usaremos um modelo prĂ©-treinado pelo Google que irĂĄ realizar contagem de objetos — no nosso cenĂĄrio, contagem de carros em uma cena. Para isso, em “Specialized models”, selecione “Occupancy analytics:

Adicionando um modelo especializado na application
Adicionando um modelo especializado na application

De Ășltimo, mas nĂŁo menos importante, precisamos criar o conector para o BigQuery — onde os metadados de nossa aplicação irĂŁo ser armazenados. Para isso, no menu do lado esquerdo, selecione “BigQuery” em “Connectors”. No menu do lado direito, em “Settings”, clique em “Browser” para escolher a tabela que receberĂĄ os metadados; e, em “Store metadata from” selecione “Streams” e “Occupancy analytics”. VocĂȘ deve ver um resultado como este:

Conectando uma tabela do BigQuery para armazenar metadados
Conectando uma tabela do BigQuery para armazenar metadados

Ao final destas atividades, vocĂȘ deve ter uma visualização do fluxo de funcionamento de sua aplicação, em similar a um grafo, semelhante ao abaixo:

Visualização do grafo da sua application
Visualização do grafo da sua application

E então, clique em “Deploy”, no topo da janela e confirme clicando em “Deploy”, novamente, na nova janela que aparecer:

Fazendo o deploy da sua application
Fazendo o deploy da sua application

Ao final do deployment, vocĂȘ deve ter a mensagem de sucesso abaixo:

Confirmando que seu deploy foi bem sucedido
Confirmando que seu deploy foi bem sucedido

E vocĂȘ deve encontrar sua aplicação como “Deployed”, tambĂ©m, no menu “Applications” da Vertex AI Vision:

Validando que sua aplicação estå implantada
Validando que sua aplicação estå implantada

Ingerindo vĂ­deos com a Vertex AI Vision SDK

Com sua aplicação configurada e implantada na Vertex AI, agora vocĂȘ consegue usar a SDK para ingerir seus vĂ­deos e processĂĄ-los. Com a Vertex AI Vision vocĂȘ consegue ingerir vĂ­deos em tempo real (usando o protocolo RTSP) ou arquivos de vĂ­deos armazenados localmente. Aqui iremos utilizar vĂ­deos prĂ©-gravados. O vĂ­deo que utilizaremos Ă© a gravação de uma cĂąmera de trĂĄfego:

Visualização do vídeo de exemplo utilizado
Visualização do vídeo de exemplo utilizado

Utilizaremos o utilitário de linha de comando “vaictl” para realizar a ingestão via SDK:

$ vaictl -p lucianomartins-demos-345000 -l us-central1 \
-c application-cluster-0 --service-endpoint visionai.googleapis.com \
send video-file to streams camera-carros \
--file-path=/home/lucianomartins/Documents/prototypes/ai-apis/data/carros02.mp4 \
--loop

ApĂłs a execução, vocĂȘ deve receber a mensagem abaixo — que irĂĄ confirmar que sua ingestĂŁo foi iniciada:

Sending data into event "jseawg51" through stream "camera-carros".

VocĂȘ consegue confirmar que sua ingestĂŁo estĂĄ funcionando clicando em “Streams” e no seu stream (“camera-carros”, no meu caso aqui) na console da Vertex AI Vision:

Visualizando o seu vĂ­deo apĂłs a ingestĂŁo na Vertex AI Vision
Visualizando o seu vĂ­deo apĂłs a ingestĂŁo na Vertex AI Vision

Analisando vĂ­deos utilizando a Vision Warehouse

Com a aplicação em execução, podemos começar a conferir seu funcionamento. Primeiro podemos buscar informaçÔes na Vision Warehouse. Para isso, na console da Vertex AI Vision, clique em “Warehouses” e, para a warehouse que foi criada para este exemplo, clique em “view assets”. Na nova tela que aparecer, podemos fazer, por exemplo, uma busca por vĂ­deos — aqui, estou selecionando o stream “camera-carros” e somente vĂ­deos de hoje no “data range”:

Fazendo busca de vĂ­deos da Vision Warehouse
Fazendo busca de vĂ­deos da Vision Warehouse

Desta forma, agora conseguimos navegar em nosso histĂłrico de vĂ­deos — seja por intervalo de datas, ou buscar informaçÔes de metadados.

Acessando metadados do Vertex AI Vision no BigQuery

Como Ășltima etapa de nossa jornada aqui, iremos utilizar as informaçÔes capturadas no stream de vĂ­deo e processadas pelo modelo de machine learning de contagem de objetos. Assim, conseguimos conectar o desafio de processamento de imagens de cĂąmeras CCTV com informaçÔes analytics Ășteis para tomadas de decisĂŁo.

Primeiro vamos verificar o conteĂșdo de nossa tabela de metadados. Para isso, na console do BigQuery vocĂȘ pode utilizar a query abaixo (adequando a query para o seu nome de projeto, dataset e tabela):

WITH
raw_counts AS (
SELECT
*
FROM (
SELECT
TIMESTAMP_TRUNC(
PARSE_TIMESTAMP('"%Y-%m-%dT%H:%M:%E*SZ"',
JSON_QUERY(annotation,
"$.currentTime")),
MINUTE) AS currentTime,
CAST(JSON_QUERY(annotation,
'$.stats.fullFrameCount[1].count') AS INT64) AS count,
JSON_QUERY(annotation,
'$.stats.fullFrameCount[1].entity.labelString') AS type
FROM
`lucianomartins-demos-345000.vision_ai_analytics.metadata_table` )
WHERE
count IS NOT NULL )
SELECT
currentTime,
SUM(count) AS total_count,
type
FROM
raw_counts
GROUP BY
currentTime, type

VocĂȘ deve ter algo parecido com este output como resultado:

Resultado da query na tabela de metadados no BigQuery
Resultado da query na tabela de metadados no BigQuery

Ou seja, vocĂȘ jĂĄ consegue verificar a contagem de veĂ­culos em seus vĂ­deos, em recortes por minuto. E a partir daqui, podemos realizar mais atividades para enriquecer decisĂ”es — como criar um modelo para prever o trĂĄfego nos prĂłximos dias/semanas para planejar uma manutenção, por exemplo.

Para conhecer mais características, funcionalidades e casos de uso possíveis, consulte a documentação oficial da Vertex AI Vision.

Espero que vocĂȘ tenha se divertido nessa jornada. Caso vocĂȘ tenha um cenĂĄrio interessante em implementação na Vertex AI Vision e queira compartilhar, mande uma mensagem para criarmos um blog com a sua experimentação 🙂

--

--