Como criar um conjunto de produtos

Um conjunto de produtos é um contêiner simples para um grupo de produtos.

Criar um conjunto de produtos vazio

É melhor usar um único conjunto de produtos para todos os seus itens e criar outros conjuntos para os testes necessários. Nos exemplos de código a seguir, mostramos como criar um conjunto vazio.

REST

Antes de usar os dados da solicitação, substitua estes dados:

  • PROJECT_ID: ID do seu projeto Google Cloud .
  • LOCATION_ID: um identificador de local válido. Os identificadores de local válidos são: us-west1, us-east1, europe-west1 e asia-east1.
  • DISPLAY_NAME: um nome de exibição de string de sua escolha.

Método HTTP e URL:

POST https://vision.googleapis.com/v1/projects/project-id/locations/location-id/productSets

Corpo JSON da solicitação:

{
  "displayName": "display-name"
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

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 @request.json \
"https://vision.googleapis.com/v1/projects/project-id/locations/location-id/productSets"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/projects/project-id/locations/location-id/productSets" | Select-Object -Expand Content

Quando a solicitação é bem-sucedida, o servidor retorna um código de status HTTP 200 OK e a resposta no formato JSON:

Será exibido um código semelhante a este. É possível usar o ID do conjunto de produtos (neste caso, b6d809615b6dd675) para executar outras operações no conjunto.

{
  "name": "projects/project-id/locations/location-id/productSets/b6d809615b6dd675",
  "displayName": "new-product-set"
}

Go

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Para mais informações, consulte a documentação de referência da API Go da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.


import (
	"context"
	"fmt"
	"io"

	vision "cloud.google.com/go/vision/apiv1"
	"cloud.google.com/go/vision/v2/apiv1/visionpb"
)

// createProductSet creates a product set.
func createProductSet(w io.Writer, projectID string, location string, productSetID string, productSetDisplayName string) error {
	ctx := context.Background()
	c, err := vision.NewProductSearchClient(ctx)
	if err != nil {
		return fmt.Errorf("NewProductSearchClient: %w", err)
	}
	defer c.Close()

	req := &visionpb.CreateProductSetRequest{
		Parent:       fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		ProductSetId: productSetID,
		ProductSet: &visionpb.ProductSet{
			DisplayName: productSetDisplayName,
		},
	}

	resp, err := c.CreateProductSet(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateProductSet: %w", err)
	}

	fmt.Fprintf(w, "Product set name: %s\n", resp.Name)

	return nil
}

Java

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Confira mais detalhes na documentação de referência da API Java da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.

/**
 * Create a product set
 *
 * @param projectId - Id of the project.
 * @param computeRegion - Region name.
 * @param productSetId - Id of the product set.
 * @param productSetDisplayName - Display name of the product set.
 * @throws IOException - on I/O errors.
 */
public static void createProductSet(
    String projectId, String computeRegion, String productSetId, String productSetDisplayName)
    throws IOException {
  try (ProductSearchClient client = ProductSearchClient.create()) {

    // A resource that represents Google Cloud Platform location.
    String formattedParent = LocationName.format(projectId, computeRegion);

    // Create a product set with the product set specification in the region.
    ProductSet myProductSet =
        ProductSet.newBuilder().setDisplayName(productSetDisplayName).build();
    CreateProductSetRequest request =
        CreateProductSetRequest.newBuilder()
            .setParent(formattedParent)
            .setProductSet(myProductSet)
            .setProductSetId(productSetId)
            .build();
    ProductSet productSet = client.createProductSet(request);
    // Display the product set information
    System.out.println(String.format("Product set name: %s", productSet.getName()));
  }
}

Node.js

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Confira mais detalhes na documentação de referência da API Node.js da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.

// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');

// Creates a client
const client = new vision.ProductSearchClient();

async function createProductSet() {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = 'Your Google Cloud project Id';
  // const location = 'A compute region name';
  // const productSetId = 'Id of the product set';
  // const productSetDisplayName = 'Display name of the product set';

  // Resource path that represents Google Cloud Platform location.
  const locationPath = client.locationPath(projectId, location);

  const productSet = {
    displayName: productSetDisplayName,
  };

  const request = {
    parent: locationPath,
    productSet: productSet,
    productSetId: productSetId,
  };

  const [createdProductSet] = await client.createProductSet(request);
  console.log(`Product Set name: ${createdProductSet.name}`);
}
createProductSet();

Python

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Confira mais detalhes na documentação de referência da API Python da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.

from google.cloud import vision

def create_product_set(project_id, location, product_set_id, product_set_display_name):
    """Create a product set.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        product_set_id: Id of the product set.
        product_set_display_name: Display name of the product set.
    """
    client = vision.ProductSearchClient()

    # A resource that represents Google Cloud Platform location.
    location_path = f"projects/{project_id}/locations/{location}"

    # Create a product set with the product set specification in the region.
    product_set = vision.ProductSet(display_name=product_set_display_name)

    # The response is the product set with `name` populated.
    response = client.create_product_set(
        parent=location_path, product_set=product_set, product_set_id=product_set_id
    )

    # Display the product set information.
    print(f"Product set name: {response.name}")


Linguagens adicionais

C#: siga as Instruções de configuração do C# na página das bibliotecas de cliente e acesse a documentação de referência da Pesquisa de Produtos da API Vision para .NET.

PHP: siga as Instruções de configuração do PHP na página das bibliotecas de cliente e acesse a documentação de referência da Pesquisa de Produtos da API Vision para PHP.

Ruby: siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse a documentação de referência da Pesquisa de Produtos da API Vision para Ruby.

Usar a importação em massa para criar um conjunto de produtos com itens

Também é possível usar a função de importação em massa para criar simultaneamente um conjunto de produtos, criar vários produtos e as imagens de referência deles.

Várias referências do conjunto de produtos, dos produtos e das imagens de referência estão definidas no arquivo CSV de importação em massa que você usa. Para mais informações, consulte a seção Como formatar um arquivo CSV de importação em massa.

Realize a importação em massa executando este código:

REST

Antes de usar os dados da solicitação, substitua estes dados:

  • PROJECT_ID: o ID do projeto do Google Cloud .
  • LOCATION_ID: um identificador de local válido. Os identificadores de local válidos são: us-west1, us-east1, europe-west1 e asia-east1.
  • STORAGE_PATH: um bucket/diretório do Cloud Storage em que o arquivo CSV de entrada é armazenado O usuário solicitante precisa ter, pelo menos, permissão de leitura no bucket.

Método HTTP e URL:

POST https://vision.googleapis.com/v1/projects/project-id/locations/location-id/productSets:import

Corpo JSON da solicitação:

{
  "inputConfig": {
    "gcsSource": {
      "csvFileUri": "storage-path"
    }
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

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 @request.json \
"https://vision.googleapis.com/v1/projects/project-id/locations/location-id/productSets:import"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/projects/project-id/locations/location-id/productSets:import" | Select-Object -Expand Content

Será exibido um código semelhante a este. Use o ID da operação (neste caso, f10f34e32c40a710) para receber o status da tarefa. Veja um exemplo em Como saber o status de uma operação:

{
  "name": "projects/project-id/locations/location-id/operations/f10f34e32c40a710"
}

Depois que a operação de longa duração for concluída, será possível conseguir os detalhes da operação de importação. A resposta será semelhante a esta:

{
  "name": "locations/location-id/operations/f10f34e32c40a710",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.BatchOperationMetadata",
    "state": "SUCCESSFUL",
    "submitTime": "2019-12-06T21:16:04.476466873Z",
    "endTime": "2019-12-06T21:16:40.594258084Z"
  },
  "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://my-storage-bucket/img_039.jpg"
      },
      {
        "name": "projects/project-id/locations/location-id/products/product_id1/referenceImages/image1",
        "uri": "gs://my-storage-bucket/img_105.jpg"
      },
      {
        "name": "projects/project-id/locations/location-id/products/product_id2/referenceImages/image2",
        "uri": "gs://my-storage-bucket/img_224.jpg"
      },
      {
        "name": "projects/project-id/locations/location-id/products/product_id3/referenceImages/image3",
        "uri": "gs://my-storage-bucket/img_385.jpg"
      }
    ],
    "statuses": [
      {},
      {},
      {},
      {}
    ]
  }
}

