Anleitung für die Nutzung der Produktsuche

In dieser Anleitung wird gezeigt, wie Sie eine Produktgruppe erstellen, die eine Gruppe von Produkten mit dazugehörigen Referenzbildern enthält. Die Anleitung zeigt Nutzern, wie eine Produktgruppe über den Online-Import (Einzelimport) erstellt wird. Nachdem Sie die Produktgruppe indexiert haben, können Sie sie über die Vision API-Produktsuche abfragen.

In dieser Anleitung erhalten Sie Informationen zu folgenden Themen:

  1. Produktgruppe über Online-Import (individuell) erstellen
  2. Individuelles Produkt erstellen
  3. Produkt zu einer Produktgruppe hinzufügen
  4. Produkt aktualisieren
  5. Referenzbild erstellen
  6. Nach ähnlichen Produkten suchen

Vorbereitung

Bevor Sie mit dieser Anleitung beginnen, müssen Sie die entsprechenden Clientbibliotheken installiert, die Rechnungsstellung und die API für Ihr Projekt aktiviert und die Authentifizierung ordnungsgemäß eingerichtet haben.

Bibliotheken importieren

Wenn Sie die Vision API-Produktsuche verwenden möchten, importieren Sie die folgenden Module, nachdem Sie die Clientbibliothek heruntergeladen und installiert haben:

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"

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

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.vision.v1.BatchOperationMetadata;
import com.google.cloud.vision.v1.ImportProductSetsGcsSource;
import com.google.cloud.vision.v1.ImportProductSetsGcsSource.Builder;
import com.google.cloud.vision.v1.ImportProductSetsInputConfig;
import com.google.cloud.vision.v1.ImportProductSetsResponse;
import com.google.cloud.vision.v1.LocationName;
import com.google.cloud.vision.v1.ProductSearchClient;
import com.google.cloud.vision.v1.ReferenceImage;
import java.io.PrintStream;
import javax.swing.JPanel;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import net.sourceforge.argparse4j.inf.Subparsers;

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

const vision = require('@google-cloud/vision');

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import vision

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Anwendung ausführen

Schritt 1: Produktkatalog erstellen

Es gibt zwei Möglichkeiten, einen Produktkatalog zu erstellen: entweder über den Batch-Import mit einer CSV-Datei, der den Import eines gesamten Produktkatalogs in einem einzigen API-Aufruf ermöglicht, oder über den Online-Import, der Ihnen die Kontrolle über die Produktgruppe ermöglicht. Mit dem Online-Import lassen sich außerdem Ressourcen bzw. Beziehungen gleichzeitig verwalten. Dies bedeutet in erster Linie, dass Sie Produktgruppen, Produkte und Referenzbilder individuell erstellen können. Beim Online-Import können Sie einen Produktkatalog, den Sie bereits erstellt haben, schrittweise über den Batch-Import aktualisieren.

In dieser Anleitung verwenden Sie den Online-Import. Unter Schnellstart finden Sie ein Beispiel für den Massenimport mit einer CSV-Datei.

Online-Import (individuell)

1 Produktgruppe erstellen

Erstellen Sie eine leere Produktgruppe, die ein einfacher Container für eine Gruppe von Produkten ist.

Anfrage

Erstellen Sie eine leere Produktgruppe und nennen Sie sie PS_CLOTH-SHOE_070318. Führen Sie dazu die folgende Anfrage mit der Methode create_product_set() aus. Übergeben Sie die Produktgruppen-ID und den Anzeigenamen als Argumente.

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: eine gültige Standort-ID. Gültige Standort-IDs sind: us-west1, us-east1, europe-west1 und asia-east1.
  • DISPLAY_NAME: Ein anzuzeigender Stringname Ihrer Wahl.

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

{
  "displayName": "display-name"
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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

Wenn die Anfrage erfolgreich ist, gibt der Server den HTTP-Statuscode 200 OK und die Antwort im JSON-Format zurück.

Die Ausgabe sieht in etwa so aus: Sie können die Produktgruppen-ID verwenden (in diesem Fall b6d809615b6dd675), um andere Vorgänge für die Produktgruppe auszuführen.

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

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * 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

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

// 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

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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}")

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Antwort

Product set name: projects/prj-prod-search-tutorials/locations/us-east1/productSets/PS_CLOTH-SHOE_070318
Product set id: PS_CLOTH-SHOE_070318
Product set display name: CLOTH-SHOE

2. Produkt erstellen

Nachdem Sie eine Produktgruppe erstellt haben, erstellen Sie im nächsten Schritt ein Produkt. Dazu führen Sie die folgende Anfrage aus.

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: eine gültige Standort-ID. Gültige Standort-IDs sind: us-west1, us-east1, europe-west1 und asia-east1.
  • DISPLAY_NAME: Ein anzuzeigender Stringname Ihrer Wahl.
  • PRODUCT_DESCRIPTION: Eine Stringbeschreibung Ihrer Wahl.
  • product-category: Eine gültige Produktkategorie. Derzeit sind folgende Produktkategorien verfügbar: homegoods-v2, apparel-v2, toys-v2, packagedgoods-v1 und general-v1.
  • productLabels: Ein oder mehrere Schlüssel/Wert-Paare, die einem Produkt zugeordnet sind. Jedem KEY_STRING muss ein VALUE_STRING zugeordnet sein.

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

