Crie um conjunto de produtos e pesquise produtos
Este guia de início rápido demonstra como criar e usar os três tipos de recursos da API Vision Product Search: um conjunto de produtos que contém um grupo de produtos e imagens de referência associadas a esses produtos.
Neste início rápido, vai criar um conjunto de produtos, produtos e as respetivas imagens de referência num único passo através da importação em lote.
Depois de o conjunto de produtos ter sido indexado, pode consultar o conjunto de produtos através da API Vision Product Search.
Este guia de início rápido explica o processo de:
- Usar um CSV e a importação em massa para criar um conjunto de produtos, produtos e imagens de referência.
- Fazer um pedido à API Vision Product Search com uma imagem armazenada num contentor do Cloud Storage.
Antes de começar
Se ainda não o fez, configure o seu projeto conforme explicado abaixo.
Configure o seu projeto
- 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.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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.
-
-
Verify 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:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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.
-
-
Verify 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:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
- PROJECT_ID é o ID do seu Google Cloud projeto.
- LOCATION_ID é a Google Cloud localização que vai executar o seu tutorial, por exemplo,
us-east1
. Os identificadores de localização válidos são:us-west1
,us-east1
,europe-west1
easia-east1
. - PROJECT_ID
- LOCATION_ID
- PRODUCT_SET_ID
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
-
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
- Comece a usar a API Vision Product Search no seu idioma preferencial através de uma biblioteca cliente da API Vision Product Search.
- Siga os guias de instruções.
- Siga o Tutorial.
Defina variáveis de ambiente
Para tornar mais conveniente a execução dos exemplos curl
neste início rápido, defina as seguintes variáveis de ambiente, em que:
Usar um conjunto de dados
Neste guia de início rápido, usa um conjunto de dados de aproximadamente 100 entradas de apparel-v2
categoria de produtoapparel-v2
. Este conjunto de dados disponível publicamente está localizado num contentor do Cloud Storage público em:
O formato CSV é o seguinte:
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",
Use a importação em massa para criar um conjunto de produtos, produtos e imagens de referência
Use o seguinte comando curl
para criar um novo conjunto de produtos com produtos e imagens de referência. Este conjunto chama-se product_set0
, um valor declarado no CSV de importação.
Primeiro, crie um ficheiro JSON de pedido denominado import_request.json
e guarde-o no diretório de trabalho atual:
import_request.json
{ "inputConfig": { "gcsSource": { "csvFileUri": "gs://cloud-samples-data/vision/product_search/product_catalog.csv" } } }
Depois de criar o ficheiro JSON de pedido, envie o pedido:
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
Uma resposta bem-sucedida contém um objeto de operação de longa duração:
{ "name": "locations/LOCATION_ID/operations/0a0aec86192599fa" }
A resposta também contém um ID da operação relativo (por exemplo, 0a0aec86192599fa
) que pode ser usado para obter o estado da operação.
Obtenha o estado da operação de importação
Pode usar o operation-id devolvido pela operação de importação para verificar o estado da operação de importação em massa:
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
Uma resposta bem-sucedida tem o seguinte aspeto:
{ "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": [ {}, {}, [...] {}, {} ] } }
Indexar
O índice de produtos da Pesquisa de produtos é atualizado aproximadamente a cada 30 minutos. Quando as imagens são adicionadas ou eliminadas, a alteração não é refletida nas suas respostas da Pesquisa de produtos até à próxima atualização do índice.
Para se certificar de que a indexação foi concluída com êxito, verifique o campo
indexTime
de um conjunto de produtos.
Liste conjuntos de produtos e verifique a indexação
Pode listar todos os seus conjuntos de produtos e usar o campo indexTime
para verificar se a indexação foi concluída com êxito:
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
Uma resposta bem-sucedida apresenta todos os seus conjuntos de produtos, incluindo um ID do conjunto de produtos (por exemplo, product_set0
), bem como o campo indexTime
, que indica quando a indexação foi concluída:
{ "productSets": [ { "name": "projects/PROJECT_ID/locations/LOCATION_ID/productSets/product_set0", "displayName": " ", "indexTime": "2019-11-30T18:33:40.093508652Z", "indexError": {} } ] }
Liste produtos
Pode usar o PRODUCT_SET_ID devolvido da lista de conjuntos de produtos para listar todos os produtos no seu conjunto de produtos:
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
Uma resposta bem-sucedida apresenta os detalhes do produto.
Neste pedido, usa o parâmetro de consulta opcional
pageSize
para definir a lista de resultados para 15 produtos. O elemento
nextPageToken
na resposta também indica que existem mais
produtos a apresentar. Pode usar o token indicado para obter mais resultados. Para mais informações sobre a utilização de um pageToken
, consulte o artigo Obter e listar 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" }
Pesquise produtos correspondentes com a API Vision Product Search
Após a conclusão da indexação, pode pesquisar produtos que correspondam a uma imagem de exemplo. Neste início rápido, usa uma imagem armazenada num contentor do Google Cloud Storage, como a seguinte imagem.

gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg
Pesquise através de uma imagem remota
Use o seguinte pedido para pesquisar através da imagem armazenada num contentor do Cloud Storage público.
Primeiro, crie um ficheiro JSON de pedido denominado search_request.json
e guarde-o no diretório de trabalho atual. Altere os seguintes valores no JSON do pedido para corresponderem às informações do seu projeto:
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" } } } ] }
Depois de criar o ficheiro JSON de pedido, envie o pedido:
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
Um pedido bem-sucedido devolve uma lista de produtos correspondentes, indicados pelo respetivo ID do produto. Estes resultados são ainda discriminados por produtos individuais identificados por caixas delimitadoras se existirem vários produtos numa única imagem.
Para ver um exemplo de deteção de um único produto e deteção múltipla de produtos numa imagem, consulte Compreender as respostas de pesquisa e a deteção múltipla.
Também é devolvido um campo score
. Este campo indica a confiança com que o serviço considera que o produto corresponde à imagem fornecida, numa escala de 0 (sem confiança) a 1 (confiança total).
O campo indexTime
mostra a versão do índice que está a ser pesquisada. As alterações às imagens feitas após esta hora não são refletidas nos resultados.
Parabéns! Fez o seu primeiro pedido images.annotate
ao serviço Product Search da API Vision.