Criar um conjunto de produtos e pesquisar produtos

Neste guia de início rápido, demonstramos como criar e usar os três tipos de recursos da Pesquisa de Produtos da API Vision: um conjunto de produtos que contém um grupo de produtos e imagens de referência associadas a eles.

Neste guia de início rápido, você vai criar um conjunto de produtos, produtos individuais e as imagens de referência deles em uma única etapa por meio da importação em lote.

Depois que o conjunto de produtos for indexado, será possível consultá-lo usando a Pesquisa de Produtos da API Vision.

Este guia de início rápido detalha os seguintes processos:

  • usar um CSV e uma importação em massa para criar um conjunto de produtos, produtos e imagens de referência;
  • fazer uma solicitação para a Pesquisa de produtos da API do Vision com uma imagem armazenada em um bucket do Cloud Storage.

Antes de começar

Configure seu projeto como explicado abaixo, se ainda não tiver feito isso.

Criar o projeto

  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. Install the Google Cloud CLI.

  3. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  4. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  5. 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.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vision API:

    gcloud services enable vision.googleapis.com
  8. 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.
  9. Install the Google Cloud CLI.

  10. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  11. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  12. 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.

  13. Verify that billing is enabled for your Google Cloud project.

  14. Enable the Vision API:

    gcloud services enable vision.googleapis.com
  15. 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.
  16. Definir as variáveis de ambiente

    Para simplificar a execução dos exemplos de curl neste guia de início rápido, defina as seguintes variáveis de ambiente:

    • PROJECT_ID é o ID do projeto do Google Cloud .
    • LOCATION_ID é o local do Google Cloud que vai executar seu tutorial, por exemplo, us-east1. Os identificadores de local válidos são: us-west1, us-east1, europe-west1 e asia-east1.

    Como usar um conjunto de dados

    Neste guia de início rápido, use um conjunto de dados de aproximadamente 100 entradas da categoria dos produtos apparel-v2. Esse conjunto de dados disponível ao público está localizado em um bucket público do Cloud Storage 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",
    

    Usar 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. Esse conjunto recebe o nome product_set0, um valor declarado no CSV de importação.

    Primeiro, crie um arquivo JSON de solicitação chamado import_request.json e salve-o no diretório de trabalho atual.

    import_request.json

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

    Após criar o arquivo JSON de solicitação, envie a solicitação:

    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 de operação relativo (por exemplo, 0a0aec86192599fa) que pode ser usado para ver o status da operação.

    Receber o status da operação de importação

    Você pode usar o operation-id retornado da operação de importação para verificar o status 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

    Veja um exemplo de uma resposta bem-sucedida:

    {
      "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": [
          {},
          {},
          [...]
          {},
          {}
        ]
      }
    }

    Indexação

    O índice da Pesquisa de Produtos é atualizado aproximadamente a cada 30 minutos. Quando houver adição ou exclusão de imagens, essas mudanças só vão aparecer nas respostas da Pesquisa de Produtos quando o índice for atualizado.

    Para saber se a indexação foi realizada, verifique o campo indexTime do conjunto de produtos.

    Listar conjuntos de produtos e verificar a indexação

    Liste todos os seus conjuntos de produtos e use o campo indexTime para conferir se a indexação foi concluída:

    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 relaciona todos os seus conjuntos de produtos, incluindo o ID do conjunto (por exemplo, product_set0) e 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": {}
        }
      ]
    }

    Listar produtos

    Você pode usar o PRODUCT_SET_ID retornado 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 lista os detalhes do produto.

    Nessa solicitação, use o parâmetro de consulta opcional pageSize para limitar a lista de resultados a 15 produtos. O nextPageToken na resposta também indica que há mais produtos para listar. É possível usar o token listado para recuperar mais resultados. Para mais informações sobre como usar um pageToken, consulte Como receber 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"
    }

    Pesquisar produtos correspondentes com a Pesquisa de Produtos da API Vision

    Depois que a indexação for concluída, será possível pesquisar produtos que correspondam a uma imagem de exemplo. Neste guia de início rápido, você usa uma imagem armazenada em um bucket do Google Cloud Storage, como a imagem a seguir.

    A imagem de um vestido em um bucket do Cloud Storage.
    gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg

    Pesquisar usando uma imagem remota

    Use a seguinte solicitação para pesquisar usando a imagem armazenada em um bucket público do Cloud Storage.

    Primeiro, crie um arquivo JSON de solicitação chamado search_request.json e salve-o no diretório de trabalho atual. Altere os seguintes valores no JSON da solicitação para corresponder às informações do seu projeto:

    • 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"
            }
          }
        }
      ]
    }

    Após criar o arquivo JSON de solicitação, envie a solicitação:

    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

    Uma solicitação bem-sucedida retorna uma lista de produtos correspondentes, indicada pelos respectivos IDs. Esses resultados são subdivididos por produtos individuais, identificados por caixas delimitadoras, se houver vários produtos em uma única imagem.

    Confira um exemplo de detecção de um ou vários produtos em uma imagem em Noções básicas sobre as respostas de pesquisa e a detecção múltipla.

    Um campo score também é retornado. Esse campo indica a confiança do serviço de que o produto corresponde à imagem fornecida, em uma escala de 0 (nenhuma confiança) a 1 (confiança total).

    O campo indexTime mostra qual versão do índice está sendo pesquisada. As alterações de imagem feitas após esse horário não aparecerão nos resultados.

    Parabéns! Você fez sua primeira solicitação de images.annotate ao serviço de Pesquisa de produtos da API do Vision.

    Limpar

    1. Optional: Revoke credentials from the gcloud CLI.

      gcloud auth revoke
    2. Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    A seguir