Etiqueta imágenes con la API de AutoML Vision

En esta guía de inicio rápido, se te guiará por los siguientes procesos:

  • Copiar un CSV que enumera imágenes y cuadros de límite con etiquetas en Google Cloud Storage
  • Usar la detección de objetos de AutoML Vision para crear tu conjunto de datos y entrenar y, luego, implementar tu modelo

En esta guía de inicio rápido, debes usar los comandos cURL para enviar solicitudes a la API de AutoML Vision. Consulta la Guía de inicio rápido sobre cómo usar la interfaz de usuario para completar todos los pasos que se indican aquí en la interfaz de usuario. Si deseas obtener más instrucciones para usar la IU o la API, consulta las guías prácticas.

Antes de comenzar

Configura tu proyecto

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  6. Habilita las APIs de AutoML and Cloud Storage:

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  10. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  11. Habilita las APIs de AutoML and Cloud Storage:

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  12. Establece la variable de entorno PROJECT_ID para tu ID del proyecto.
    export PROJECT_ID=PROJECT_ID
    Las llamadas a la API de AutoML y los nombres de los recursos incluyen el ID del proyecto. La variable de entorno PROJECT_ID proporciona una manera conveniente de especificar el ID.

Prepara un conjunto de datos

En esta guía de inicio rápido, usarás un conjunto de datos creado a partir del conjunto de datos de imágenes abiertas V4. Este conjunto de datos de ensaladas público se encuentra en gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv.

El formato CSV es el siguiente:

TRAINING,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Salad,0.0,0.0954,,,0.977,0.957,,
VALIDATION,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Seafood,0.0154,0.1538,,,1.0,0.802,,
TEST,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Tomato,0.0,0.655,,,0.231,0.839,,
Ejemplo de una imagen de conjunto de datos
3916261642_0a504acd60_o.jpg

Cada fila corresponde a un objeto ubicado dentro de una imagen mayor, con cada objeto designado de forma específica como datos de prueba, entrenamiento o validación. Las tres líneas que se incluyen aquí indican tres objetos distintos ubicados dentro de la misma imagen disponibles en gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg. Cada fila tiene una etiqueta diferente: Salad, Seafood o Tomato, además de otras filas con etiquetas Baked goods o Cheese.

Se especifican cuadros de límite para cada imagen con el vértice superior izquierdo y el vértice inferior derecho:

  • (0,0) corresponde al vértice superior izquierdo.
  • (1,1) corresponde al vértice inferior derecho.

En la primera fila, las coordenadas (x, y) del vértice superior izquierdo del objeto etiquetado Salad son (0.0,0.0954), y las coordenadas del vértice inferior derecho del objeto son (0.977,0.957).

Si deseas obtener información más detallada sobre cómo dar formato al archivo CSV y los requisitos mínimos para crear un conjunto de datos válido, consulta Prepara los datos de entrenamiento.


Crea un conjunto de datos e importa datos de entrenamiento

El comando curl usa el comando gcloud auth print-access-token a fin de obtener un token de acceso para tu Cuenta de Google.

Para la versión Beta, usa us-central1 como la región, sin importar la ubicación real.

Crea un conjunto de datos

Usa el siguiente comando curl para crear un conjunto de datos nuevo con el nombre visible que prefieras:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
"https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets" -d '{
    "display_name": "DISPLAY_NAME",
    "image_object_detection_dataset_metadata": {
    }
}'

La respuesta muestra un ID de conjunto de datos relativo (como IOD5491013845671477445) que necesitarás en los siguientes pasos.

{
  "name": "projects/PROJECT_ID/locations/us-central1/datasets/IOD5491013845671477445",
  "displayName": "DISPLAY_NAME",
  "createTime": "2018-10-29T15:45:53.353442Z",
  "imageObjectDetectionDatasetMetadata": {}
}

Importa datos

Importa los datos de entrenamiento en tu conjunto de datos. El comando importData toma como entrada el URI del conjunto de datos. Aquí proporcionarás la dirección pública de Google Cloud Storage en la que se almacena el conjunto de datos Salads. Es posible que este proceso tome hasta 30 minutos.

  • Reemplaza DATASET_ID por el identificador del conjunto de datos (no el nombre visible). Por ejemplo: IOD5491013845671477445.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID:importData \
