Guía de inicio rápido

En esta guía de inicio rápido, se muestra cómo crear y usar los tres tipos de recursos de Product Search de la API de Vision: conjunto de productos que contiene un grupo de productos e imágenes de referencia asociadas con esos productos.

En esta guía de inicio rápido, crearás un conjunto de productos, productos y sus imágenes de referencia en un solo paso mediante la importación por lotes.

Después de indexar el conjunto de productos, puedes consultarlo mediante Product Search de la API de Vision.

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

  • Usar un CSV y la importación masiva para crear un conjunto de productos, imágenes de referencia y productos
  • Enviar una solicitud a Product Search de la API de Vision con una imagen almacenada en un bucket de Cloud Storage

Antes de comenzar

Si aún no lo hiciste, configura tu proyecto como se explica a continuación.

Configura tu proyecto

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

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

    Descubre cómo puedes habilitar la facturación

  4. Habilita las Vision API.

    Habilita la API

  5. Configura la autenticación
    1. En Cloud Console, ve a la página Crea una clave de cuenta de servicio.

      Ir a la página Crea una clave de la cuenta de servicio
    2. En la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.
    3. Ingresa un nombre en el campo Nombre de cuenta de servicio.
    4. En la lista Función, selecciona Proyecto > Propietario.

    5. Haz clic en Crear. Se descargará un archivo JSON que contiene tus claves a tu computadora.
  6. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta del archivo JSON que contiene la clave de tu cuenta de servicio. Esta variable solo se aplica a la sesión actual de shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.

Configura variables de entorno

Para que sea más conveniente ejecutar las muestras de curl en este tema, establece estas variables de entorno en las que se ilustra lo siguiente:

  • project-id es el ID del proyecto de Google Cloud Platform (GCP).
  • region-name es la ubicación de GCP que ejecutará el instructivo, por ejemplo, us-east1. Los identificadores de ubicación válidos son: us-west1, us-east1, europe-west1 y asia-east1.
export PROJECT_ID=project-id
export LOCATION_ID=region-name

Usa un conjunto de datos

En esta guía de inicio rápido, usarás un conjunto de datos de aproximadamente 100 entradas de categoría de producto apparel-v2. Este conjunto de datos público se encuentra en un bucket público de Cloud Storage en esta ruta:

El formato de CSV se define de la siguiente manera:

gs://cloud-ai-vision-data/product-search-tutorial/images/filename1.jpg,image0,product_set0,product_id0,apparel-v2,,"style=women,category=shoe",
gs://cloud-ai-vision-data/product-search-tutorial/images/filename2.jpg,image1,product_set0,product_id1,apparel-v2,,"style=men,category=shoe",
gs://cloud-ai-vision-data/product-search-tutorial/images/filename3.jpg,image2,product_set0,product_id2,apparel-v2,,"style=women,category=dress",
.

Usa la importación por lotes para crear un conjunto productos, imágenes de referencia y productos

Usa el siguiente comando de curl para crear un nuevo conjunto de productos con imágenes de referencia y productos. Este conjunto se llama product_set0, un valor declarado en el archivo CSV de importación.

Primero, crea un archivo JSON de solicitud llamado import_request.json y guárdalo en el directorio de trabajo actual.

import_request.json

{
  "inputConfig": {
    "gcsSource": {
      "csvFileUri": "gs://cloud-samples-data/vision/product_search/product_catalog.csv"
    }
  }
}

Después de crear el archivo JSON, envía la solicitud:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @import_request.json \
    https://vision.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION_ID/productSets:import

Una respuesta correcta contiene un objeto de operación de larga duración como el que se muestra a continuación:

{
  "name": "locations/location-id/operations/0a0aec86192599fa"
}

La respuesta también contiene un ID de operación relativo (por ejemplo, 0a0aec86192599fa) que se puede usar para obtener el estado de la operación.

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

Puedes usar el operation-id que muestra la operación de importación para verificar el estado de la operación de importación masiva:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/locations/$LOCATION_ID/operations/operation-id

Una respuesta correcta se ve de la siguiente manera:

{
  "name": "locations/location-id/operations/0a0aec86192599fb",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.BatchOperationMetadata",
    "state": "SUCCESSFUL",
    "submitTime": "2018-11-30T03:11:04.808114024Z",
    "endTime": "2018-11-30T03:11:38.624444324Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.ImportProductSetsResponse",
    "referenceImages": [
      {
        "name": "projects/project-id/locations/location-id/products/product_id0/referenceImages/image0",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/46a0cbcf70ba11e89399d20059124800.jpg"
      },
      {
        "name": "projects/project-id/locations/location-id/products/product_id1/referenceImages/image1",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/46a1aea370ba11e888d4d20059124800.jpg"
      },
      ...
      {
        "name": "projects/project-id/locations/location-id/products/product_id93/referenceImages/image93",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/4697319970ba11e8a7bfd20059124800.jpg"
      },
      {
        "name": "projects/project-id/locations/location-id/products/product_id94/referenceImages/image94",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/4698596370ba11e8bf6ad20059124800.jpg"
      }
    ],
    "statuses": [
      {},
      {},
       ...
      {},
      {}
    ]
  }
}

