Produktgruppe erstellen und Produkte suchen

In dieser Kurzanleitung wird erläutert, wie Sie drei Arten von Ressourcen für die Vision API-Produktsuche erstellen und verwenden: eine Produktgruppe, die eine Gruppe von Produkten enthält, und Referenzbilder, die diesen Produkten zugeordnet sind.

In dieser Kurzanleitung erstellen Sie eine Produktgruppe, Produkte und deren Referenzbilder durch Batch-Import in einem einzigen Schritt.

Nachdem Sie die Produktgruppe indexiert haben, können Sie sie über die Vision API-Produktsuche abfragen.

In dieser Kurzanleitung werden folgende Verfahren erläutert:

  • CSV- und Bulk-Import zum Erstellen einer Produktgruppe, von Produkten und Referenzbildern verwenden
  • Anfrage an die Vision API-Produktsuche mit einem in einem Cloud Storage-Bucket gespeicherten Bild stellen

Vorbereitung

Richten Sie wie unten beschrieben das Projekt ein, falls Sie dies noch nicht getan haben.

Projekt einrichten

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Vision API:

    gcloud services enable vision.googleapis.com
  7. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/storage.objectViewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Make sure that billing is enabled for your Google Cloud project.

  12. Enable the Vision API:

    gcloud services enable vision.googleapis.com
  13. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/storage.objectViewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

Umgebungsvariablen festlegen

Legen Sie die folgenden Umgebungsvariablen fest, um die Ausführung der curl-Beispiele in dieser Kurzanleitung zu vereinfachen. Dabei gilt:

  • PROJECT_ID ist die ID des Google Cloud-Projekts.
  • LOCATION_ID ist der Google Cloud-Speicherort, in dem die Anleitung ausgeführt wird, z. B. us-east1. Gültige Standort-IDs sind us-west1, us-east1, europe-west1 und asia-east1.

Dataset verwenden

In dieser Kurzanleitung verwenden Sie ein Dataset von ca. 100 Einträgen der Produktkategorie apparel-v2. Dieses öffentlich verfügbare Dataset befindet sich in einem öffentlichen Cloud Storage-Bucket unter:

Das CSV-Format lautet:

gs://cloud-ai-vision-data/product-search-tutorial/images/filename1.jpg,image0,product_set0,product_id0,apparel-v2,,"style=women,category=shoe",
gs://cloud-ai-vision-data/product-search-tutorial/images/filename2.jpg,image1,product_set0,product_id1,apparel-v2,,"style=men,category=shoe",
gs://cloud-ai-vision-data/product-search-tutorial/images/filename3.jpg,image2,product_set0,product_id2,apparel-v2,,"style=women,category=dress",

Bulk-Import verwenden, um eine Produktgruppe, Produkte und Referenzbilder zu erstellen

Verwenden Sie den folgenden curl-Befehl, um eine neue Produktgruppe mit Produkten und Referenzbildern zu erstellen. Diese Gruppe heißt product_set0, ein in der Import-CSV-Datei deklarierter Wert.

Erstellen Sie zuerst eine JSON-Anfragedatei namens import_request.json und speichern Sie sie in Ihrem aktuellen Arbeitsverzeichnis.

import_request.json

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

Senden Sie nach dem Erstellen der JSON-Anfragedatei die Anfrage:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-user-project: PROJECT_ID" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @import_request.json \
    https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSets:import

Eine erfolgreiche Antwort enthält ein lang laufendes Vorgangsobjekt:

{
  "name": "locations/LOCATION_ID/operations/0a0aec86192599fa"
}

Die Antwort enthält auch eine relative Vorgangs-ID (z. B. 0a0aec86192599fa), mit der der Status des Vorgangs abgerufen werden kann.

Status des Importvorgangs abrufen

Sie können die vom Importvorgang zurückgegebene operation-id verwenden, um den Status des Bulk-Importvorgangs zu prüfen:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-user-project: PROJECT_ID" \
    -H "Content-Type: application/json" \
    https://vision.googleapis.com/v1/locations/LOCATION_ID/operations/OPERATION_ID

Eine erfolgreiche Antwort sieht so aus:

{
  "name": "locations/LOCATION_ID/operations/0a0aec86192599fb",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.BatchOperationMetadata",
    "state": "SUCCESSFUL",
    "submitTime": "2018-11-30T03:11:04.808114024Z",
    "endTime": "2018-11-30T03:11:38.624444324Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.ImportProductSetsResponse",
    "referenceImages": [
      {
        "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id0/referenceImages/image0",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/46a0cbcf70ba11e89399d20059124800.jpg"
      },
      {
        "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id1/referenceImages/image1",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/46a1aea370ba11e888d4d20059124800.jpg"
      },
      ...
      {
        "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id93/referenceImages/image93",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/4697319970ba11e8a7bfd20059124800.jpg"
      },
      {
        "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id94/referenceImages/image94",
        "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/4698596370ba11e8bf6ad20059124800.jpg"
      }
    ],
    "statuses": [
      {},
      {},
      [...]
      {},
      {}
    ]
  }
}

Indexierung

Der Index für die Produktsuche wird alle 30 Minuten aktualisiert. Wenn Bilder hinzugefügt oder gelöscht werden, spiegelt sich die Änderung erst nach der nächsten Aktualisierung des Index in den Antworten der Produktsuche wider.

