Analiza imágenes con un modelo de Gemini
En este instructivo, se muestra cómo crear un modelo remoto de BigQuery ML que se base en el modelo gemini-2.5-flash
y, luego, usar ese modelo con las funciones ML.GENERATE_TEXT
para analizar un conjunto de imágenes de pósteres de películas.
En este instructivo, se abarcan las siguientes tareas:
- Crear una tabla de objetos de BigQuery sobre datos de imágenes en un bucket de Cloud Storage.
- Crear un modelo remoto de BigQuery ML que se oriente al modelo
gemini-2.5-flash
de Vertex AI - Usar el modelo remoto con la función
ML.GENERATE_TEXT
para identificar las películas asociadas con un conjunto de pósteres de películas.
Los datos de pósteres de películas están disponibles en el bucket de Cloud Storage público gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
.
Roles obligatorios
Para ejecutar este instructivo, necesitas los siguientes roles de Identity and Access Management (IAM):
- Crear y usar conjuntos de datos, conexiones y modelos de BigQuery: Administrador de BigQuery (
roles/bigquery.admin
) - Otorga permisos a la cuenta de servicio de la conexión: Administrador de IAM del proyecto (
roles/resourcemanager.projectIamAdmin
).
Estos roles predefinidos contienen los permisos necesarios para realizar las tareas de este documento. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:
Permisos necesarios
- Crea un conjunto de datos:
bigquery.datasets.create
- Crea, delega y usa una conexión:
bigquery.connections.*
- Establece la conexión predeterminada:
bigquery.config.*
- Configura los permisos de la cuenta de servicio:
resourcemanager.projects.getIamPolicy
yresourcemanager.projects.setIamPolicy
- Crea una tabla de objetos:
bigquery.tables.create
ybigquery.tables.update
- Crea un modelo y ejecuta la inferencia:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Costos
En este documento, usarás los siguientes componentes facturables de 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 generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información sobre los precios de BigQuery, consulta Precios de BigQuery en la documentación de BigQuery.
Para obtener más información sobre los precios de IA generativa de Vertex AI, consulta la página Precios de Vertex AI.
Antes de comenzar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.
Console
En la consola de Google Cloud , ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el comando bq mk
con la marca --location
. Para obtener una lista completa de los parámetros posibles, consulta la
referencia del
comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos establecida enUS
y una descripción deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
En lugar de usar la marca
--dataset
, el comando usa el acceso directo-d
. Si omites-d
y--dataset
, el comando crea un conjunto de datos de manera predeterminada.Confirma que se haya creado el conjunto de datos:
bq ls
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Crea la tabla de objetos
Crea una tabla de objetos sobre las imágenes de pósteres de películas en el bucket público de Cloud Storage. La tabla de objetos permite analizar las imágenes sin transferirlas desde Cloud Storage.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para crear la tabla de objetos:
CREATE OR REPLACE EXTERNAL TABLE `bqml_tutorial.movie_posters` WITH CONNECTION DEFAULT OPTIONS ( object_metadata = 'SIMPLE', uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']);
Crea el modelo remoto
Crea un modelo remoto que represente un modelo gemini-2.5-flash
de Vertex AI:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para crear el modelo remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-vision` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'gemini-2.5-flash');
La consulta tarda varios segundos en completarse, después de eso, el modelo
gemini-vision
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Analiza los pósteres de películas
Usa el modelo remoto para analizar los pósteres de películas y determinar qué película representa cada uno de ellos. Luego, escribe estos datos en una tabla.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para analizar las imágenes de pósteres de películas:
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-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)));
En el editor de consultas, ejecuta la siguiente declaración para ver los datos de la tabla:
SELECT * FROM `bqml_tutorial.movie_posters_results`;
El resultado es similar al siguiente:
+--------------------------------------------+----------------------------------+ | 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 | | | } | | |
| +--------------------------------------------+----------------------------------+
Da formato a la salida del modelo
Da formato a los datos de análisis de películas que muestra el modelo para hacer que el título de la película y los datos de años sean más legibles.
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para dar formato a los datos:
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 );
En el editor de consultas, ejecuta la siguiente declaración para ver los datos de la tabla:
SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;
El resultado es similar al siguiente:
+--------------------------------------------+----------------------------+------+ | 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 | | | +--------------------------------------------+----------------------------+------+
Limpia
- 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.