Indexación

El índice de productos de Product Search se actualiza cada 30 minutos aproximadamente. Cuando se agregan o borran imágenes, los cambios no se reflejarán en las respuestas de Product Search hasta que el índice se actualice.

Para asegurarse de que la indexación se completó con éxito, revise el campo indexTime de un conjunto de productos.

Enumera conjuntos de productos y verifica la indexación

Puedes enumerar todos los conjuntos de productos y usar el campo indexTime para verificar que la indexación se haya completado de forma correcta:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json" \
    https://vision.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION_ID/productSets

En una respuesta correcta, se enumeran todos los conjuntos de productos, incluido el ID del conjunto (por ejemplo, product_set0) y el campo indexTime, que indica cuándo se completó la indexación:

{
  "productSets": [
    {
      "name": "projects/project-id/locations/location-id/productSets/product_set0",
      "displayName": " ",
      "indexTime": "2019-11-30T18:33:40.093508652Z",
      "indexError": {}
    }
  ]
}

Enumera productos

Puedes usar el product-set-id que se muestra en la lista de conjuntos de productos para enumerar todos los productos del conjunto:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION_ID/productSets/product-set-id/products?pageSize=15

En una respuesta correcta, se enumeran los detalles de los productos.

En esta solicitud, se usa el parámetro de búsqueda opcional pageSize para establecer la lista de resultados en 15 productos. El nextPageToken en la respuesta también indica que hay más productos para enumerar. Puedes usar este token para recuperar más resultados. Consulta Obtén y enumera recursos si deseas obtener más información sobre cómo usar un pageToken.

{
  "products": [
    {
      "name": "projects/project-id/locations/location-id/products/product_id0",
      "displayName": " ",
      "productCategory": "apparel",
      "productLabels": [
        {
          "key": "style",
          "value": "women"
        },
        {
          "key": "category",
          "value": "shoe"
        }
      ]
    },
    {
      "name": "projects/project-id/locations/location-id/products/product_id1",
      "displayName": " ",
      "productCategory": "apparel",
      "productLabels": [
        {
          "key": "style",
          "value": "men"
        },
        {
          "key": "category",
          "value": "shoe"
        }
      ]
    },
    ...
    {
      "name": "projects/project-id/locations/location-id/products/product_id21",
      "displayName": " ",
      "productCategory": "apparel",
      "productLabels": [
        {
          "key": "style",
          "value": "women"
        },
        {
          "key": "category",
          "value": "dress"
        }
      ]
    }
  ],
  "nextPageToken": "1LqhSgZfM_uWKOxvog"
}

Busca productos que coincidan mediante Product Search de la API de Vision

Una vez que se complete la indexación, puedes buscar productos que coincidan con una imagen de muestra. En esta guía de inicio rápido, se usa una imagen almacenada en un bucket de Google Cloud Storage, como la imagen que aparece a continuación.

Imagen de un vestido en el bucket de Cloud Storage
gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg

Busca con una imagen remota

Usa la siguiente solicitud para buscar mediante la imagen almacenada en un bucket público de Cloud Storage.

Primero, crea un archivo JSON de solicitud llamado search_request.json y guárdalo en el directorio de trabajo actual. Cambia los siguientes valores en la solicitud JSON para que coincidan con la información de tu proyecto:

  • my-project-id
  • my-location-id
  • my-product-set-id

search_request.json

{
  "requests": [
    {
      "image": {
        "source": {
          "gcsImageUri": "gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg"
        }
      },
      "features": [
        {
          "type": "PRODUCT_SEARCH"
        }
      ],
      "imageContext": {
        "productSearchParams": {
          "productSet": "projects/project-id/locations/location-id/productSets/product-set-id",
          "productCategories": [
               "apparel-v2"
             ],
        "filter": "style=womens OR style=women"
        }
      }
    }
  ]
}

Después de crear el archivo JSON, envía la solicitud:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @search_request.json \
    https://vision.googleapis.com/v1/images:annotate

Una solicitud correcta muestra una lista de los productos coincidentes, indicados por su ID. Estos resultados se desglosan en productos individuales identificados por cuadros de límite si hay varios productos en una sola imagen.

Consulta el tema Información sobre las respuestas de búsqueda y la detección múltiple para ver un ejemplo de detección de un solo producto y detección múltiple de productos en una imagen.

También se muestra un campo score. En este campo, se indica la confianza con la que el servicio considera que el producto coincide con la imagen dada, en una escala del 0 (sin confianza) al 1 (confianza total).

En el campo indexTime, se muestra la versión del índice que se busca. Los cambios de imágenes que se realicen después de esto no se reflejarán en los resultados.

Felicitaciones. Realizaste tu primera solicitud images.annotate al servicio de Product Search de la API de Vision.

Realiza una limpieza

A fin de evitar cargos innecesarios de Google Cloud Platform, usa Cloud Console para borrar tu proyecto si no lo necesitas.

Próximos pasos