Analiza las imágenes

En este instructivo, se muestra cómo obtener estadísticas de datos de imágenes no estructurados mediante la integración de BigQuery ML con Gemini. En el instructivo, crearás un modelo remoto basado en gemini-2.5-flash y usarás la función AI.GENERATE_TEXT para extraer automáticamente metadatos, como títulos y años de lanzamiento, de una colección de pósteres de películas.

Objetivos

  • 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 tenga como objetivo el modelo gemini-2.5-flash de Gemini Enterprise Agent Platform.
  • Usar el modelo remoto con la función AI.GENERATE_TEXT para identificar las películas asociadas con un conjunto de pósteres de películas.

Costos

En este instructivo, se usan los siguientes componentes facturables de Cloud de Confiance:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

Antes de comenzar

  1. En la Cloud de Confiance consola, en la página del selector de proyectos, selecciona o crea un Cloud de Confiance proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Seleccionar un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.

    Ir al selector de proyectos

  2. Verifica que la facturación esté habilitada para tu Cloud de Confiance proyecto.

  3. Habilita las APIs de BigQuery, BigQuery Connection y Agent Platform.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    Habilitar las API

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).
  • Otorgar 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

  • Crear un conjunto de datos: bigquery.datasets.create
  • Crear, delegar y usar una conexión: bigquery.connections.*
  • Establecer la conexión predeterminada: bigquery.config.*
  • Establecer permisos de la cuenta de servicio: resourcemanager.projects.getIamPolicy y resourcemanager.projects.setIamPolicy
  • Crear una tabla de objetos: bigquery.tables.create y bigquery.tables.update
  • Crear un modelo y ejecutar 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.

Prepara el entorno

Para realizar la inferencia de BigQuery ML en tablas de objetos con gemini-2.5-flash, debes asignar una reserva de BigQuery a tu proyecto. Si ya hay una reserva asignada a tu proyecto, puedes omitir este paso.

Crea una reserva

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. En el menú de navegación, haz clic en Administración de cargas de trabajo.

  3. Haz clic en Crear una reserva.

  4. En la página Crear reserva, haz lo siguiente:

    1. En Nombre de reserva, ingresa bqml-tutorial-reservation.
    2. En Ubicación, selecciona US (múltiples regiones en Estados Unidos).
    3. Deja el resto de la configuración predeterminada como está y haz clic en Guardar.

Asigna la reserva

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. En el menú de navegación, haz clic en Administración de cargas de trabajo.

  3. En la tabla Reservas de ranuras, busca la reserva que deseas asignar a tu proyecto.

  4. Haz clic en Ver acciones > Crear asignación.

  5. En Crear una tarea, haz clic en Explorar y selecciona tu proyecto.

  6. En Tipo de trabajo, selecciona QUERY. Esta selección garantiza que tus consultas de SQL usen las ranuras de esta reserva.

  7. Haz clic en Crear.

Crea un conjunto de datos

Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:

Console

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

    Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.

  3. En Explorar, expande tu proyecto y, luego, haz clic en Conjuntos de datos.

  4. En la página Conjuntos de datos, haz clic en Crear conjunto de datos.

  5. En el panel Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, ingresa bqml_tutorial.

    • En Ubicación de los datos, selecciona US.

    Deja el resto de la configuración predeterminada como está.

  6. Haz clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos nuevo, usa el bq mk --dataset comando.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos establecida en US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirma que se haya creado el conjunto de datos:

    bq ls

API

Llama al datasets.insert método con un recurso de conjunto de datos definido:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

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 te permite analizar las imágenes sin transferirlas desde Cloud Storage.

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. 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 Agent Platform:

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. 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 puede tardar unos minutos en completarse. Después de eso, el modelo gemini-vision aparecerá en el conjunto de datos bqml_tutorial en el panel Explorador. Debido a que la consulta usa una declaración CREATE 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.

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. 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,
       result
      FROM
        AI.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)));
        
  3. 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                                        | 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 al resultado del modelo

Para que el título de la película y los datos de años sean más fáciles de leer, da formato a los datos que muestra el modelo.

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. 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.result, " ```json"), "```"), "$.title") AS title,
        JSON_QUERY(RTRIM(LTRIM(results.result, " ```json"), "```"), "$.year") AS year
      FROM
        `bqml_tutorial.movie_posters_results` results );
  3. 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            |                            |      |
    +--------------------------------------------+----------------------------+------+
    

Borra el proyecto

  1. En la Cloud de Confiance consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.

Borra los recursos individuales

Si deseas volver a usar el proyecto, borra los recursos que creaste para el instructivo.

Borra el conjunto de datos

Console

Para borrar todo el conjunto de datos bqml_tutorial y todo su contenido, ejecuta el siguiente comando SQL:

DROP SCHEMA IF EXISTS `bqml_tutorial` CASCADE;

bq

Borra todo el conjunto de datos bqml_tutorial y todo su contenido:

bq rm -r bqml_tutorial

Borra la reserva

Console

Si creaste una reserva de BigQuery como parte de este instructivo, debes quitarla para evitar cargos continuos por ranuras.

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. En el menú de navegación, haz clic en Administración de cargas de trabajo.

  3. En la tabla Reservas de ranuras, busca bqml-tutorial-reservation.

  4. Haz clic en Ver acciones > Borrar.

bq

Si creaste una reserva de BigQuery llamada bqml-tutorial-reservation en la ubicación us, usa el siguiente comando para quitarla:

bq rm --reservation --location=us bqml-tutorial-reservation

Borra la conexión

Console

  1. En la Cloud de Confiance consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador, busca tu proyecto y, luego, haz clic en Conexiones.

  3. En la tabla, busca tu conexión.

  4. Haz clic en Ver acciones > Borrar.

bq

Borra la conexión:

bq rm --connection --location=us CONNECTION_ID

Reemplaza CONNECTION_ID por el ID real de tu conexión.

¿Qué sigue?