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
- 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.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créer ou sélectionner un projet Google Cloud
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
-
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API AutoML and Cloud Storage :
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créer ou sélectionner un projet Google Cloud
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
-
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API AutoML and Cloud Storage :
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Définissez la variable d'environnement
PROJECT_ID
sur votre ID de projet.export PROJECT_ID=PROJECT_ID
Les noms de ressources et les appels d'API AutoML incluent votre ID de projet. La variable d’environnementPROJECT_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,,

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
pour 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