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. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die Vision API:

    gcloud services enable vision.googleapis.com
  7. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/storage.objectViewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.
  8. Installieren Sie die Google Cloud CLI.
  9. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  10. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  11. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  12. Aktivieren Sie die Vision API:

    gcloud services enable vision.googleapis.com
  13. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/storage.objectViewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.

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, an dem Ihre 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 in einem Google Cloud Storage-Bucket gespeichertes Bild, z. B. 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.

Das wars! Sie haben Ihre erste images.annotate-Anfrage an den Produktsuchdienst der Vision API gesendet.

Bereinigen

  1. Optional: Widerrufen Sie Anmeldedaten von der gcloud-CLI.

    gcloud auth revoke
  2. Google Cloud-Projekt löschen:

    gcloud projects delete PROJECT_ID

Nächste Schritte