Ajouter des libellés à des images à l'aide de l'API AutoML Vision

Ce guide de démarrage rapide vous présente les processus suivants :

  • Copie d'un fichier CSV répertoriant des images et des cadres de délimitation avec des libellés dans Google Cloud Storage.
  • Utilisation de la détection d'objets AutoML Vision pour créer votre ensemble de données, ainsi qu'entraîner et déployer votre modèle.

Dans ce guide de démarrage rapide, vous utiliserez des commandes cURL pour envoyer des requêtes à l'API AutoML Vision. Vous pouvez également suivre toutes les étapes répertoriées ici dans l'interface utilisateur en vous reportant au Guide de démarrage rapide à l'aide de l'interface utilisateur. Pour en savoir plus sur l'utilisation de l'UI ou de l'API, consultez les guides d'utilisation.

Avant de commencer

Configurer votre projet

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Activer les API AutoML and Cloud Storage :

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  7. Installez Google Cloud CLI.
  8. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  9. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  10. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  11. Activer les API AutoML and Cloud Storage :

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  12. Définissez la variable d'environnement PROJECT_ID sur l'ID de votre projet.
    export PROJECT_ID=PROJECT_ID
    Les noms de ressources et les appels d'API AutoML incluent votre ID de projet. La variable d’environnement PROJECT_ID constitue un moyen pratique de spécifier l’ID.

Préparer un ensemble de données

Dans ce guide de démarrage rapide, vous allez utiliser un ensemble de données créé à partir de Open Images Dataset V4. Cet ensemble de données accessible au public intitulé "Salads" se trouve à l'adresse gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv.

Le format du fichier CSV est le suivant :

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,,
exemple d'image d'ensemble de données
3916261642_0a504acd60_o.jpg

Chaque ligne correspond à un objet localisé dans une image plus grande, chaque objet étant spécifiquement désigné comme données de test, d'entraînement ou de validation. Les trois lignes incluses ici indiquent trois objets distincts situés dans la même image, disponible à l'adresse gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg. Chaque ligne a une étiquette différente : Salad, Seafood, Tomato. D'autres lignes ont les étiquettes Baked goods ou Cheese.

Des cadres de délimitation sont spécifiés pour chaque image à l'aide du sommet supérieur gauche et du sommet inférieur droit :

  • (0,0) correspond au sommet le plus en haut à gauche.
  • (1,1) correspond au sommet le plus en bas à droite.

Pour la première ligne du haut, les coordonnées (x, y) du sommet supérieur gauche de l'objet étiqueté Salad sont (0.0,0.0954) et celles du sommet inférieur droit de l'objet sont (0.977,0.957).

Pour en savoir plus sur la mise en forme de votre fichier CSV et la configuration minimale requise pour créer un ensemble de données valide, consultez la page Préparer les données d'entraînement.


Créer un ensemble de données et importer des données d'entraînement

La commande curl utilise la commande gcloud auth print-access-token afin d'obtenir un jeton d'accès pour votre compte Google.

Pour la version bêta, utilisez us-central1 comme région, quelle que soit votre position réelle.

Créer un ensemble de données

Exécutez la commande curl suivante pour créer un ensemble de données avec un nom à afficher de votre choix :

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 réponse renvoie un ID d'ensemble de données relatif, tel que IOD5491013845671477445, dont vous aurez besoin pour poursuivre la procédure.

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

Importer des données

Importez vos données d'entraînement dans votre ensemble de données. La commande importData reçoit en entrée l'URI de votre ensemble de données. Vous devez fournir l'adresse Google Cloud Storage publique dans laquelle est stocké l'ensemble de données Salads. Cette opération peut prendre jusqu'à 30 minutes

  • Remplacez DATASET_ID par l'identifiant de l'ensemble de données (et non par le nom à afficher). Exemple : 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 réponse renvoie un ID d'opération relatif (par exemple, IOD1555149246326374411) que vous pouvez utiliser pour obtenir l'état de l'opération.

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

Obtenir l'état de l'opération d'importation

Vous pouvez demander l'état de votre opération d'importation de données à l'aide de la commande curl suivante.

  • Remplacez OPERATION_ID par l'ID d'opération renvoyé par l'opération d'importation des données.
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

L'opération d'importation peut prendre un certain temps. Une fois la tâche d'importation terminée, vous verrez s'afficher done: true dans l'état de l'opération sans aucune erreur répertoriée, comme illustré dans l'exemple suivant.

Cette requête renvoie également des mises en garde pour l'importation de votre ensemble de données. Des erreurs ont été ajoutées à cet ensemble de données pour vous donner un exemple de ces mises en garde. L'utilisation de cette opération pour afficher ces mises en garde est un bon moyen pour détecter les erreurs dans vos données.

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