Go

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Para mais informações, consulte a documentação de referência da API Go da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.



import (
	"context"
	"fmt"
	"io"

	vision "cloud.google.com/go/vision/apiv1"
	"cloud.google.com/go/vision/v2/apiv1/visionpb"
)


// importProductSets creates a product set using information in a csv file on GCS.
func importProductSets(w io.Writer, projectID string, location string, gcsURI string) error {
	ctx := context.Background()
	c, err := vision.NewProductSearchClient(ctx)
	if err != nil {
		return fmt.Errorf("NewProductSearchClient: %w", err)
	}
	defer c.Close()

	req := &visionpb.ImportProductSetsRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		InputConfig: &visionpb.ImportProductSetsInputConfig{
			Source: &visionpb.ImportProductSetsInputConfig_GcsSource{
				GcsSource: &visionpb.ImportProductSetsGcsSource{
					CsvFileUri: gcsURI,
				},
			},
		},
	}

	op, err := c.ImportProductSets(ctx, req)
	if err != nil {
		return fmt.Errorf("ImportProductSets: %w", err)
	}

	fmt.Fprintf(w, "Processing operation name: %s\n", op.Name())

	resp, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("Wait: %w", err)
	}

	fmt.Fprintf(w, "processing done.\n")

	for i, status := range resp.Statuses {
		// `0` is the coee for OK in google.rpc.code
		fmt.Fprintf(w, "Status of processing line %d of the csv: %d\n", i, status.Code)

		if status.Code == 0 {
			fmt.Fprintf(w, "Reference image name: %s\n", resp.ReferenceImages[i].Name)
		} else {
			fmt.Fprintf(w, "Status code not OK: %s\n", status.Message)
		}
	}

	return nil
}

