Crea un conjunto de productos y busca productos
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
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Vision API:
gcloud services enable vision.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/storage.objectViewer
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Vision API:
gcloud services enable vision.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/storage.objectViewer
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Configura las variables de entorno
Para que sea más conveniente ejecutar las muestras de curl
en esta guía de inicio rápido, establece estas variables de entorno en las que se ilustra lo siguiente:
- PROJECT_ID es el ID de tu proyecto de Google Cloud.
- LOCATION_ID es la ubicación de Google Cloud que ejecutará el instructivo, por ejemplo,
us-east1
. Los identificadores de ubicación válidos son:us-west1
,us-east1
,europe-west1
yasia-east1
.
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 CSV es el siguiente:
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 print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -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 print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -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 se 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 print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -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 print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSets/PRODUCT_SET_ID/products?pageSize=15
Una respuesta exitosa enumera 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. Para
obtener más información sobre cómo usar pageToken
, consulta Obtén y enumera recursos.
{ "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.
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:
- PROJECT_ID
- LOCATION_ID
- 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 print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -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.
Para ver un ejemplo de detección de un solo producto y detección múltiple de productos en una imagen, consulta Información sobre las respuestas de búsqueda y la detección múltiple.
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
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
-
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
¿Qué sigue?
- Comienza a usar Product Search de la API de Vision en el lenguaje que elijas mediante la biblioteca cliente de Product Search de la API de Vision.
- Lee las guías prácticas.
- Lee el instructivo.