Obtenir une liste d'ensembles de données

Vous pouvez obtenir la liste de vos ensembles de données à l'aide de la commande suivante.

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

Le résultat doit être semblable au résultat suivant :

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

Entraîner le modèle

Lancer une application d'entraînement de modèle

Après avoir créé votre ensemble de données et y avoir importé vos données d'entraînement, vous pouvez entraîner votre modèle personnalisé.

Entraînez votre modèle à l'aide de la commande curl suivante.

  • Remplacez DATASET_ID par l'identifiant de l'ensemble de données (et non par le nom à afficher).
  • Remplacez DISPLAY_NAME par le nom que vous avez choisi pour votre modèle.
  • Spécifiez image_object_detection_model_metadata.model_type. Deux options sont disponibles pour optimiser la latence ou la précision :
    • cloud-low-latency-1 : optimise l'entraînement pour la latence.
    • cloud-high-accuracy-1 : optimise l'entraînement pour plus de précision.
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": {},
}'

Vous devriez recevoir un ID d'opération pour l'entraînement de votre modèle (par exemple, IOD5644417707978784777) que vous pouvez utiliser pour obtenir l'état de l'opération d'entraînement.

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

Le processus d'entraînement peut durer plusieurs heures.

Obtenir l'état de l'opération d'entraînement d'un modèle

Vous pouvez demander l'état de l'opération d'entraînement du modèle en exécutant la commande curl suivante.

  • Remplacez OPERATION_ID par l'ID de l'opération d'entraînement.
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

Un résultat semblable aux lignes suivantes doit s'afficher. Une fois l'opération terminée, vous verrez s'afficher done: true sans aucune erreur.


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

Vérifier la disponibilité du modèle

Une fois l'opération d'entraînement du modèle terminée, vous pouvez vérifier que votre modèle est disponible à l'aide de la commande suivante pour répertorier les modèles de votre projet.

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

Vous devriez recevoir un ID de modèle (par exemple, IOD5644417707978784778) que vous pouvez utiliser pour obtenir des statistiques d'évaluation de modèle une fois l'entraînement du modèle terminé. Le résultat doit être semblable au résultat suivant :

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

Évaluer le modèle

Une fois l'entraînement terminé, vous pouvez répertorier les statistiques d'évaluation du modèle à l'aide de la commande curl suivante.

  • Remplacez MODEL_ID par l'identifiant de votre modèle.
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

La détection d'objets AutoML Vision fournit un ensemble de statistiques d'évaluation indiquant les performances globales du modèle, ainsi que des statistiques d'évaluation pour chaque libellé de catégorie, de façon à évaluer les performances du modèle pour un libellé donné sous différents seuils.

Déployer le modèle

Avant de pouvoir effectuer une prédiction, vous devez déployer manuellement votre modèle.

Utilisez la commande suivante pour déployer votre modèle :

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
      }
    }'

Effectuer une prédiction

Envoyer une requête de prédiction

Vous pouvez utiliser votre modèle déployé pour effectuer une prédiction sur une image locale à l'aide du fichier JSON suivant et de la commande curl.

  • Créez un fichier JSON de requête appelé predict_request.json et fournissez une image encodée en base64 dans le champ "imageBytes".

predict_request.json

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

  • Remplacez MODEL_ID par l'identifiant de votre modèle.
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

Une requête réussie renvoie une réponse avec un ou plusieurs cadres de délimitation spécifiés par deux normalizedVertices diagonalement opposés. Chaque cadre de délimitation identifié est associé à un niveau de confiance score et à une annotation (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"
    }
  ]
}

Annuler le déploiement de votre modèle (facultatif)

Des frais vous sont facturés pour le déploiement du modèle. Pour les éviter : Pour éviter d'encourir ces frais d'hébergement du modèle, vous pouvez annuler le déploiement de votre modèle.

Exécutez la commande suivante pour annuler le déploiement de votre modèle :

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"

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, supprimez le projet Google Cloud contenant les ressources.

Si vous n'avez plus besoin de votre modèle personnalisé ni de l'ensemble de données associé, vous pouvez les supprimer.

Répertorier les modèles

Pour répertorier les modèles de votre projet et leurs identifiants, exécutez la commande suivante :

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

Supprimer un modèle

Vous pouvez supprimer un modèle à l'aide de la commande suivante.

  • Remplacez MODEL_ID par l'identifiant de votre modèle.
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

Répertorier des ensembles de données

Pour répertorier les ensembles de données de votre projet et leurs identifiants, exécutez la commande suivante :

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

Supprimer un ensemble de données

Vous pouvez supprimer un ensemble de données à l'aide de la commande suivante.

  • Remplacez DATASET_ID par l'identifiant de votre modèle.
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

Étape suivante