{
  "displayName": "display-name",
  "description": "product-description",
  "productCategory": "product-category",
  "productLabels": [
      {
        "key": "key-string",
        "value": "value-string"
      }
  ]
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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/products"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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/products" | Select-Object -Expand Content

Beispiel für einen Anfragetext:

{
  "displayName": "sample-product-1234",
  "description": "Athletic shorts",
  "productCategory": "apparel-v2",
  "productLabels": [
      {
        "key": "style",
        "value": "womens"
      },
      {
        "key": "color",
        "value": "blue"
      }
  ]
}

Wenn die Anfrage erfolgreich ist, gibt der Server den HTTP-Statuscode 200 OK und die Antwort im JSON-Format zurück.

Die Ausgabe sieht in etwa so aus: Sie können die Produkt-ID (in diesem Fall 37b9811d308c4e42) verwenden, um weitere Vorgänge für das Produkt auszuführen.

{
  "name": "projects/project-id/locations/location-id/products/37b9811d308c4e42",
  "displayName": "sample-product-456",
  "description": "Athletic shorts",
  "productCategory": "apparel-v2",
  "productLabels": [
    {
      "key": "style",
      "value": "womens"
    },
    {
      "key": "color",
      "value": "blue"
    }
  ]
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"

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

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

	req := &visionpb.CreateProductRequest{
		Parent:    fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		ProductId: productID,
		Product: &visionpb.Product{
			DisplayName:     productDisplayName,
			ProductCategory: productCategory,
		},
	}

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

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

	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Create one product.
 *
 * @param projectId - Id of the project.
 * @param computeRegion - Region name.
 * @param productId - Id of the product.
 * @param productDisplayName - Display name of the product.
 * @param productCategory - Category of the product.
 * @throws IOException - on I/O errors.
 */
public static void createProduct(
    String projectId,
    String computeRegion,
    String productId,
    String productDisplayName,
    String productCategory)
    throws IOException {
  try (ProductSearchClient client = ProductSearchClient.create()) {

    // A resource that represents Google Cloud Platform location.
    String formattedParent = LocationName.format(projectId, computeRegion);
    // Create a product with the product specification in the region.
    // Multiple labels are also supported.
    Product myProduct =
        Product.newBuilder()
            .setName(productId)
            .setDisplayName(productDisplayName)
            .setProductCategory(productCategory)
            .build();
    Product product = client.createProduct(formattedParent, myProduct, productId);
    // Display the product information
    System.out.println(String.format("Product name: %s", product.getName()));
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

// Creates a client
const client = new vision.ProductSearchClient();
async function createProduct() {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = 'Your Google Cloud project Id';
  // const location = 'A compute region name';
  // const productId = 'Id of the product';
  // const productDisplayName = 'Display name of the product';
  // const productCategory = 'Catoegory of the product';

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

  const product = {
    displayName: productDisplayName,
    productCategory: productCategory,
  };

  const request = {
    parent: locationPath,
    product: product,
    productId: productId,
  };

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

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import vision
from google.protobuf import field_mask_pb2 as field_mask

def create_product(
    project_id, location, product_id, product_display_name, product_category
):
    """Create one product.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        product_id: Id of the product.
        product_display_name: Display name of the product.
        product_category: Category of the product.
    """
    client = vision.ProductSearchClient()

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

    # Create a product with the product specification in the region.
    # Set product display name and product category.
    product = vision.Product(
        display_name=product_display_name, product_category=product_category
    )

    # The response is the product with the `name` field populated.
    response = client.create_product(
        parent=location_path, product=product, product_id=product_id
    )

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

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Antwort

Product name: projects/prj-prod-search-tutorials/locations/us-east1/products/P_CLOTH-SHOE_46903668_070318
Product id: P_CLOTH-SHOE_46903668_070318
Product display name: Blue Dress
Product category: apparel
Product description: Short sleeved and 1950s style satin dress
Product labels:
  Product label 1:
        key: style
        value: women
  Product label 2:
        key: category
        value: dress
  Product label 3:
        key: color
        value: dark-blue

3. Produkt zu einer Produktgruppe hinzufügen

Nachdem Sie eine Produktgruppe und ein Produkt erstellt haben, können Sie im nächsten Schritt das Produkt der Produktgruppe hinzufügen.

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: eine gültige Standort-ID. Gültige Standort-IDs sind us-west1, us-east1, europe-west1 und asia-east1.
  • PRODUCT_SET_ID: die ID der Produktgruppe, für die Sie den Vorgang ausführen möchten.
  • PRODUCT_NAME: der vollständige Ressourcenname des Produkts. Format:
    • projects/PROJECT_ID/locations/LOCATION_ID/products/PRODUCT_ID

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

{
  "product": "product-name"
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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/product-set-id:addProduct"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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/product-set-id:addProduct" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"

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

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

	req := &visionpb.AddProductToProductSetRequest{
		Name:    fmt.Sprintf("projects/%s/locations/%s/productSets/%s", projectID, location, productSetID),
		Product: fmt.Sprintf("projects/%s/locations/%s/products/%s", projectID, location, productID),
	}

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

	fmt.Fprintf(w, "Product added to product set.\n")

	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


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

    // Get the full path of the product set.
    String formattedName = ProductSetName.format(projectId, computeRegion, productSetId);

    // Get the full path of the product.
    String productPath = ProductName.of(projectId, computeRegion, productId).toString();

    // Add the product to the product set.
    client.addProductToProductSet(formattedName, productPath);

    System.out.println(String.format("Product added to product set."));
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

const vision = require('@google-cloud/vision');
const client = new vision.ProductSearchClient();

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

  const productPath = client.productPath(projectId, location, productId);
  const productSetPath = client.productSetPath(
    projectId,
    location,
    productSetId
  );

  const request = {
    name: productSetPath,
    product: productPath,
  };

  await client.addProductToProductSet(request);
  console.log('Product added to product set.');
}
addProductToProductSet();

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import vision

def add_product_to_product_set(project_id, location, product_id, product_set_id):
    """Add a product to a product set.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        product_id: Id of the product.
        product_set_id: Id of the product set.
    """
    client = vision.ProductSearchClient()

    # Get the full path of the product set.
    product_set_path = client.product_set_path(
        project=project_id, location=location, product_set=product_set_id
    )

    # Get the full path of the product.
    product_path = client.product_path(
        project=project_id, location=location, product=product_id
    )

    # Add the product to the product set.
    client.add_product_to_product_set(name=product_set_path, product=product_path)
    print("Product added to product set.")

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Antwort

Product added to product set.

4. Produkt aktualisieren

Mit den Aktualisierungsmethoden können Sie ein Produkt oder eine Produktgruppe nach dem Erstellen aktualisieren. Dieses Beispiel enthält eine Produktaktualisierung, bei der die Labels geändert werden:

Befehlszeile

Wenn Sie eine PATCH-Anfrage senden, werden alle vorherigen Felder und deren Werte gelöscht, mit Ausnahme des Felds productCategory, das unveränderlich ist. Senden Sie alle erforderlichen Felder mit Werten, wenn Sie die PATCH-Aktualisierungsanfrage stellen.

Ersetzen Sie dabei folgende Werte für die Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: eine gültige Standort-ID. Gültige Standort-IDs sind: us-west1, us-east1, europe-west1 und asia-east1.
  • PRODUCT_ID: die ID des Produkts, das mit einem Referenzbild verknüpft ist. Diese ID wird entweder zufällig festgelegt oder vom Nutzer bei der Erstellung des Produkts angegeben.
  • display-name: Ein anzuzeigender Stringname Ihrer Wahl. Dieser kann mit dem vorherigen Anzeigenamen oder mit einem aktualisierten Wert übereinstimmen.
  • description: Eine Stringbeschreibung Ihrer Wahl. Dieser kann mit dem vorherigen Anzeigenamen oder mit einem aktualisierten Wert übereinstimmen. Lassen Sie das Feld description und den Wert weg, wenn Sie es nicht benötigen.
  • productLabels: Ein oder mehrere Schlüssel/Wert-Paare, die einem Produkt zugeordnet sind. Jedem KEY_STRING muss ein VALUE_STRING zugeordnet sein.

HTTP-Methode und URL:

PATCH https://vision.googleapis.com/v1/projects/project-id/locations/location-id/products/product-id

JSON-Text der Anfrage:

{
  "displayName": "display-name",
  "description": "description",
  "productLabels": [
    {
      "key": "key-string",
      "value": "value-string"
    },
    {
      "key": "key-string",
      "value": "value-string"
    }
  ]
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

curl -X PATCH \
-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/products/product-id"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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

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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "name": "projects/project-id/locations/location-id/products/product-id",
  "displayName": "display-name",
  "description": "description",
  "productCategory": "apparel-v2",
  "productLabels": [
    {
      "key": "style",
      "value": "womens"
    },
    {
      "key": "onSale",
      "value": "true"
    }
  ]
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"

	vision "cloud.google.com/go/vision/apiv1"
	"cloud.google.com/go/vision/v2/apiv1/visionpb"
	field_mask "google.golang.org/genproto/protobuf/field_mask"
)

// updateProductLabels updates product labels of a product.
func updateProductLabels(w io.Writer, projectID string, location string, productID string, key string, value string) error {
	ctx := context.Background()
	c, err := vision.NewProductSearchClient(ctx)
	if err != nil {
		return fmt.Errorf("NewProductSearchClient: %w", err)
	}
	defer c.Close()

	req := &visionpb.UpdateProductRequest{
		UpdateMask: &field_mask.FieldMask{
			Paths: []string{
				"product_labels",
			},
		},
		Product: &visionpb.Product{
			Name: fmt.Sprintf("projects/%s/locations/%s/products/%s", projectID, location, productID),
			ProductLabels: []*visionpb.Product_KeyValue{
				{
					Key:   key,
					Value: value,
				},
			},
		},
	}

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

	fmt.Fprintf(w, "Product name: %s\n", resp.Name)
	fmt.Fprintf(w, "Updated product labels: %s\n", resp.ProductLabels)

	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Update the product labels.
 *
 * @param projectId - Id of the project.
 * @param computeRegion - Region name.
 * @param productId -Id of the product.
 * @param productLabels - Labels of the product.
 * @throws IOException - on I/O errors.
 */
public static void updateProductLabels(
    String projectId, String computeRegion, String productId, String productLabels)
    throws IOException {
  try (ProductSearchClient client = ProductSearchClient.create()) {

    // Get the full path of the product.
    String formattedName = ProductName.format(projectId, computeRegion, productId);

    // Set product name, product labels and product display name.
    // Multiple labels are also supported.
    Product product =
        Product.newBuilder()
            .setName(formattedName)
            .addProductLabels(
                KeyValue.newBuilder()
                    .setKey(productLabels.split(",")[0].split("=")[0])
                    .setValue(productLabels.split(",")[0].split("=")[1])
                    .build())
            .build();

    // Set product update field name.
    FieldMask updateMask = FieldMask.newBuilder().addPaths("product_labels").build();

    // Update the product.
    Product updatedProduct = client.updateProduct(product, updateMask);
    // Display the product information
    System.out.println(String.format("Product name: %s", updatedProduct.getName()));
    System.out.println(String.format("Updated product labels: "));
    for (Product.KeyValue element : updatedProduct.getProductLabelsList()) {
      System.out.println(String.format("%s: %s", element.getKey(), element.getValue()));
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

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

async function updateProductLabels() {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = 'Your Google Cloud project Id';
  // const location = 'A compute region name';
  // const productId = 'Id of the product';
  // const key = 'The key of the label';
  // const value = 'The value of the label';

  // Resource path that represents full path to the product.
  const productPath = client.productPath(projectId, location, productId);

  const product = {
    name: productPath,
    productLabels: [
      {
        key: key,
        value: value,
      },
    ],
  };

  const updateMask = {
    paths: ['product_labels'],
  };

  const request = {
    product: product,
    updateMask: updateMask,
  };

  const [updatedProduct] = await client.updateProduct(request);
  console.log(`Product name: ${updatedProduct.name}`);
  console.log(`Product display name: ${updatedProduct.displayName}`);
  console.log(`Product description: ${updatedProduct.description}`);
  console.log(`Product category: ${updatedProduct.productCategory}`);
  console.log(
    `Product Labels: ${updatedProduct.productLabels[0].key}: ${updatedProduct.productLabels[0].value}`
  );
}
updateProductLabels();

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import vision
from google.protobuf import field_mask_pb2 as field_mask

def update_product_labels(project_id, location, product_id, key, value):
    """Update the product labels.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        product_id: Id of the product.
        key: The key of the label.
        value: The value of the label.
    """
    client = vision.ProductSearchClient()

    # Get the name of the product.
    product_path = client.product_path(
        project=project_id, location=location, product=product_id
    )

    # Set product name, product label and product display name.
    # Multiple labels are also supported.
    key_value = vision.Product.KeyValue(key=key, value=value)
    product = vision.Product(name=product_path, product_labels=[key_value])

    # Updating only the product_labels field here.
    update_mask = field_mask.FieldMask(paths=["product_labels"])

    # This overwrites the product_labels.
    updated_product = client.update_product(product=product, update_mask=update_mask)

    # Display the updated product information.
    print(f"Product name: {updated_product.name}")
    print(f"Updated product labels: {product.product_labels}")

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Antwort

Product name: projects/prj-prod-search-tutorials/locations/us-east1/products/P_CLOTH-SHOE_46903668_070318
Product id: P_CLOTH-SHOE_46903668_070318
Product display name: Blue Dress
Updated product labels:
  Product label 1:
        key: style
        value: women
  Product label 2:
        key: category
        value: dress
  Product label 3:
        key: color
        value: blue
Product description: Short sleeved and 1950s style satin dress

5. Referenzbild für ein Produkt erstellen

Wenn Sie ein Referenzbild für ein einzelnes Produkt erstellen, kann die Vision API-Produktsuche nach dem Bild suchen, nachdem es indexiert wurde. Ein Produkt kann mehrere Referenzbilder haben, vor allem, wenn Sie eine bessere Übereinstimmungsqualität wünschen.

Sie können einem Produkt jederzeit ein neues Referenzbild hinzufügen.

Beim Erstellen eines Referenzbildes lassen sich Koordinaten der Begrenzungspolygone einbeziehen. Ein Begrenzungspolygon gibt einen Bereich im Referenzbild an, der von Interesse ist. Wenn Sie z. B. ein Referenzbild für ein Produkt erstellen, bei dem es sich um eine Jacke handelt, können Sie die Koordinaten für die Jacke im Argument "Begrenzungspolygon" angeben. Wenn anschließend nach Produktübereinstimmungen gesucht wird, berücksichtigt das System nur die Jacke. Hinweis: Beim Indexieren können Sie mehrere Begrenzungspolygone bereitstellen. Beim Abfragen unterstützt die API jedoch nur ein einzelnes Polygon.

Mit der Objektlokalisierung der Vision API lassen sich die Koordinaten eines Begrenzungspolygons ganz einfach abrufen. Weitere Informationen zur Objektlokalisierung finden Sie unter Mehrere Objekte erkennen.

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: eine gültige Standort-ID. Gültige Standort-IDs sind: us-west1, us-east1, europe-west1 und asia-east1.
  • PRODUCT_ID: die ID des Produkts, das mit einem Referenzbild verknüpft ist. Diese ID wird entweder zufällig festgelegt oder vom Nutzer bei der Erstellung des Produkts angegeben.
  • CLOUD_STORAGE_IMAGE_URI: Der Pfad zu einer gültigen Bilddatei in einem Cloud Storage-Bucket. Sie müssen zumindest Leseberechtigungen für die Datei haben. Beispiel:
    • gs://storage-bucket/filename.jpg

HTTP-Methode und URL:

POST https://vision.googleapis.com/v1/projects/project-id/locations/location-id/products/product-id/referenceImages

JSON-Text der Anfrage:

{
  "uri": "cloud-storage-image-uri",
  "boundingPolys": [
    {
      "vertices": [
        {
          "x": X_MIN,
          "y": Y_MIN
        },
        {
          "x": X_MAX,
          "y": Y_MIN
        },
        {
          "x": X_MAX,
          "y": Y_MAX
        },
        {
          "x": X_MIN,
          "y": Y_MAX
        }
      ]
    }
  ]
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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/products/product-id/referenceImages"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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/products/product-id/referenceImages" | Select-Object -Expand Content

Wenn die Anfrage erfolgreich ist, gibt der Server den HTTP-Statuscode 200 OK und die Antwort im JSON-Format zurück.

Die Ausgabe sieht in etwa so aus: In der Beispielanfrage wurde ein einzelnes boundingPoly im Bild angegeben. Die Eckpunkte für den Begrenzungsrahmen sind nicht normalisiert. Die Eckpunktwerte sind die tatsächlichen Pixelwerte und nicht relativ zum Originalbild und skaliert von 0 bis 1. Diese Eckpunkte haben die folgenden Werte: [(33,22),(282,22),(282,278),(33,278)].


{
  "name": "projects/project-id/locations/location-id/products/product-id/referenceImages/image-id",
  "uri": "gs://storage-bucket/filename.jpg",
  "boundingPolys": [
    {
      "vertices": [
        {
          "x": 33,
          "y": 22
        },
        {
          "x": 282,
          "y": 22
        },
        {
          "x": 282,
          "y": 278
        },
        {
          "x": 33,
          "y": 278
        }
      ]
    }
  ]
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"

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

// createReferenceImage creates a reference image for a product.
func createReferenceImage(w io.Writer, projectID string, location string, productID string, referenceImageID 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.CreateReferenceImageRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s/products/%s", projectID, location, productID),
		ReferenceImage: &visionpb.ReferenceImage{
			Uri: gcsURI,
		},
		ReferenceImageId: referenceImageID,
	}

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

	fmt.Fprintf(w, "Reference image name: %s\n", resp.Name)
	fmt.Fprintf(w, "Reference image uri: %s\n", resp.Uri)

	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Create a reference image.
 *
 * @param projectId - Id of the project.
 * @param computeRegion - Region name.
 * @param productId - Id of the product.
 * @param referenceImageId - Id of the image.
 * @param gcsUri - Google Cloud Storage path of the input image.
 * @throws IOException - on I/O errors.
 */
public static void createReferenceImage(
    String projectId,
    String computeRegion,
    String productId,
    String referenceImageId,
    String gcsUri)
    throws IOException {
  try (ProductSearchClient client = ProductSearchClient.create()) {

    // Get the full path of the product.
    String formattedParent = ProductName.format(projectId, computeRegion, productId);
    // Create a reference image.
    ReferenceImage referenceImage = ReferenceImage.newBuilder().setUri(gcsUri).build();

    ReferenceImage image =
        client.createReferenceImage(formattedParent, referenceImage, referenceImageId);
    // Display the reference image information.
    System.out.println(String.format("Reference image name: %s", image.getName()));
    System.out.println(String.format("Reference image uri: %s", image.getUri()));
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

const vision = require('@google-cloud/vision');

const client = new vision.ProductSearchClient();

async function createReferenceImage() {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = 'Your Google Cloud project Id';
  // const location = 'A compute region name';
  // const productId = 'Id of the product';
  // const referenceImageId = 'Id of the reference image';
  // const gcsUri = 'Google Cloud Storage path of the input image';

  const formattedParent = client.productPath(projectId, location, productId);

  const referenceImage = {
    uri: gcsUri,
  };

  const request = {
    parent: formattedParent,
    referenceImage: referenceImage,
    referenceImageId: referenceImageId,
  };

  const [response] = await client.createReferenceImage(request);
  console.log(`response.name: ${response.name}`);
  console.log(`response.uri: ${response.uri}`);
}
createReferenceImage();

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import vision

def create_reference_image(
    project_id, location, product_id, reference_image_id, gcs_uri
):
    """Create a reference image.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        product_id: Id of the product.
        reference_image_id: Id of the reference image.
        gcs_uri: Google Cloud Storage path of the input image.
    """
    client = vision.ProductSearchClient()

    # Get the full path of the product.
    product_path = client.product_path(
        project=project_id, location=location, product=product_id
    )

    # Create a reference image.
    reference_image = vision.ReferenceImage(uri=gcs_uri)

    # The response is the reference image with `name` populated.
    image = client.create_reference_image(
        parent=product_path,
        reference_image=reference_image,
        reference_image_id=reference_image_id,
    )

    # Display the reference image information.
    print(f"Reference image name: {image.name}")
    print(f"Reference image uri: {image.uri}")

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Antwort

Reference image name: projects/prj-prod-search-tutorials/locations/us-east1/products/P_CLOTH-SHOE_46903668_070318/referenceImages/I_469a896b70ba11e8be97d20059124800_070418
Reference image id: I_469a896b70ba11e8be97d20059124800_070418
Reference image uri: gs://product-search-tutorial/dress-shoe-dataset/469a896b70ba11e8be97d20059124800.jpg
Reference image bounding polygons:
vertices {
  x: 80
  y: 50
}
vertices {
  x: 80
  y: 660
}
vertices {
  x: 300
  y: 50
}
vertices {
  x: 430
  y: 660
}

Schritt 2: Nach übereinstimmenden Produkten suchen

Über diese Schnittstelle können Sie den von Ihnen erstellten Produktkatalog abfragen. Dazu verwenden Sie ein neues Bild als Eingabe und suchen nach dem Produkt, das am ehesten mit dem Bild übereinstimmt.

Ähnlich wie beim Erstellen eines Referenzbildes können Sie auch bei der Suche nach übereinstimmenden Bildern Koordinaten von Begrenzungspolygonen angeben. Ein Begrenzungspolygon gibt den Bereich im Quell-Image an, für den Sie nach Übereinstimmungen suchen möchten. Wenn Ihr Quell-Image beispielsweise sowohl ein Kleid als auch einen Geldbeutel enthält und Sie nur nach Übereinstimmungen für das Kleid suchen möchten, können Sie die Koordinaten für das Begrenzungspolygon nur für den Bereich des Bildes angeben, der das Kleid enthält. Wenn kein Begrenzungspolygon angegeben ist, ermittelt die API standardmäßig das größte Begrenzungspolygon und fragt es automatisch ab.

Mit der Objektlokalisierung der Vision API lassen sich die Koordinaten eines Begrenzungspolygons ganz einfach abrufen. Weitere Informationen zur Objektlokalisierung finden Sie unter Mehrere Objekte erkennen. Sie können ein vollständiges Bild durch Angabe eines Begrenzungspolygons für das gesamte Bildfeld explizit abfragen: [(0, 0), (0, 1), (1, 1), (1, 0)].

Die Anfrage gibt eine API-Antwort zurück, die das am besten passende Produkt für ein Bild mit der Bewertung und dem übereinstimmenden Bild enthält. Dieses Bild wird unter Verwendung des höchsten Konfidenzwerts zurückgegeben.

REST

Ersetzen Sie dabei folgende Werte für die Anfragedaten:

  • BASE64_ENCODED_IMAGE: Die Base64-Darstellung (ASCII-String) der Binärbilddaten. Dieser String sollte in etwa so aussehen:
    • /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
    Weitere Informationen erhalten Sie unter Base64-Codierung.
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: eine gültige Standort-ID. Gültige Standort-IDs sind us-west1, us-east1, europe-west1 und asia-east1.
  • PRODUCT_SET_ID: die ID der Produktgruppe, für die Sie den Vorgang ausführen möchten.

Feldspezifische Hinweise:

  • features.maxResults – Maximale Anzahl der Ergebnisse, die zurückgegeben werden sollen.
  • imageContext.productCategories – Produktkategorie, in der gesucht werden soll. Derzeit können Sie nur eine Produktkategorie angeben (Haushaltswaren, Bekleidung, Spielzeug, abgepackte Waren und allgemein).
  • imageContext.filter (optional): ein Ausdruck (oder mehrere Ausdrücke) zum Filtern nach dem Produktlabel als Schlüssel/Wert-Paar(e). Format: "key=value". Das Filtern von Schlüssel/Wert-Paaren kann mit AND- oder OR-Ausdrücken verknüpft werden: "color=blue AND style=mens", oder "color=blue OR color=black". Bei Verwendung des OR-Ausdrucks müssen alle Schlüssel im Ausdruck gleich sein.

HTTP-Methode und URL:

POST https://vision.googleapis.com/v1/images:annotate

JSON-Text der Anfrage:

{
  "requests": [
    {
      "image": {
        "content": base64-encoded-image
      },
      "features": [
        {
          "type": "PRODUCT_SEARCH",
          "maxResults": 5
        }
      ],
      "imageContext": {
        "productSearchParams": {
          "productSet": "projects/project-id/locations/location-id/productSets/product-set-id",
          "productCategories": [
               "apparel"
          ],
          "filter": "style = womens"
        }
      }
    }
  ]
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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/images:annotate"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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/images:annotate" | Select-Object -Expand Content

Wenn die Anfrage erfolgreich ist, gibt der Server den HTTP-Statuscode 200 OK und die Antwort im JSON-Format zurück.

Der JSON-Antwortcode enthält die folgenden zwei Ergebnistypen:

  • productSearchResults: enthält eine Liste übereinstimmender Produkte zum gesamten Bild. In der Beispielantwort lauten die übereinstimmenden Produkte: product_id65, product_id35, product_id34, product_id62, product_id32.
  • productGroupedResults: enthält die Koordinaten der Begrenzungsrahmen und übereinstimmende Objekte für jedes der im Bild erkannten Produkte. In der folgenden Antwort findet sich nur ein erkanntes Produkt, gefolgt von übereinstimmenden Produkten in der Beispielproduktgruppe: product_id65, product_id35, product_id34, product_id93, product_id62.

Beachten Sie, dass es bei den beiden Ergebnistypen zwar Überschneidungen gibt, aber auch Unterschiede auftreten können (z. B. in der Antwort product_id32 und product_id93).

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Go API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import (
	"context"
	"fmt"
	"io"
	"os"

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

// getSimilarProducts searches for products from a product set similar to products in an image file.
func getSimilarProducts(w io.Writer, projectID string, location string, productSetID string, productCategory string, file string, filter string) error {
	ctx := context.Background()
	c, err := vision.NewImageAnnotatorClient(ctx)
	if err != nil {
		return fmt.Errorf("NewImageAnnotatorClient: %w", err)
	}
	defer c.Close()

	f, err := os.Open(file)
	if err != nil {
		return fmt.Errorf("Open: %w", err)
	}
	defer f.Close()

	image, err := vision.NewImageFromReader(f)
	if err != nil {
		return fmt.Errorf("NewImageFromReader: %w", err)
	}

	ictx := &visionpb.ImageContext{
		ProductSearchParams: &visionpb.ProductSearchParams{
			ProductSet:        fmt.Sprintf("projects/%s/locations/%s/productSets/%s", projectID, location, productSetID),
			ProductCategories: []string{productCategory},
			Filter:            filter,
		},
	}

	response, err := c.ProductSearch(ctx, image, ictx)
	if err != nil {
		return fmt.Errorf("ProductSearch: %w", err)
	}

	fmt.Fprintf(w, "Product set index time:\n")
	fmt.Fprintf(w, "seconds: %d\n", response.IndexTime.Seconds)
	fmt.Fprintf(w, "nanos: %d\n", response.IndexTime.Nanos)

	fmt.Fprintf(w, "Search results:\n")
	for _, result := range response.Results {
		fmt.Fprintf(w, "Score(Confidence): %f\n", result.Score)
		fmt.Fprintf(w, "Image name: %s\n", result.Image)

		fmt.Fprintf(w, "Prodcut name: %s\n", result.Product.Name)
		fmt.Fprintf(w, "Product display name: %s\n", result.Product.DisplayName)
		fmt.Fprintf(w, "Product labels: %s\n", result.Product.ProductLabels)
	}

	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Java API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Search similar products to image in local file.
 *
 * @param projectId - Id of the project.
 * @param computeRegion - Region name.
 * @param productSetId - Id of the product set.
 * @param productCategory - Category of the product.
 * @param filePath - Local file path of the image to be searched
 * @param filter - Condition to be applied on the labels. Example for filter: (color = red OR
 *     color = blue) AND style = kids It will search on all products with the following labels:
 *     color:red AND style:kids color:blue AND style:kids
 * @throws IOException - on I/O errors.
 */
public static void getSimilarProductsFile(
    String projectId,
    String computeRegion,
    String productSetId,
    String productCategory,
    String filePath,
    String filter)
    throws IOException {
  try (ImageAnnotatorClient queryImageClient = ImageAnnotatorClient.create()) {

    // Get the full path of the product set.
    String productSetPath = ProductSetName.format(projectId, computeRegion, productSetId);

    // Read the image as a stream of bytes.
    File imgPath = new File(filePath);
    byte[] content = Files.readAllBytes(imgPath.toPath());

    // Create annotate image request along with product search feature.
    Feature featuresElement = Feature.newBuilder().setType(Type.PRODUCT_SEARCH).build();
    // The input image can be a HTTPS link or Raw image bytes.
    // Example:
    // To use HTTP link replace with below code
    //  ImageSource source = ImageSource.newBuilder().setImageUri(imageUri).build();
    //  Image image = Image.newBuilder().setSource(source).build();
    Image image = Image.newBuilder().setContent(ByteString.copyFrom(content)).build();
    ImageContext imageContext =
        ImageContext.newBuilder()
            .setProductSearchParams(
                ProductSearchParams.newBuilder()
                    .setProductSet(productSetPath)
                    .addProductCategories(productCategory)
                    .setFilter(filter))
            .build();

    AnnotateImageRequest annotateImageRequest =
        AnnotateImageRequest.newBuilder()
            .addFeatures(featuresElement)
            .setImage(image)
            .setImageContext(imageContext)
            .build();
    List<AnnotateImageRequest> requests = Arrays.asList(annotateImageRequest);

    // Search products similar to the image.
    BatchAnnotateImagesResponse response = queryImageClient.batchAnnotateImages(requests);

    List<Result> similarProducts =
        response.getResponses(0).getProductSearchResults().getResultsList();
    System.out.println("Similar Products: ");
    for (Result product : similarProducts) {
      System.out.println(String.format("\nProduct name: %s", product.getProduct().getName()));
      System.out.println(
          String.format("Product display name: %s", product.getProduct().getDisplayName()));
      System.out.println(
          String.format("Product description: %s", product.getProduct().getDescription()));
      System.out.println(String.format("Score(Confidence): %s", product.getScore()));
      System.out.println(String.format("Image name: %s", product.getImage()));
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Node.js API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

async function getSimilarProductsFile() {
  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = 'nodejs-docs-samples';
  // const location = 'us-west1';
  // const productSetId = 'indexed_product_set_id_for_testing';
  // const productCategory = 'apparel';
  // const filePath = './resources/shoes_1.jpg';
  // const filter = '';
  const productSetPath = productSearchClient.productSetPath(
    projectId,
    location,
    productSetId
  );
  const content = fs.readFileSync(filePath, 'base64');
  const request = {
    // The input image can be a GCS link or HTTPS link or Raw image bytes.
    // Example:
    // To use GCS link replace with below code
    // image: {source: {gcsImageUri: filePath}}
    // To use HTTP link replace with below code
    // image: {source: {imageUri: filePath}}
    image: {content: content},
    features: [{type: 'PRODUCT_SEARCH'}],
    imageContext: {
      productSearchParams: {
        productSet: productSetPath,
        productCategories: [productCategory],
        filter: filter,
      },
    },
  };
  const [response] = await imageAnnotatorClient.batchAnnotateImages({
    requests: [request],
  });
  console.log('Search Image:', filePath);
  const results = response['responses'][0]['productSearchResults']['results'];
  console.log('\nSimilar product information:');
  results.forEach(result => {
    console.log('Product id:', result['product'].name.split('/').pop(-1));
    console.log('Product display name:', result['product'].displayName);
    console.log('Product description:', result['product'].description);
    console.log('Product category:', result['product'].productCategory);
  });
}
getSimilarProductsFile();

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für die Vision API-Produktsuche finden Sie unter Vision API-Produktsuche-Clientbibliotheken. Weitere Informationen finden Sie in der Vision API Produktsuche Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei der Vision API-Produktsuche Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import vision

def get_similar_products_file(
    project_id,
    location,
    product_set_id,
    product_category,
    file_path,
    filter,
    max_results,
):
    """Search similar products to image.
    Args:
        project_id: Id of the project.
        location: A compute region name.
        product_set_id: Id of the product set.
        product_category: Category of the product.
        file_path: Local file path of the image to be searched.
        filter: Condition to be applied on the labels.
                Example for filter: (color = red OR color = blue) AND style = kids
                It will search on all products with the following labels:
                color:red AND style:kids
                color:blue AND style:kids
        max_results: The maximum number of results (matches) to return. If omitted, all results are returned.
    """
    # product_search_client is needed only for its helper methods.
    product_search_client = vision.ProductSearchClient()
    image_annotator_client = vision.ImageAnnotatorClient()

    # Read the image as a stream of bytes.
    with open(file_path, "rb") as image_file:
        content = image_file.read()

    # Create annotate image request along with product search feature.
    image = vision.Image(content=content)

    # product search specific parameters
    product_set_path = product_search_client.product_set_path(
        project=project_id, location=location, product_set=product_set_id
    )
    product_search_params = vision.ProductSearchParams(
        product_set=product_set_path,
        product_categories=[product_category],
        filter=filter,
    )
    image_context = vision.ImageContext(product_search_params=product_search_params)

    # Search products similar to the image.
    response = image_annotator_client.product_search(
        image, image_context=image_context, max_results=max_results
    )

    index_time = response.product_search_results.index_time
    print("Product set index time: ")
    print(index_time)

    results = response.product_search_results.results

    print("Search results:")
    for result in results:
        product = result.product

        print(f"Score(Confidence): {result.score}")
        print(f"Image name: {result.image}")

        print(f"Product name: {product.name}")
        print("Product display name: {}".format(product.display_name))
        print(f"Product description: {product.description}\n")
        print(f"Product labels: {product.product_labels}\n")

Weitere Sprachen

C#: Folgen Sie der Anleitung zur Einrichtung von C# auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für .NET auf.

PHP: Folgen Sie der Anleitung zur Einrichtung von PHP auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für PHP auf.

Ruby: Folgen Sie der Anleitung zur Einrichtung von Ruby auf der Seite der Clientbibliotheken und rufen Sie dann die Vision API Product Search-Referenzdokumentation für Ruby auf.

Beispielantwort für Kleidungsstücke

Search Image:
  D:/product/final/images-20180618T073733Z-01/images/469355b570ba11e88ff2d20059124800.jpg

Ergebnis für die Bildersuche

Similar product information:
 Product id: 46930b6b
 Product display name: Evening gown
 Product description: Blue evening gown in 1940s style
 Product category: apparel
 style: women
 category: dress
 color: blue

Mit einem Label suchen

Das folgende Suchbeispiel enthält einen Farbfilter.

Anfrage

Zum Senden einer Suchanfrage führen Sie die folgende Anfrage mit der Methode get_similar_products_file() oder get_similar_products_uri() aus. Produktgruppen-ID, lokaler Bilddateipfad und Filter werden als Argumente übergeben. Dieses Eingabebild ist auch in "resources/input/" vorhanden.

Python

python product_search.py get_similar_products_file "12000002" "D:/product/final/images-20180618T073733Z-001/images/469355b570ba11e88ff2d20059124800.jpg" "color=white"

Antwort

Search Image:
  D:/product/final/images-20180618T073733Z-001/images/469355b570ba11e88ff2d20059124800.jpg

Ergebnis für die Bildersuche 2

Similar product information:
 Product id: p569d4e7a1
 Product display name: Wedding Dress
 Product description: Elegant Wedding Dress for women
 Product category: apparel
 style: women
 category: dress
 color: white