Creare un set di prodotti e cercare i prodotti

Questa guida rapida mostra come creare e utilizzare i tre tipi di risorse Product Search dell'API Vision: un set di prodotti contenente un gruppo di prodotti e le immagini di riferimento associate ai prodotti.

In questa guida rapida creerai un set di prodotti, i prodotti e le relative immagini di riferimento in un unico passaggio tramite l'importazione batch.

Una volta indicizzato il set di prodotti, puoi eseguire query sul set di prodotti utilizzando l'API Vision Product Search.

Questa guida rapida ti illustra la procedura per:

  • Utilizzare un file CSV e l'importazione collettiva per creare un set di prodotti, i prodotti e le immagini di riferimento.
  • Inviare una richiesta all'API Vision Product Search con un'immagine archiviata in un bucket Cloud Storage.

Prima di iniziare

Se non l'hai ancora fatto, configura il progetto come spiegato di seguito.

Configura il progetto

  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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

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

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

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

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  7. Enable the Vision API:

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

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace 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.
  9. Install the Google Cloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

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

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

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

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  14. Enable the Vision API:

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

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace 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.
  16. Imposta le variabili di ambiente

    Per semplificare l'esecuzione degli esempi di curl in questa guida rapida, imposta le seguenti variabili di ambiente:

    • PROJECT_ID è l'ID del tuo progetto Google Cloud .
    • LOCATION_ID è la posizione Google Cloud in cui verrà eseguito il tutorial, ad esempio us-east1. Gli identificatori di località validi sono: us-west1, us-east1, europe-west1 e asia-east1 .

    Utilizzo di un set di dati

    In questa guida rapida utilizzerai un set di dati di circa 100 voci di categorie di prodotti apparel-v2. Questo set di dati disponibile pubblicamente si trova in un bucket Cloud Storage pubblico all'indirizzo:

    Il formato CSV è il seguente:

    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",
    

    Utilizza l'importazione collettiva per creare un set di prodotti, i prodotti e le immagini di riferimento

    Utilizza il comando curl seguente per creare un nuovo set di prodotti con prodotti e immagini di riferimento. Questo set è denominato product_set0, un valore dichiarato nel CSV di importazione.

    Per prima cosa, crea un file JSON di richiesta denominato import_request.json e salvalo nella directory di lavoro corrente:

    import_request.json

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

    Dopo aver creato il file JSON di richiesta, invia la richiesta:

    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

    Una risposta corretta contiene un oggetto operazione a lunga esecuzione:

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

    La risposta contiene anche un ID operazione relativo (ad esempio, 0a0aec86192599fa) che può essere utilizzato per ottenere lo stato dell'operazione.

    Verifica lo stato dell'importazione

    Puoi utilizzare operation-id restituito dall'operazione di importazione per verificare lo stato dell'operazione di importazione collettiva:

    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

    Una risposta corretta è simile alla seguente:

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

    Indicizzazione

    L'indice di Product Search dei prodotti viene aggiornato ogni 30 minuti circa. Quando aggiungi o elimini immagini, la modifica non si riflette nelle risposte di Product Search finché non viene aggiornato nuovamente l'indice.

    Per assicurarti che l'indicizzazione sia stata completata correttamente, controlla il campo indexTime di un set di prodotti.

    Elenca i set di prodotti e controlla l'indicizzazione

    Puoi elencare tutti i set di prodotti e utilizzare il campo indexTime per verificare che l'indicizzazione sia stata completata correttamente:

    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

    Una risposta corretta elenca tutti i set di prodotti, incluso un ID del set di prodotti (ad esempio product_set0), nonché il campo indexTime che indica quando è stata completata l'indicizzazione:

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

    Elenca prodotti

    Puoi utilizzare PRODUCT_SET_ID restituito dall'elenco dei set di prodotti per elencare tutti i prodotti inclusi nel set:

    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

    Una risposta corretta elenca i dettagli dei prodotti.

    In questa richiesta utilizzi il parametro di ricerca facoltativo pageSize per impostare l'elenco dei risultati su 15 prodotti. nextPageToken nella risposta indica anche che ci sono altri prodotti da elencare. Puoi utilizzare il token elencato per recuperare ulteriori risultati. Per maggiori informazioni sull'utilizzo di un pageToken, consulta Recupero ed elenco delle risorse.

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

    Cerca i prodotti corrispondenti con l'API Vision Product Search

    Una volta completata l'indicizzazione, puoi cercare i prodotti corrispondenti a un'immagine di esempio. In questa guida rapida utilizzerai un'immagine archiviata in un bucket Google Cloud Storage, ad esempio la seguente.

    Un'immagine di un vestito in un bucket Cloud Storage.
    gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg

    Cercare utilizzando un'immagine remota

    Utilizza la seguente richiesta per eseguire la ricerca utilizzando l'immagine archiviata in un bucket Cloud Storage pubblico.

    Innanzitutto, crea un file JSON di richiesta denominato search_request.json e salvalo nella directory di lavoro corrente. Modifica i seguenti valori nel JSON della richiesta in modo che corrispondano alle informazioni del tuo progetto:

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

    Dopo aver creato il file JSON di richiesta, invia la richiesta:

    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

    Una richiesta corretta restituisce un elenco di prodotti corrispondenti, con il relativo ID prodotto. Questi risultati sono ulteriormente suddivisi in base ai singoli prodotti identificati da riquadri di delimitazione, se in una singola immagine sono presenti più prodotti.

    Per un esempio di rilevamento di un singolo prodotto e di rilevamento multiplo di prodotti in un'immagine, consulta Informazioni su risposte della ricerca e rilevamento multiplo.

    Viene restituito anche un campo score. Questo campo indica l'affidabilità con cui il servizio ritiene che il prodotto corrisponda all'immagine fornita, su una scala da 0 (nessuna affidabilità) a 1 (affidabilità totale).

    Il campo indexTime mostra la versione dell'indice in cui viene eseguita la ricerca. Le modifiche apportate alle immagini dopo questa data non si riflettono nei risultati.

    Complimenti! Hai effettuato la tua prima richiesta images.annotate al servizio Vision API Product Search.

Esegui la pulizia

  1. Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke
  2. Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Passaggi successivi