Etichetta le immagini utilizzando l'API AutoML Vision

Questa guida rapida illustra la procedura per:

  • Copiare un file CSV con un elenco di immagini e riquadri di delimitazione con etichette in Google Cloud Storage.
  • Utilizzo di AutoML Vision Object Detection per creare il set di dati e addestrare il modello ed eseguirne il deployment.

In questa guida rapida utilizzerai i comandi cURL per inviare richieste all'API AutoML Vision. Puoi inoltre completare tutti i passaggi elencati qui nell'interfaccia utente facendo riferimento alla Guida rapida all'utilizzo dell'interfaccia utente. Per ulteriori istruzioni sull'utilizzo dell'interfaccia utente o dell'API, consulta le guide illustrative.

Prima di iniziare

Configura il progetto

  1. Accedi al tuo account Google Cloud. 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

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

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

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

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API AutoML and Cloud Storage.

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  7. Installa Google Cloud CLI.
  8. Per initialize gcloud CLI, esegui questo comando:

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

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

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

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  10. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  11. Abilita le API AutoML and Cloud Storage.

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  12. Imposta la variabile di ambiente PROJECT_ID sul tuo ID progetto.
    export PROJECT_ID=PROJECT_ID
    Le chiamate API e i nomi delle risorse AutoML includono l'ID progetto al loro interno. La variabile di ambiente PROJECT_ID consente di specificare facilmente l'ID.

Preparazione di un set di dati

In questa guida rapida utilizzerai un set di dati creato da Open Images Dataset V4. Questo set di dati Insalata disponibile pubblicamente si trova all'indirizzo gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv.

Il formato CSV è il seguente:

TRAINING,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Salad,0.0,0.0954,,,0.977,0.957,,
VALIDATION,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Seafood,0.0154,0.1538,,,1.0,0.802,,
TEST,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Tomato,0.0,0.655,,,0.231,0.839,,
esempio di immagine set di dati
3916261642_0a504acd60_o.jpg

Ogni riga corrisponde a un oggetto localizzato all'interno di un'immagine più grande, con ciascun oggetto designato in modo specifico come dati di test, addestramento o convalida. Le tre righe incluse qui indicano tre oggetti distinti situati all'interno della stessa immagine disponibili in gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg. Ogni riga ha un'etichetta diversa: Salad, Seafood, Tomato, oltre ad altre righe con etichette Baked goods o Cheese.

I riquadri di delimitazione vengono specificati per ogni immagine utilizzando i vertici in alto a sinistra e in basso a destra:

  • (0,0) corrisponde al vertice più in alto a sinistra.
  • (1,1) corrisponde al vertice in basso a destra.

Per la prima riga mostrata sopra, le coordinate (x, y) per il vertice in alto a sinistra dell'oggetto con etichetta Salad sono (0.0,0.0954) e le coordinate per il vertice in basso a destra dell'oggetto sono (0.977,0.957).

Per informazioni più dettagliate su come formattare il file CSV e sui requisiti minimi per creare un set di dati valido, consulta Preparazione dei dati di addestramento.


Crea un set di dati e importa i dati di addestramento

Il comando curl utilizza il comando gcloud auth print-access-token per ottenere un token di accesso per il tuo Account Google.

Per la release beta, utilizza us-central1 come regione, indipendentemente dalla tua località effettiva.

Crea un set di dati

Utilizza il seguente comando curl per creare un nuovo set di dati con un nome visualizzato di tua scelta:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
"https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets" -d '{
    "display_name": "DISPLAY_NAME",
    "image_object_detection_dataset_metadata": {
    }
}'

La risposta restituisce un ID del set di dati relativo (ad esempio IOD5491013845671477445) che ti servirà nei passaggi successivi.

{
  "name": "projects/PROJECT_ID/locations/us-central1/datasets/IOD5491013845671477445",
  "displayName": "DISPLAY_NAME",
  "createTime": "2018-10-29T15:45:53.353442Z",
  "imageObjectDetectionDatasetMetadata": {}
}

Importa dati