Java

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Confira mais detalhes na documentação de referência da API Java da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.

/**
 * Import images of different products in the product set.
 *
 * @param projectId - Id of the project.
 * @param computeRegion - Region name.
 * @param gcsUri - Google Cloud Storage URI.Target files must be in Product Search CSV format.
 * @throws Exception - on client errors.
 */
public static void importProductSets(String projectId, String computeRegion, String gcsUri)
    throws Exception {
  try (ProductSearchClient client = ProductSearchClient.create()) {

    // A resource that represents Google Cloud Platform location.
    String formattedParent = LocationName.format(projectId, computeRegion);
    Builder gcsSource = ImportProductSetsGcsSource.newBuilder().setCsvFileUri(gcsUri);

    // Set the input configuration along with Google Cloud Storage URI
    ImportProductSetsInputConfig inputConfig =
        ImportProductSetsInputConfig.newBuilder().setGcsSource(gcsSource).build();

    // Import the product sets from the input URI.
    OperationFuture<ImportProductSetsResponse, BatchOperationMetadata> response =
        client.importProductSetsAsync(formattedParent, inputConfig);

    System.out.println(String.format("Processing operation name: %s", response.getName()));
    ImportProductSetsResponse results = response.get();
    System.out.println("Processing done.");
    System.out.println("Results of the processing:");

    for (int i = 0; i < results.getStatusesCount(); i++) {
      System.out.println(
          String.format(
              "Status of processing line %s of the csv: %s", i, results.getStatuses(i)));
      // Check the status of reference image.
      if (results.getStatuses(i).getCode() == 0) {
        ReferenceImage referenceImage = results.getReferenceImages(i);
        System.out.println(referenceImage);
      } else {
        System.out.println("No reference image.");
      }
    }
  }
}

Node.js

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Confira mais detalhes na documentação de referência da API Node.js da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.

// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');
// Creates a client
const client = new vision.ProductSearchClient();

async function importProductSets() {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = 'Your Google Cloud project Id';
  // const location = 'A compute region name';
  // const gcsUri = 'Google Cloud Storage URI. Target files must be in Product Search CSV format';

  // A resource that represents Google Cloud Platform location.
  const projectLocation = client.locationPath(projectId, location);

  // Set the input configuration along with Google Cloud Storage URI
  const inputConfig = {
    gcsSource: {
      csvFileUri: gcsUri,
    },
  };

  // Import the product sets from the input URI.
  const [response, operation] = await client.importProductSets({
    parent: projectLocation,
    inputConfig: inputConfig,
  });

  console.log('Processing operation name: ', operation.name);

  // synchronous check of operation status
  const [result] = await response.promise();
  console.log('Processing done.');
  console.log('Results of the processing:');

  for (const i in result.statuses) {
    console.log(
      'Status of processing ',
      i,
      'of the csv:',
      result.statuses[i]
    );

    // Check the status of reference image
    if (result.statuses[i].code === 0) {
      console.log(result.referenceImages[i]);
    } else {
      console.log('No reference image.');
    }
  }
}
importProductSets();

Python

Para saber como instalar e usar a biblioteca de cliente da Pesquisa de Produtos da API Vision, consulte Bibliotecas de cliente da Pesquisa de Produtos da API Vision. Confira mais detalhes na documentação de referência da API Python da Pesquisa de Produtos (API Vision).

