Crea un set di prodotti e cerca i prodotti

Questa guida rapida illustra come creare e utilizzare i tre tipi di risorse API Vision Product Search: 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 collettiva.

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 già fatto, configura il progetto come spiegato di seguito.

Configura il progetto

  1. Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il Google Cloud progetto che stai creando.

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  6. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  7. Abilita l'API Vision:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable vision.googleapis.com
  8. Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/storage.objectViewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio, myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.
  9. Installa Google Cloud CLI.

  10. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  11. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  12. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il Google Cloud progetto che stai creando.

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  13. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  14. Abilita l'API Vision:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable vision.googleapis.com
  15. Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/storage.objectViewer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio, myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.

Utilizzare un set di dati

In questa guida rapida utilizzerai un set di dati di circa 100 voci della categoria 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 seguente comando curl 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.

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

Sostituisci quanto segue:

  • LOCATION_ID: la località 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.

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 l'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 della Ricerca di Product Search dei prodotti viene aggiornato circa ogni giorno. 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 indexTime campo 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 i prodotti

Puoi utilizzare l'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 query facoltativo pageSize per impostare l'elenco dei risultati su 15 prodotti. Il nextPageToken nella risposta indica anche che ci sono altri prodotti da elencare. Puoi utilizzare il token elencato per recuperare ulteriori risultati. Per saperne di più sull'utilizzo di un pageToken, consulta Recuperare ed elencare le 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 Cloud Storage, ad esempio la seguente immagine.

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

Cerca 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 file JSON di 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, vedi 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 inviato la tua prima richiesta images.annotate al servizio API Vision Product Search.

Libera spazio

  1. (Facoltativo) Revoca le credenziali da gcloud CLI.

    gcloud auth revoke
  2. Elimina un Google Cloud progetto:

    gcloud projects delete PROJECT_ID

Passaggi successivi