Importa i dati di addestramento nel tuo set di dati. Il comando importData prende come input l'URI del tuo set di dati. Qui dovrai fornire l'indirizzo di Google Cloud Storage disponibile pubblicamente in cui è archiviato il set di dati delle sale. Questa procedura può richiedere fino a 30 minuti.

  • Sostituisci DATASET_ID con l'identificatore del set di dati per il tuo set di dati (non il nome visualizzato). Ad esempio: IOD5491013845671477445.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID:importData \
-d '{
  "input_config": {
    "gcs_source": {
       "input_uris": [
         "gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv"
        ]
    }
  }
}'

La risposta restituisce un ID operazione relativo (ad esempio IOD1555149246326374411) che può essere utilizzato per ottenere lo stato dell'operazione.

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-29T15:56:29.176485Z",
    "updateTime": "2018-10-29T15:56:29.176485Z",
    "importDataDetails": {}
  }
}

Verifica lo stato dell'operazione di importazione

Puoi eseguire query sullo stato dell'operazione di importazione dei dati utilizzando il seguente comando curl.

  • Sostituisci OPERATION_ID con l'ID operazione restituito dall'operazione di importazione dei dati.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID

Il completamento dell'operazione di importazione può richiedere del tempo. Al termine dell'attività di importazione, verrà visualizzato done: true nello stato dell'operazione, senza errori, come mostrato nell'esempio seguente.

Questa richiesta restituirà anche eventuali avvisi per l'importazione del set di dati. Sono stati aggiunti errori a questo set di dati per mostrarti un esempio di questi avvisi. L'utilizzo di questa operazione per visualizzare questi avvisi è un modo utile per trovare errori nei dati.

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-29T15:56:29.176485Z",
    "updateTime": "2018-10-29T16:10:41.326614Z",
    "importDataDetails": {}
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

Recupera un elenco di set di dati

Puoi ottenere un elenco dei tuoi set di dati utilizzando il seguente comando.

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets

Dovresti vedere un output simile al seguente:

{
  "datasets": [
    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID1",
      "displayName": "DISPLAY_NAME1",
      "createTime": "2018-10-29T15:45:53.353442Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID2",
      "displayName": "DISPLAY_NAME2",
      "createTime": "2018-10-24T21:06:05.390059Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    }
  ]
}

addestra il modello

Avvia un'applicazione di addestramento di modelli

Dopo aver creato il set di dati e importato i dati di addestramento nel set di dati, puoi addestrare il modello personalizzato.

Addestra il modello utilizzando il seguente comando curl.

  • Sostituisci DATASET_ID con l'identificatore del set di dati (non il nome visualizzato).
  • Sostituisci DISPLAY_NAME con un nome scelto da te per il modello.
  • Specifica image_object_detection_model_metadata.model_type. Sono disponibili due opzioni per ottimizzare la latenza o l'accuratezza:
    • cloud-low-latency-1: ottimizza l'addestramento per migliorare la latenza.
    • cloud-high-accuracy-1: ottimizza l'addestramento per garantire l'accuratezza.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models -d '{
  "datasetId": "DATASET_ID",
  "displayName": "DISPLAY_NAME",
  "image_object_detection_model_metadata": {},
}'

Dovresti ricevere un ID operazione per l'operazione del modello di addestramento (ad esempio IOD5644417707978784777), da utilizzare per ottenere lo stato dell'operazione di addestramento.

{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-29T16:41:23.902167Z",
    "updateTime": "2018-10-29T16:41:23.902167Z",
    "createModelDetails": {}
  }
}

Il processo di addestramento potrebbe richiedere diverse ore.

Visualizza lo stato dell'operazione di addestramento del modello

Puoi eseguire query sullo stato dell'operazione di addestramento del modello utilizzando il seguente comando curl.

  • Sostituisci OPERATION_ID con l'ID dell'operazione di addestramento.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID

Dovresti vedere un output simile al seguente. Al termine dell'operazione, vedrai done: true senza errori.


{
  "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-24T22:08:23.327323Z",
    "updateTime": "2018-10-24T23:41:18.452855Z",
    "createModelDetails": {}
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.Model",
    "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784777"
  }
}

Verifica che il modello sia disponibile

Una volta completata correttamente l'operazione di addestramento del modello, puoi verificare che il modello sia disponibile utilizzando il seguente comando per elencare i modelli per il tuo progetto.

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models