-d '{
  "input_config": {
    "gcs_source": {
       "input_uris": [
         "gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv"
        ]
    }
  }
}'

La respuesta muestra un ID de operación relativo (por ejemplo, IOD1555149246326374411) que se puede usar para obtener el estado de la operación.

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-29T15:56:29.176485Z",
    "updateTime": "2018-10-29T15:56:29.176485Z",
    "importDataDetails": {}
  }
}

Obtén el estado de la operación de importación

Puedes consultar el estado de la operación de importación de datos mediante el siguiente comando curl.

  • Reemplaza OPERATION_ID por el ID de la operación que se muestra en la operación de importación de datos.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID

La operación de importación puede tomar un tiempo en completarse. Cuando la tarea de importación se complete, verás done: true en el estado de la operación sin errores, como se muestra en el siguiente ejemplo.

Esta solicitud también mostrará advertencias para la importación del conjunto de datos. Se agregaron errores a este conjunto de datos para mostrarte un ejemplo de estas advertencias. Usar esta operación para ver las advertencias es una forma útil de encontrar errores en los datos.

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-29T15:56:29.176485Z",
    "updateTime": "2018-10-29T16:10:41.326614Z",
    "importDataDetails": {}
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

Obtén una lista de conjuntos de datos

Para obtener una lista de tus conjuntos de datos, usa el siguiente comando.

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets

Deberías ver un resultado similar al siguiente:

{
  "datasets": [
    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID1",
      "displayName": "DISPLAY_NAME1",
      "createTime": "2018-10-29T15:45:53.353442Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID2",
      "displayName": "DISPLAY_NAME2",
      "createTime": "2018-10-24T21:06:05.390059Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    }
  ]
}

Entrena tu modelo

Inicia una aplicación de entrenamiento de modelos

Luego de crear el conjunto de datos y de importar los datos de entrenamiento en el conjunto, puedes entrenar el modelo personalizado.

Entrena el modelo mediante el siguiente comando curl.

  • Reemplaza DATASET_ID por el identificador del conjunto de datos (no el nombre visible).
  • Reemplaza DISPLAY_NAME por un nombre que elijas para el modelo.
  • Especifica image_object_detection_model_metadata.model_type. Hay dos opciones disponibles para optimizar la latencia o la exactitud:
    • cloud-low-latency-1: Optimiza el entrenamiento para la latencia.
    • cloud-high-accuracy-1: Optimiza el entrenamiento para la exactitud.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models -d '{
  "datasetId": "DATASET_ID",
  "displayName": "DISPLAY_NAME",
  "image_object_detection_model_metadata": {},
}'

Deberías recibir un ID para la operación de entrenamiento del modelo (por ejemplo, IOD5644417707978784777) que puedes usar a fin de obtener el estado de la operación de entrenamiento.

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-29T16:41:23.902167Z",
    "updateTime": "2018-10-29T16:41:23.902167Z",
    "createModelDetails": {}
  }
}

El proceso de entrenamiento puede tomar varias horas en completarse.

Obtén el estado de la operación de entrenamiento de modelos

Puedes consultar el estado de la operación de entrenamiento de modelos mediante el siguiente comando curl.

  • Reemplaza OPERATION_ID por el ID de la operación de entrenamiento.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID

Deberías ver un resultado similar al siguiente. Cuando se complete la operación, verás done: true sin errores.


{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-24T22:08:23.327323Z",
    "updateTime": "2018-10-24T23:41:18.452855Z",
    "createModelDetails": {}
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.Model",
    "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784777"
  }
}

Verifica que el modelo esté disponible

Una vez que la operación de entrenamiento de modelos se complete de forma correcta, puedes verificar que el modelo esté disponible mediante el siguiente comando para enumerar los modelos del proyecto.

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models