Prüfen Sie das Feld indexTime einer Produktgruppe, ob die Indexierung erfolgreich abgeschlossen wurde.

Produktgruppen auflisten und Indexierung prüfen

Sie können alle Produktgruppen auflisten lassen und das Feld indexTime verwenden, um zu prüfen, ob die Indexierung erfolgreich abgeschlossen wurde:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-user-project: PROJECT_ID" \
    -H "Content-Type: application/json" \
    https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSets

Bei einer erfolgreichen Antwort werden alle Ihre Produktgruppen, einschließlich einer Produktgruppen-ID (z. B. product_set0), sowie das Feld indexTime aufgelistet. Dieses Feld gibt an, wann die Indexierung abgeschlossen wurde:

{
  "productSets": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/productSets/product_set0",
      "displayName": " ",
      "indexTime": "2019-11-30T18:33:40.093508652Z",
      "indexError": {}
    }
  ]
}

Produkte auflisten

Sie können die von der Liste der Produktgruppen zurückgegebene PRODUCT_SET_ID verwenden, um alle Produkte in Ihrer Produktgruppe aufzulisten:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-user-project: PROJECT_ID" \
    -H "Content-Type: application/json" \
    https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSets/PRODUCT_SET_ID/products?pageSize=15

Eine erfolgreiche Antwort listet die Produktdetails auf.

In dieser Anfrage verwenden Sie den optionalen Anfrageparameter pageSize, um die Ergebnisliste auf 15 Produkte zu begrenzen. Das nextPageToken in der Antwort gibt außerdem an, dass weitere Produkte aufgelistet werden können. Sie können das aufgelistete Token verwenden, um weitere Ergebnisse abzurufen. Weitere Informationen zur Verwendung eines pageToken finden Sie unter Ressourcen abrufen und auflisten.

{
  "products": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id0",
      "displayName": " ",
      "productCategory": "apparel",
      "productLabels": [
        {
          "key": "style",
          "value": "women"
        },
        {
          "key": "category",
          "value": "shoe"
        }
      ]
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id1",
      "displayName": " ",
      "productCategory": "apparel",
      "productLabels": [
        {
          "key": "style",
          "value": "men"
        },
        {
          "key": "category",
          "value": "shoe"
        }
      ]
    },
    ...
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id21",
      "displayName": " ",
      "productCategory": "apparel",
      "productLabels": [
        {
          "key": "style",
          "value": "women"
        },
        {
          "key": "category",
          "value": "dress"
        }
      ]
    }
  ],
  "nextPageToken": "1LqhSgZfM_uWKOxvog"
}

Passende Produkte mit der Vision API-Produktsuche finden

Nach Abschluss der Indexierung können Sie nach Produkten suchen, die mit einem Beispielbild übereinstimmen. In dieser Kurzanleitung verwenden Sie ein Bild, das in einem Google Cloud Storage-Bucket gespeichert ist, wie das folgende Bild.

Bild: Ein Kleid
gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg

Suche mit einem Remote-Bild

Verwenden Sie die folgende Anfrage für die Suche mit dem Bild, das in einem öffentlichen Cloud Storage-Bucket gespeichert ist.

Erstellen Sie zuerst eine JSON-Anfragedatei namens search_request.json und speichern Sie sie in Ihrem aktuellen Arbeitsverzeichnis. Ändern Sie die folgenden Werte in der JSON-Anfrage, sodass sie mit den Informationen Ihres Projekts übereinstimmen:

  • PROJECT_ID
  • LOCATION_ID
  • PRODUCT_SET_ID

search_request.json

{
  "requests": [
    {
      "image": {
        "source": {
          "gcsImageUri": "gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg"
        }
      },
      "features": [
        {
          "type": "PRODUCT_SEARCH"
        }
      ],
      "imageContext": {
        "productSearchParams": {
          "productSet": "projects/PROJECT_ID/locations/LOCATION_ID/productSets/PRODUCT_SET_ID",
          "productCategories": [
            "apparel-v2"
          ],
          "filter": "style=womens OR style=women"
        }
      }
    }
  ]
}

Senden Sie nach dem Erstellen der JSON-Anfragedatei die Anfrage:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-user-project: PROJECT_ID" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @search_request.json \
    https://vision.googleapis.com/v1/images:annotate

Eine erfolgreiche Anfrage gibt eine Liste passender Produkte zurück, die durch ihre Produkt-ID angegeben wird. Diese Ergebnisse werden weiter nach einzelnen Produkten aufgegliedert, die durch Begrenzungsrahmen identifiziert werden, wenn sich in einem Bild mehrere Produkte befinden.

Ein Beispiel für die Einzelprodukterkennung und Mehrfacherkennung von Produkten in einem Bild finden Sie unter Suchantworten und Mehrfacherkennung verstehen.

Das Feld score wird ebenfalls zurückgegeben. Dieses Feld gibt an, wie hoch die Konfidenz ist, dass der Artikel mit dem bereitgestellten Bild übereinstimmt. Die Skala reicht von 0 (keine Konfidenz) bis 1 (hohe Konfidenz).

Das Feld indexTime gibt an, welche Version des Indexes durchsucht wird. Später vorgenommene Bildänderungen werden in den Ergebnissen nicht angezeigt.

Glückwunsch! Sie haben Ihre erste images.annotate-Anfrage an den Produktsuchdienst der Vision API gesendet.

Bereinigen

  1. Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke
  2. Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Nächste Schritte