Para se autenticar na Pesquisa de Produtos da API Vision, configure o Application Default Credentials. Saiba mais em Configurar a autenticação em um ambiente de desenvolvimento local.

def import_product_sets(project_id, location, gcs_uri):
    """Import images of different products in the product set.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        gcs_uri: Google Cloud Storage URI.
            Target files must be in Product Search CSV format.
    """
    client = vision.ProductSearchClient()

    # A resource that represents Google Cloud Platform location.
    location_path = f"projects/{project_id}/locations/{location}"

    # Set the input configuration along with Google Cloud Storage URI
    gcs_source = vision.ImportProductSetsGcsSource(csv_file_uri=gcs_uri)
    input_config = vision.ImportProductSetsInputConfig(gcs_source=gcs_source)

    # Import the product sets from the input URI.
    response = client.import_product_sets(
        parent=location_path, input_config=input_config
    )

    print(f"Processing operation name: {response.operation.name}")
    # synchronous check of operation status
    result = response.result()
    print("Processing done.")

    for i, status in enumerate(result.statuses):
        print("Status of processing line {} of the csv: {}".format(i, status))
        # Check the status of reference image
        # `0` is the code for OK in google.rpc.Code.
        if status.code == 0:
            reference_image = result.reference_images[i]
            print(reference_image)
        else:
            print(f"Status code not OK: {status.message}")


Linguagens adicionais

C#: siga as Instruções de configuração do C# na página das bibliotecas de cliente e acesse a documentação de referência da Pesquisa de Produtos da API Vision para .NET.

PHP: siga as Instruções de configuração do PHP na página das bibliotecas de cliente e acesse a documentação de referência da Pesquisa de Produtos da API Vision para PHP.

Ruby: siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse a documentação de referência da Pesquisa de Produtos da API Vision para Ruby.

Como saber o status de uma operação

Várias operações solicitadas são de longa duração, como a criação do conjunto de produtos por meio da importação em massa, a limpeza de um conjunto de produtos e a limpeza de produtos órfãos. Esses tipos de solicitações retornarão um JSON com um ID de operação que pode ser usado para receber o status da operação.

Por exemplo, uma exclusão em lote (purge) request retorna o seguinte JSON:

{
"name": "projects/project-id/locations/location-id/operations/bc4e1d412863e626"
}

Nesse caso, o ID da operação é bc4e1d412863e626. Os exemplos a seguir mostram como receber o status dessa operação com esse ID.

REST

Antes de usar os dados da solicitação, substitua estes dados:

  • PROJECT_ID: o ID do projeto do Google Cloud .
  • LOCATION_ID: um identificador de local válido. Os identificadores de local válidos são: us-west1, us-east1, europe-west1 e asia-east1.
  • OPERATION_ID: o ID da operação. Ele é o último elemento do nome da operação. Por exemplo:
    • nome da operação: projects/PROJECT_ID/locations/LOCATION_ID/operations/bc4e1d412863e626
    • ID da operação: bc4e1d412863e626

Método HTTP e URL:

GET https://vision.googleapis.com/v1/locations/location-id/operations/operation-id

Para enviar a solicitação, escolha uma destas opções:

curl

Execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
"https://vision.googleapis.com/v1/locations/location-id/operations/operation-id"

PowerShell

Execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://vision.googleapis.com/v1/locations/location-id/operations/operation-id" | Select-Object -Expand Content
Você verá uma saída semelhante à seguinte para uma operação de exclusão permanente do conjunto de produtos concluída:
{
  "name": "locations/location-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.BatchOperationMetadata",
    "state": "SUCCESSFUL",
    "submitTime": "2019-09-04T15:58:39.131591882Z",
    "endTime": "2019-09-04T15:58:43.099020580Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.PurgeProductsRequest",
    "parent": "projects/project-id/locations/location-id",
    "productSetPurgeConfig": {
      "productSetId": "project-set-id"
    },
    "force": true
  }
}

Você verá uma saída semelhante à seguinte para uma operação de exclusão permanente de produtos órfãos:

{
  "name": "locations/location-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.BatchOperationMetadata",
    "state": "SUCCESSFUL",
    "submitTime": "2019-09-04T16:08:38.278197397Z",
    "endTime": "2019-09-04T16:08:45.075778639Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.PurgeProductsRequest",
    "parent": "projects/project-id/locations/location-id",
    "deleteOrphanProducts": true,
    "force": true
  }
}