đ„ Aplicando Machine Learning em seus vĂdeos com a Vertex AI Vision đ„
* 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:
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:
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:
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â):
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â:
Na prĂłxima tela, selecione âRegister new streamsâ, informe o nome do stream (no meu caso, âcamera-carrosâ) e clique em âAdd Streamsâ:
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â:
Na prĂłxima tela, selecione a opção âCreate new warehouseâ e informe o nome do warehouse (no meu caso, âcarros-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:
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:
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:
E entĂŁo, clique em âDeployâ, no topo da janela e confirme clicando em âDeployâ, novamente, na nova janela que aparecer:
Ao final do deployment, vocĂȘ deve ter a mensagem de sucesso abaixo:
E vocĂȘ deve encontrar sua aplicação como âDeployedâ, tambĂ©m, no menu âApplicationsâ da Vertex AI Vision:
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:
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:
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â:
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:
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 đ