Analisar imagens com um modelo de visão do Gemini
Neste tutorial, mostramos como criar uma instância de ML do BigQuery
modelo remoto baseado noVertex AIgemini-1.0-pro-vision
modelo e use esse modelo com asML.GENERATE_TEXT
função para analisar um conjunto de imagens do pôster de filmes.
Este tutorial abrange as seguintes tarefas:
- Criar uma tabela de objetos do BigQuery sobre dados de imagem em um bucket do Cloud Storage.
- Como criar um modelo remoto do BigQuery ML que segmente o modelo
gemini-1.0-pro-vision
da Vertex AI (prévia). - Uso do modelo remoto com a função
ML.GENERATE_TEXT
para identificar os filmes associados a um conjunto de pôsteres de filmes.
Os dados do pôster do filme estão disponíveis no bucket público gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
do Cloud Storage.
Funções exigidas
Para criar uma conexão, você precisa do papel de Administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin
).Para conceder permissões à conta de serviço da conexão, você precisa do papel de Administrador do IAM do projeto (
roles/resourcemanager.projectIamAdmin
).Para criar conjuntos de dados, modelos e tabelas, você precisa do papel de Editor de dados do BigQuery (
roles/bigquery.dataEditor
).Para executar jobs do BigQuery, é preciso ter o papel de Usuário do BigQuery (
roles/bigquery.user
).
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI model that is represented by the BigQuery remote model.
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Para mais informações, consulte Preços do BigQuery na documentação do BigQuery.
Para mais informações sobre os preços da IA generativa da Vertex AI, consulte a página de preços da Vertex AI.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:
No console do Google Cloud, acesse a página do BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em
Conferir ações > Criar conjunto de dados.Na página Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial
.Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).
Os conjuntos de dados públicos são armazenados na multirregião
US
. Para simplificar, armazene seus conjuntos de dados no mesmo local.Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
Criar uma conexão
Crie uma Conexão de recursos do Cloud e tenha acesso à conta de serviço da conexão.
Console
Acessar a página do BigQuery.
Para criar uma conexão, clique em
Adicionar e em Conexões com fontes de dados externas.Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (Cloud Resource).
No campo ID da conexão, digite
tutorial
.Clique em Criar conexão.
Clique em Ir para conexão.
Copie o ID da conta de serviço do painel Informações de conexão para usar em uma etapa posterior.
bq
Em um ambiente de linha de comando, crie uma conexão:
bq mk --connection --location=us --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE tutorial
O parâmetro
--project_id
substitui o projeto padrão.Substitua
PROJECT_ID
pelo ID do projeto do Google Cloud.Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.
Solução de problemas: se você receber o seguinte erro de conexão, atualize o SDK Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupere e copie o ID da conta de serviço para uso em uma etapa posterior:
bq show --connection PROJECT_ID.us.tutorial
O resultado será assim:
name properties 1234.us.tutorial {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Anexe a seguinte seção ao seu arquivo main.tf
.
## This creates a Cloud Resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "tutorial" project = "PROJECT_ID" location = "us" cloud_resource {} }
Substitua PROJECT_ID
pelo ID do projeto do Google
Cloud.
Conceder permissões para a conta de serviço do portal
Para conceder à conta de serviço da conexão os papéis apropriados para acessar os serviços do Cloud Storage e da Vertex AI, siga estas etapas:
Acesse a página IAM e administrador.
Clique em
Conceder acesso.No campo Novos principais, digite o ID da conta de serviço que você copiou anteriormente.
No campo Selecionar um papel, escolha Vertex AI e, em seguida, selecione Usuário da Vertex AI.
Clique em Adicionar outro papel.
No campo Selecionar papel, escolha Cloud Storage e, em seguida, Visualizador de objetos do Storage.
Clique em Salvar.
Criar a tabela de objetos
Crie uma tabela de objetos sobre as imagens do pôster do filme no bucket público do Cloud Storage. Com a tabela de objetos, é possível analisar as imagens sem movê-las do Cloud Storage.
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte consulta para criar a tabela de objetos:
CREATE OR REPLACE EXTERNAL TABLE `bqml_tutorial.movie_posters` WITH CONNECTION `us.tutorial` OPTIONS ( object_metadata = 'SIMPLE', uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']);
Criar o modelo remoto
Crie um modelo remoto que represente um modelo
gemini-1.0-pro-vision
da Vertex AI:
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte consulta para criar um modelo remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-pro-vision` REMOTE WITH CONNECTION `us.tutorial` OPTIONS (ENDPOINT = 'gemini-pro-vision');
A consulta leva alguns segundos para ser concluída. Depois disso, o modelo
gemini-pro-vision
aparece no conjunto de dadosbqml_tutorial
no painel Explorer. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não há resultados de consulta.
Analise os pôsteres de filmes
Use o modelo remoto para analisar os pôsteres de filmes e determinar qual filme cada posterior representa e, em seguida, gravar esses dados em uma tabela.
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte consulta para analisar as imagens do pôster do filme:
CREATE OR REPLACE TABLE `bqml_tutorial.movie_posters_results` AS ( SELECT uri, ml_generate_text_llm_result FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini-pro-vision`, TABLE `bqml_tutorial.movie_posters`, STRUCT( 0.2 AS temperature, 'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer.' AS PROMPT, TRUE AS FLATTEN_JSON_OUTPUT)));
No editor de consultas, execute a seguinte instrução para visualizar os dados da tabela:
SELECT * FROM `bqml_tutorial.movie_posters_results`;
O resultado será assim:
+--------------------------------------------+----------------------------------+ | uri | ml_generate_text_llm_result | +--------------------------------------------+----------------------------------+ | gs://cloud-samples-data/vertex-ai/dataset- | ```json | | management/datasets/classic-movie- | { | | posters/little_annie_rooney.jpg | "title": "Little Annie Rooney", | | | "year": 1912 | | | } | | | ``` | +--------------------------------------------+----------------------------------+ | gs://cloud-samples-data/vertex-ai/dataset- | ```json | | management/datasets/classic-movie- | { | | posters/mighty_like_a_mouse.jpg | "title": "Mighty Like a Moose", | | | "year": 1926 | | | } | | | ``` | +--------------------------------------------+----------------------------------+ | gs://cloud-samples-data/vertex-ai/dataset- | ```json | | management/datasets/classic-movie- | { | | posters/brown_of_harvard.jpeg | "title": "Brown of Harvard", | | | "year": 1926 | | | } | | | ``` | +--------------------------------------------+----------------------------------+
Formatar a saída do modelo
Formate os dados de análise do filme retornados pelo modelo para tornar o título e os dados do ano mais legíveis.
No Console do Google Cloud, acesse a página BigQuery.
No editor de consultas, execute a seguinte consulta para formatar os dados:
CREATE OR REPLACE TABLE `bqml_tutorial.movie_posters_results_formatted` AS ( SELECT uri, JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.title") AS title, JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.year") AS year FROM `bqml_tutorial.movie_posters_results` results );
No editor de consultas, execute a seguinte instrução para visualizar os dados da tabela:
SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;
O resultado será assim:
+--------------------------------------------+----------------------------+------+ | uri | title | year | +--------------------------------------------+----------------------------+------+ | gs://cloud-samples-data/vertex-ai/dataset- | "Barque sortant du port" | 1895 | | management/datasets/classic-movie- | | | | posters/barque_sortant_du_port.jpeg | | | +--------------------------------------------+----------------------------+------+ | gs://cloud-samples-data/vertex-ai/dataset- | "The Great Train Robbery" | 1903 | | management/datasets/classic-movie- | | | | posters/the_great_train_robbery.jpg | | | +--------------------------------------------+----------------------------+------+ | gs://cloud-samples-data/vertex-ai/dataset- | "Little Annie Rooney" | 1912 | | management/datasets/classic-movie- | | | | posters/little_annie_rooney.jpg | | | +--------------------------------------------+----------------------------+------+
Limpar
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.