Dovresti ricevere un ID modello (ad esempio IOD5644417707978784778) che puoi utilizzare per ottenere le metriche di valutazione del modello una volta completato l'addestramento del modello. Dovresti vedere un output simile al seguente:

{
  "model": [
    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784778",
      "displayName": "DISPLAY_NAME",
      "datasetId": "IOD5491013845671477445",
      "createTime": "2018-10-24T23:37:00.858493Z",
      "updateTime": "2018-10-24T23:37:00.858493Z",
      "deploymentState": "DEPLOYED",
      "imageObjectDetectionModelMetadata": {
          "modelType": "cloud-low-latency-1",
          "nodeCount": "1",
          "nodeQps": 1.2987012987012987
      }
    }
  ]
}

Valuta il modello

Al termine dell'addestramento del modello, puoi elencare le metriche di valutazione del modello utilizzando il seguente comando curl.

  • Sostituisci MODEL_ID con l'identificatore del modello.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations

AutoML Vision Object Detection fornisce un set aggregato di metriche di valutazione che indicano le prestazioni generali del modello, nonché metriche di valutazione per ogni etichetta, che indicano le prestazioni del modello per quell'etichetta al di sotto di soglie diverse.

Esegui il deployment del modello

Prima di poter fare una previsione, devi eseguire manualmente il deployment del modello.

Utilizza questo comando per eseguire il deployment del modello:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:deploy \
  -d '{
      "imageObjectDetectionModelDeploymentMetadata": {
        "nodeCount": 2
      }
    }'

Fai una previsione

Invia una richiesta di previsione

Puoi utilizzare il modello di cui hai eseguito il deployment per fare una previsione su un'immagine locale utilizzando il seguente file JSON e il comando curl.

  • Crea un file JSON di richiesta denominato predict_request.json e fornisci un'immagine con codifica Base64 nel campo "imageBytes".

predict_request.json

{
    "payload": {
        "image": {
            "image_bytes": "/9j/4QAYRXhpZgAA...base64-encoded-image...9tAVx/zDQDlGxn//2Q=="
        }
    }
}

  • Sostituisci MODEL_ID con l'identificatore del modello.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
"https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:predict" -d @PATH_TO_JSON_FILE/predict_request.json

Una richiesta andata a buon fine restituisce una risposta con uno o più riquadri di delimitazione specificati da due normalizedVertices diagonalmente opposte. A ogni riquadro di delimitazione identificato sono associate un'affidabilità score e un'annotazione (displayName).

{
  "payload": [
    {
      "imageObjectDetection": {
        "boundingBox": {
          "normalizedVertices": [
            {
              "x": 0.034553755,
              "y": 0.015524037
            },
            {
              "x": 0.941527,
              "y": 0.9912563
            }
          ]
        },
        "score": 0.9997793
      },
      "displayName": "Salad"
    },
    {
      "imageObjectDetection": {
        "boundingBox": {
          "normalizedVertices": [
            {
              "x": 0.11737197,
              "y": 0.7098793
            },
            {
              "x": 0.510878,
              "y": 0.87987
            }
          ]
        },
        "score": 0.63219965
      },
      "displayName": "Tomato"
    }
  ]
}

(Facoltativo) Annulla il deployment del modello

Il modello prevede addebiti durante il deployment. Per evitare di incorrere in questo costo di hosting del modello, puoi annullare il deployment del modello.

Esegui questo comando per annullare il deployment del modello:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Content-Type: application/json" \
  "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:undeploy"

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto Google Cloud con le risorse.

Se non hai più bisogno del tuo modello personalizzato e del relativo set di dati, puoi eliminarli.

Elenco modelli

Puoi elencare i modelli per il tuo progetto, insieme ai relativi identificatori, utilizzando il seguente comando:

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models

Eliminazione di un modello

Puoi eliminare un modello utilizzando il seguente comando.

  • Sostituisci MODEL_ID con l'identificatore del modello.
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID

Creazione di un elenco di set di dati

Puoi elencare i set di dati del tuo progetto, insieme ai relativi identificatori, utilizzando il seguente comando:

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets

Eliminazione di un set di dati

Puoi eliminare un set di dati utilizzando il comando seguente.

  • Sostituisci DATASET_ID con l'identificatore del modello.
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID

Passaggi successivi