Deberías recibir un ID de modelo (por ejemplo, IOD5644417707978784778) que puedes usar para obtener métricas de evaluación del modelo cuando finalice el entrenamiento. Deberías ver un resultado similar al siguiente:

{
  "model": [
    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784778",
      "displayName": "DISPLAY_NAME",
      "datasetId": "IOD5491013845671477445",
      "createTime": "2018-10-24T23:37:00.858493Z",
      "updateTime": "2018-10-24T23:37:00.858493Z",
      "deploymentState": "DEPLOYED",
      "imageObjectDetectionModelMetadata": {
          "modelType": "cloud-low-latency-1",
          "nodeCount": "1",
          "nodeQps": 1.2987012987012987
      }
    }
  ]
}

Evalúa el modelo

Una vez que finalizó el entrenamiento del modelo, puedes enumerar las métricas de evaluación del modelo mediante el siguiente comando curl.

  • Reemplaza MODEL_ID por el identificador del modelo.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations

La detección de objetos de AutoML Vision proporciona un conjunto agregado de métricas de evaluación que indican el rendimiento general del modelo y, también, métricas de evaluación para cada etiqueta, que indican el rendimiento del modelo en esa etiqueta con diferentes umbrales.

Implementa tu modelo

Para poder realizar una predicción, debes implementar el modelo de forma manual.

Usa el siguiente comando para implementar tu modelo:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:deploy \
  -d '{
      "imageObjectDetectionModelDeploymentMetadata": {
        "nodeCount": 2
      }
    }'

Realiza una predicción

Envía una solicitud de predicción

Puedes usar el modelo implementado para realizar una predicción en una imagen local mediante el siguiente archivo JSON y el comando curl.

  • Crea un archivo JSON de solicitud llamado predict_request.json y proporciona una imagen codificada en base64 en el campo "imageBytes".

predict_request.json

{
    "payload": {
        "image": {
            "image_bytes": "/9j/4QAYRXhpZgAA...base64-encoded-image...9tAVx/zDQDlGxn//2Q=="
        }
    }
}

  • Reemplaza MODEL_ID por el identificador del modelo.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
"https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:predict" -d @PATH_TO_JSON_FILE/predict_request.json

Una solicitud correcta muestra una respuesta con uno o más cuadros de límite especificados por dos normalizedVertices opuestos en diagonal. Cada cuadro de límite identificado tiene una score de confianza y una anotación (displayName) asociadas.

{
  "payload": [
    {
      "imageObjectDetection": {
        "boundingBox": {
          "normalizedVertices": [
            {
              "x": 0.034553755,
              "y": 0.015524037
            },
            {
              "x": 0.941527,
              "y": 0.9912563
            }
          ]
        },
        "score": 0.9997793
      },
      "displayName": "Salad"
    },
    {
      "imageObjectDetection": {
        "boundingBox": {
          "normalizedVertices": [
            {
              "x": 0.11737197,
              "y": 0.7098793
            },
            {
              "x": 0.510878,
              "y": 0.87987
            }
          ]
        },
        "score": 0.63219965
      },
      "displayName": "Tomato"
    }
  ]
}

Anula la implementación del modelo (opcional)

El modelo generará cargos mientras esté implementado. Para evitar que se generen costos por el hosting del modelo, puedes anular su implementación.

Ejecuta el siguiente comando para anular la implementación del modelo:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Content-Type: application/json" \
  "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:undeploy"

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.

Si ya no necesitas el modelo personalizado ni el conjunto de datos relacionado, puedes borrarlos.

Enumera modelos

Puedes enumerar los modelos del proyecto, junto con sus identificadores, mediante el siguiente comando:

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models

Borra un modelo

Puedes borrar un modelo con el siguiente comando.

  • Reemplaza MODEL_ID por el identificador del modelo.
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID

Enumera conjuntos de datos

Puedes enumerar los conjuntos de datos del proyecto, junto con sus identificadores, mediante el siguiente comando:

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets

Borra un conjunto de datos

Puedes borrar un conjunto de datos mediante el siguiente comando.

  • Reemplaza DATASET_ID por el identificador del modelo.
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID

¿Qué sigue?