Anota imágenes con la función ML.ANNOTATE_IMAGE

En este documento, se describe cómo usar la función ML.ANNOTATE_IMAGE con un modelo remoto para anotar imágenes a partir de una tabla de objetos.

Permisos necesarios

  • Para crear una conexión, necesitas membresía en la siguiente función

    • roles/bigquery.connectionAdmin
  • Para otorgar permisos a la cuenta de servicio de la conexión, necesitas el siguiente permiso:

    • resourcemanager.projects.setIamPolicy
  • Para crear el modelo con BigQuery AA, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Para ejecutar inferencias, necesitas los siguientes permisos:

    • bigquery.tables.getData en la tabla de objetos
    • bigquery.models.getData en el modelo
    • bigquery.jobs.create

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection API, and Cloud Vision API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection API, and Cloud Vision API APIs.

    Enable the APIs

Crear una conexión

Crea una conexión de recurso en la nube y obtén la cuenta de servicio de la conexión.

Selecciona una de las opciones siguientes:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para crear una conexión, haz clic en Agregar y, luego, en Conexiones a fuentes de datos externas.

  3. En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).

  4. En el campo ID de conexión, escribe un nombre para tu conexión.

  5. Haz clic en Crear conexión (Create connection).

  6. Haz clic en Ir a la conexión.

  7. En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.

bq

  1. En un entorno de línea de comandos, crea una conexión:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    El parámetro --project_id anula el proyecto predeterminado.

    Reemplaza lo siguiente:

    • REGION: tu región de conexión
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • CONNECTION_ID: Es un ID para tu conexión.

    Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.

    Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    El resultado es similar a este:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Agrega la siguiente sección a tu archivo 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 = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Reemplaza lo siguiente:

  • CONNECTION_ID: Es un ID para tu conexión.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • REGION: tu región de conexión

Otorga acceso a la cuenta de servicio

Elige una de las opciones siguientes:

Console

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haga clic en Agregar.

    Se abre el cuadro de diálogo Agregar principales.

  3. En el campo Principales nuevas (New principals), ingresa el ID de la cuenta de servicio que copiaste antes.

  4. En el campo Seleccionar una función, selecciona Service Usage y, luego, Consumidor de Service Usage.

  5. Haz clic en Agregar otra función.

  6. En el campo Seleccionar una función, selecciona BigQuery y, luego, Usuario de conexión de BigQuery.

  7. Haz clic en Guardar.

gcloud

Usa el comando gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/serviceusage.serviceUsageConsumer' --condition=None
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/bigquery.connectionUser' --condition=None

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número de tu proyecto.
  • MEMBER: Es el ID de la cuenta de servicio que copiaste antes.

Si no se otorga el permiso, se produce un error.

Crea una tabla de objetos

Crea una tabla de objetos que tenga contenido de imágenes. La tabla de objetos permite analizar las imágenes sin transferirlas desde Cloud Storage.

El bucket de Cloud Storage que usa la tabla de objetos debe estar en el mismo proyecto en el que planeas crear el modelo y llamar a la función ML.ANNOTATE_IMAGE. Si deseas llamar a la función ML.ANNOTATE_IMAGE en un proyecto diferente al que contiene el bucket de Cloud Storage que usa la tabla de objetos, debes otorgar la función de administrador de almacenamiento en a nivel del bucket.

Crear un modelo

Crea un modelo remoto con un REMOTE_SERVICE_TYPE de CLOUD_AI_VISION_V1:

CREATE OR REPLACE MODEL
`PROJECT_ID.DATASET_ID.MODEL_NAME`
REMOTE WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID
OPTIONS (REMOTE_SERVICE_TYPE = 'CLOUD_AI_VISION_V1');

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en la misma ubicación que la conexión que usas.
  • MODEL_NAME: el nombre del modelo
  • REGION: Es la región que usa la conexión.
  • CONNECTION_ID: el ID de conexión, por ejemplo, myconnection.

    Cuando ves los detalles de conexión en la consola de Google Cloud, el ID de conexión es el valor en la última sección del ID de conexión completamente calificado que se muestra en ID de conexión, por ejemplo projects/myproject/locations/connection_location/connections/myconnection.

Anotar imágenes

Anota imágenes con la función ML.ANNOTATE_IMAGE:

SELECT *
FROM ML.ANNOTATE_IMAGE(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.OBJECT_TABLE_NAME,
  STRUCT(['FEATURE_NAME' [,...]] AS vision_features)
);

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: el nombre del modelo
  • OBJECT_TABLE_NAME: Es el nombre de la tabla de objetos que contiene los URI de las imágenes que se anotarán.
  • FEATURE_NAME: El nombre de una función de la API de Cloud Vision compatible.

Ejemplo 1

En el siguiente ejemplo, se etiquetan los elementos que se muestran en las imágenes:

SELECT *
FROM ML.ANNOTATE_IMAGE(
  MODEL `myproject.mydataset.myvisionmodel`,
  TABLE myproject.mydataset.image_table,
  STRUCT(['label_detection'] AS vision_features)
);

Ejemplo 2

En el siguiente ejemplo, se detectan los rostros que se muestran en las imágenes y también se muestran atributos de imagen, como los colores predominantes:

SELECT *
FROM ML.ANNOTATE_IMAGE(
  MODEL `myproject.mydataset.myvisionmodel`,
  TABLE myproject.mydataset.image_table,
  STRUCT(['face_detection', 'image_properties'] AS vision_features)
);

¿Qué sigue?