Partage via


Démarrage rapide : Créer un projet de classification d’images avec la bibliothèque de client Custom Vision ou l’API REST

Découvrez comment bien démarrer avec la bibliothèque de client Custom Vision pour .NET. Suivez les étapes ci-après pour installer le package et essayer l’exemple de code afin de créer un modèle de classification d’images. Vous allez créer un projet, ajouter des étiquettes, entraîner le projet et utiliser l’URL de point de terminaison de prédiction du projet pour le tester programmatiquement. Utilisez cet exemple comme modèle pour générer votre propre application de reconnaissance d’image.

Notes

Si vous souhaitez créer et entraîner un modèle de classification sans écrire de code, consultez à la place les instructions basées sur le navigateur.

Documentation de référence | Code source de la bibliothèque (entraînement) (prédiction) | Package (NuGet) (entraînement) (prédiction) | Exemples

Prérequis

Créer des variables d’environnement

Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Accédez au portail Azure. Si les ressources Custom Vision que vous avez créées dans la section Prérequis ont été déployées, sélectionnez le bouton Accéder à la ressource sous Étapes suivantes. Les clés et le point de terminaison se trouvent dans les pages Clé et point de terminaison des ressources, sous Gestion des ressources. Vous devez obtenir les clés pour vos ressources de formation et de prévision, ainsi que les points de terminaison API.

L’ID de ressource de prévision est disponible dans le portail Microsoft Azure, sous l’onglet Propriétés de la ressource, listé comme ID de ressource.

Conseil

Vous utilisez également https://www.customvision.ai/ pour obtenir ces valeurs. Après vous être connecté, sélectionnez l’icône Paramètres en haut à droite. Dans les pages de Paramètres, vous pouvez visualiser l’ensemble des clés, ID de ressource et points de terminaison.

Pour définir les variables d’environnement, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  • Pour définir la variable d’environnement VISION_TRAINING KEY, remplacez your-training-key par l’une des clés de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_TRAINING_ENDPOINT, remplacez your-training-endpoint par le point de terminaison de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_PREDICTION_KEY, remplacez your-prediction-key par l’une des clés de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_ENDPOINT, remplacez your-prediction-endpoint par le point de terminaison de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_RESOURCE_ID, remplacez your-resource-id par l’ID de votre ressource de prévision.

Important

Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.

Pour plus d’informations sur la sécurité des services IA, consultez Authentifier les demandes auprès d’Azure AI services.

setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui les liront, y compris la fenêtre de console.

Configuration

Créer une application C#

À l’aide de Visual Studio, créez une application .NET Core.

Installer la bibliothèque de client

Une fois que vous avez créé un projet, installez la bibliothèque de client en cliquant avec le bouton droit sur la solution de projet dans l’Explorateur de solutions et en sélectionnant Gérer les packages NuGet. Dans le gestionnaire de package qui s’ouvre, sélectionnez Parcourir, cochez Inclure la préversion et recherchez Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training et Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. Sélectionnez la version la plus récente, puis Installer.

Conseil

Vous voulez voir l’intégralité du fichier de code de démarrage rapide à la fois ? Vous le trouverez sur GitHub, qui contient les exemples de code utilisés dans ce guide de démarrage rapide.

À partir du répertoire du projet, ouvrez le fichier program.cs et ajoutez ce qui suit en utilisant les directives using suivantes :

using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction;
using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training;
using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;

Dans la méthode Principal de l’application, créez des variables qui récupèrent les clés et les points de terminaison de votre ressource à partir de variables d’environnement. Vous allez également déclarer des objets de base à utiliser ultérieurement.

// Retrieve the environment variables for your credentials:
private static string trainingEndpoint = Environment.GetEnvironmentVariable("VISION_TRAINING_ENDPOINT");

private static string trainingKey = Environment.GetEnvironmentVariable("VISION_TRAINING_KEY");
private static string predictionEndpoint = Environment.GetEnvironmentVariable("VISION_PREDICTION_ENDPOINT");
private static string predictionKey = Environment.GetEnvironmentVariable("VISION_PREDICTION_KEY");

private static string predictionResourceId = Environment.GetEnvironmentVariable("VISION_PREDICTION_RESOURCE_ID");

private static List<string> hemlockImages;
private static List<string> japaneseCherryImages;
private static Tag hemlockTag;
private static Tag japaneseCherryTag;
private static Iteration iteration;
private static string publishedModelName = "treeClassModel";
private static MemoryStream testImage;

Dans la méthode Main de l’application, ajoutez des appels pour les méthodes utilisées dans ce guide de démarrage rapide. Vous les implémenterez ultérieurement.

CustomVisionTrainingClient trainingApi = AuthenticateTraining(trainingEndpoint, trainingKey);
CustomVisionPredictionClient predictionApi = AuthenticatePrediction(predictionEndpoint, predictionKey);

Project project = CreateProject(trainingApi);
AddTags(trainingApi, project);
UploadImages(trainingApi, project);
TrainProject(trainingApi, project);
PublishIteration(trainingApi, project);
TestIteration(predictionApi, project);
DeleteProject(trainingApi, project);

Authentifier le client

Dans une nouvelle méthode, instanciez les clients d’entraînement et de prédiction à l’aide de votre point de terminaison et de vos clés.

private static CustomVisionTrainingClient AuthenticateTraining(string endpoint, string trainingKey)
{
    // Create the Api, passing in the training key
    CustomVisionTrainingClient trainingApi = new CustomVisionTrainingClient(new Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training.ApiKeyServiceClientCredentials(trainingKey))
    {
        Endpoint = endpoint
    };
    return trainingApi;
}
private static CustomVisionPredictionClient AuthenticatePrediction(string endpoint, string predictionKey)
{
    // Create a prediction endpoint, passing in the obtained prediction key
    CustomVisionPredictionClient predictionApi = new CustomVisionPredictionClient(new Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction.ApiKeyServiceClientCredentials(predictionKey))
    {
        Endpoint = endpoint
    };
    return predictionApi;
}

Créer un projet de service Custom Vision

Le bloc de code suivant crée un projet de classification d’images. Le projet créé apparaît sur le site web Custom Vision. Consultez la méthode CreateProject pour spécifier d’autres options quand vous créez votre projet (procédure expliquée dans le guide du portail web Créer un classifieur).

private static Project CreateProject(CustomVisionTrainingClient trainingApi)
{
    // Create a new project
    Console.WriteLine("Creating new project:");
    return trainingApi.CreateProject("My New Project");
}

Ajouter des balises au projet

Cette méthode définit les étiquettes sur lesquelles vous allez effectuer l’entraînement du modèle.

private static void AddTags(CustomVisionTrainingClient trainingApi, Project project)
{
    // Make two tags in the new project
    hemlockTag = trainingApi.CreateTag(project.Id, "Hemlock");
    japaneseCherryTag = trainingApi.CreateTag(project.Id, "Japanese Cherry");
}

Charger et étiqueter des images

Tout d’abord, téléchargez les exemples d’images pour ce projet. Enregistrez le contenu du dossier des exemples d’images sur votre appareil local.

Définissez ensuite une méthode d’assistance pour charger les images dans ce répertoire. Vous devrez peut-être modifier l’argument GetFiles afin qu’il pointe vers l’emplacement où vos images sont enregistrées.

private static void LoadImagesFromDisk()
{
    // this loads the images to be uploaded from disk into memory
    hemlockImages = Directory.GetFiles(Path.Combine("Images", "Hemlock")).ToList();
    japaneseCherryImages = Directory.GetFiles(Path.Combine("Images", "Japanese_Cherry")).ToList();
    testImage = new MemoryStream(File.ReadAllBytes(Path.Combine("Images", "Test", "test_image.jpg")));
}

Ensuite, définissez une méthode pour charger les images, en appliquant des étiquettes en fonction de leur emplacement dans le dossier (les images sont déjà triées). Vous pouvez charger et étiqueter des images de manière itérative, ou dans un lot (jusqu’à 64 par lot). Cet extrait de code illustre les deux procédés.

private static void UploadImages(CustomVisionTrainingClient trainingApi, Project project)
{
    // Add some images to the tags
    Console.WriteLine("\tUploading images");
    LoadImagesFromDisk();

    // Images can be uploaded one at a time
    foreach (var image in hemlockImages)
    {
        using (var stream = new MemoryStream(File.ReadAllBytes(image)))
        {
            trainingApi.CreateImagesFromData(project.Id, stream, new List<Guid>() { hemlockTag.Id });
        }
    }

    // Or uploaded in a single batch 
    var imageFiles = japaneseCherryImages.Select(img => new ImageFileCreateEntry(Path.GetFileName(img), File.ReadAllBytes(img))).ToList();
    trainingApi.CreateImagesFromFiles(project.Id, new ImageFileCreateBatch(imageFiles, new List<Guid>() { japaneseCherryTag.Id }));

}

Entraîner le projet

Cette méthode crée la première itération d’entraînement dans le projet. Elle interroge le service jusqu’à la fin de l’entraînement.

private static void TrainProject(CustomVisionTrainingClient trainingApi, Project project)
{
    // Now there are images with tags start training the project
    Console.WriteLine("\tTraining");
    iteration = trainingApi.TrainProject(project.Id);

    // The returned iteration will be in progress, and can be queried periodically to see when it has completed
    while (iteration.Status == "Training")
    {
        Console.WriteLine("Waiting 10 seconds for training to complete...");
        Thread.Sleep(10000);

        // Re-query the iteration to get it's updated status
        iteration = trainingApi.GetIteration(project.Id, iteration.Id);
    }
}

Conseil

Entraîner avec des étiquettes sélectionnées

Vous pouvez, si vous le souhaitez, effectuer l’entraînement sur un sous-ensemble de vos étiquettes appliquées. Vous pouvez procéder de la sorte si vous n’avez pas encore suffisamment appliqué certaines étiquettes, contrairement à d’autres. Dans l’appel TrainProject, utilisez le paramètre trainingParameters. Construisez un TrainingParameters et définissez sa propriété SelectedTags sur une liste d’ID des étiquettes que vous souhaitez utiliser. Le modèle effectue l’entraînement pour ne reconnaître que les étiquettes présentes dans cette liste.

Publier l’itération actuelle

Cette méthode rend l’itération actuelle du modèle disponible pour l’interrogation. Vous pouvez utiliser le nom du modèle comme référence pour envoyer des demandes de prédiction. Vous devez entrer votre propre valeur pour predictionResourceId. L’ID de ressource de prédiction est disponible sous l’onglet Propriétés de la ressource dans le portail Azure, listé comme ID de ressource.

private static void PublishIteration(CustomVisionTrainingClient trainingApi, Project project)
{
    trainingApi.PublishIteration(project.Id, iteration.Id, publishedModelName, predictionResourceId);
    Console.WriteLine("Done!\n");

    // Now there is a trained endpoint, it can be used to make a prediction
}

Tester le point de terminaison de prédiction

Cette partie du script charge l’image test, interroge le point de terminaison du modèle, et renvoie des données de prédiction à la console.

private static void TestIteration(CustomVisionPredictionClient predictionApi, Project project)
{

    // Make a prediction against the new project
    Console.WriteLine("Making a prediction:");
    var result = predictionApi.ClassifyImage(project.Id, publishedModelName, testImage);

    // Loop over each prediction and write out the results
    foreach (var c in result.Predictions)
    {
        Console.WriteLine($"\t{c.TagName}: {c.Probability:P1}");
    }
}

Exécution de l'application

Exécutez l’application en cliquant sur le bouton Déboguer en haut de la fenêtre de l’IDE.

Lors de l’exécution de l’application, une fenêtre de console s’ouvre et la sortie suivante est écrite :

Creating new project:
        Uploading images
        Training
Done!

Making a prediction:
        Hemlock: 95.0%
        Japanese Cherry: 0.0%

Vous pouvez ensuite vérifier que l’image test (trouvée dans Images/Test/) est balisée de façon appropriée. Pour quitter l’application, appuyez sur une touche. Vous pouvez aussi revenir sur le site web Custom Vision et consulter l’état actuel de votre nouveau projet.

Nettoyer les ressources

Si vous voulez implémenter votre projet de classification d’images (ou essayer un projet de détection d’objet), supprimez le projet d’identification d’arbre de cet exemple. Avec un abonnement gratuit, vous pouvez avoir deux projets Custom Vision.

Sur le site web Custom Vision, accédez à Projects (Projets) puis sélectionnez la corbeille sous My New Project (Nouveau projet).

Capture d’écran d’un panneau étiqueté Mon Nouveau Projet avec une icône de corbeille.

Étapes suivantes

Vous avez à présent effectué toutes les étapes du processus de classification d’images dans le code. Cet exemple exécute une seule itération d’entraînement, mais vous aurez souvent besoin d’entraîner et de tester votre modèle à plusieurs reprises pour le rendre plus précis.

Ce guide fournit des instructions et un exemple de code pour vous aider à commencer à utiliser la bibliothèque de client Custom Vision pour Go afin de générer un modèle de classification d’images. Vous allez créer un projet, ajouter des étiquettes, entraîner le projet et utiliser l’URL de point de terminaison de prédiction du projet pour le tester programmatiquement. Utilisez cet exemple comme modèle pour générer votre propre application de reconnaissance d’image.

Notes

Si vous souhaitez créer et entraîner un modèle de classification sans écrire de code, consultez à la place les instructions basées sur le navigateur.

La bibliothèque de client Custom Vision pour Go vous permet d’effectuer les tâches suivantes :

  • Créer un projet de service Custom Vision
  • Ajouter des balises au projet
  • Charger et étiqueter des images
  • Entraîner le projet
  • Publier l’itération actuelle
  • Tester le point de terminaison de prédiction

Documentation de référence (entraînement) (prédiction)

Prérequis

Créer des variables d’environnement

Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Accédez au portail Azure. Si les ressources Custom Vision que vous avez créées dans la section Prérequis ont été déployées, sélectionnez le bouton Accéder à la ressource sous Étapes suivantes. Les clés et le point de terminaison se trouvent dans les pages Clé et point de terminaison des ressources, sous Gestion des ressources. Vous devez obtenir les clés pour vos ressources de formation et de prévision, ainsi que les points de terminaison API.

L’ID de ressource de prévision est disponible dans le portail Microsoft Azure, sous l’onglet Propriétés de la ressource, listé comme ID de ressource.

Conseil

Vous utilisez également https://www.customvision.ai/ pour obtenir ces valeurs. Après vous être connecté, sélectionnez l’icône Paramètres en haut à droite. Dans les pages de Paramètres, vous pouvez visualiser l’ensemble des clés, ID de ressource et points de terminaison.

Pour définir les variables d’environnement, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  • Pour définir la variable d’environnement VISION_TRAINING KEY, remplacez your-training-key par l’une des clés de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_TRAINING_ENDPOINT, remplacez your-training-endpoint par le point de terminaison de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_PREDICTION_KEY, remplacez your-prediction-key par l’une des clés de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_ENDPOINT, remplacez your-prediction-endpoint par le point de terminaison de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_RESOURCE_ID, remplacez your-resource-id par l’ID de votre ressource de prévision.

Important

Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.

Pour plus d’informations sur la sécurité des services IA, consultez Authentifier les demandes auprès d’Azure AI services.

setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui les liront, y compris la fenêtre de console.

Configuration

Installer la bibliothèque de client Custom Vision

Pour écrire une application d’analyse d’image avec Custom Vision pour Go, vous avez besoin de la bibliothèque de client du service Custom Vision. Exécutez la commande suivante dans PowerShell :

go get -u github.com/Azure/azure-sdk-for-go/...

Ou, si vous utilisez dep, au sein de votre dépôt, exécutez :

dep ensure -add github.com/Azure/azure-sdk-for-go

Obtenir l’exemple d’images

Cet exemple utilise les images du référentiel d’exemples du kit de développement logiciel (SDK) Python d’Azure AI services sur GitHub. Clonez ou téléchargez ce référentiel sur votre environnement de développement. Mémorisez l’emplacement du dossier pour une prochaine étape.

Créer le projet Custom Vision

Créez un fichier nommé sample.go dans le répertoire de projet de votre choix et ouvrez-le dans votre éditeur de code préféré.

Pour créer un nouveau projet Service Vision personnalisée, ajoutez le code suivant à votre script.

Consultez la méthode CreateProject pour spécifier d’autres options quand vous créez votre projet (procédure expliquée dans le guide du portail web Créer un classifieur).

import(
    "context"
    "bytes"
    "fmt"
    "io/ioutil"
    "path"
    "log"
    "time"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v3.0/customvision/training"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v3.0/customvision/prediction"
)

var (
    training_key string = os.Getenv("VISION_TRAINING_KEY")
    prediction_key string = os.Getenv("VISION_PREDICTION_KEY")
    prediction_resource_id = os.Getenv("VISION_PREDICTION_RESOURCE_ID")
    endpoint string = os.Getenv("VISION_ENDPOINT")    

    project_name string = "Go Sample Project"
    iteration_publish_name = "classifyModel"
    sampleDataDirectory = "<path to sample images>"
)

func main() {
    fmt.Println("Creating project...")

    ctx = context.Background()

    trainer := training.New(training_key, endpoint)

    project, err := trainer.CreateProject(ctx, project_name, "sample project", nil, string(training.Multilabel))
    if (err != nil) {
        log.Fatal(err)
    }

Créer des balises dans un projet

Pour créer des balises de classification dans votre projet, ajoutez le code suivant à la fin du fichier sample.go :

// Make two tags in the new project
hemlockTag, _ := trainer.CreateTag(ctx, *project.ID, "Hemlock", "Hemlock tree tag", string(training.Regular))
cherryTag, _ := trainer.CreateTag(ctx, *project.ID, "Japanese Cherry", "Japanese cherry tree tag", string(training.Regular))

Charger et étiqueter des images

Pour ajouter les exemples d’images au projet, insérez le code suivant après la création de mots clés. Ce code charge chaque image avec la balise correspondante. Vous pouvez charger jusqu’à 64 images dans un même lot.

Notes

Vous devez changer le chemin des images, selon l’emplacement où vous avez préalablement téléchargé l’exemple de projet du kit de développement logiciel (SDK) Go d’Azure AI services.

fmt.Println("Adding images...")
japaneseCherryImages, err := ioutil.ReadDir(path.Join(sampleDataDirectory, "Japanese Cherry"))
if err != nil {
    fmt.Println("Error finding Sample images")
}

hemLockImages, err := ioutil.ReadDir(path.Join(sampleDataDirectory, "Hemlock"))
if err != nil {
    fmt.Println("Error finding Sample images")
}

for _, file := range hemLockImages {
    imageFile, _ := ioutil.ReadFile(path.Join(sampleDataDirectory, "Hemlock", file.Name()))
    imageData := ioutil.NopCloser(bytes.NewReader(imageFile))

    trainer.CreateImagesFromData(ctx, *project.ID, imageData, []string{ hemlockTag.ID.String() })
}

for _, file := range japaneseCherryImages {
    imageFile, _ := ioutil.ReadFile(path.Join(sampleDataDirectory, "Japanese Cherry", file.Name()))
    imageData := ioutil.NopCloser(bytes.NewReader(imageFile))
    trainer.CreateImagesFromData(ctx, *project.ID, imageData, []string{ cherryTag.ID.String() })
}

Entraîner et publier le projet

Ce code crée la première itération du modèle de prédiction, puis publie cette itération sur le point de terminaison de prédiction. Le nom donné à l’itération publiée peut être utilisé pour envoyer des requêtes de prédiction. Les itérations ne sont pas disponibles sur le point de terminaison de prédiction tant qu’elles n’ont pas été publiées.

fmt.Println("Training...")
iteration, _ := trainer.TrainProject(ctx, *project.ID)
for {
    if *iteration.Status != "Training" {
        break
    }
    fmt.Println("Training status: " + *iteration.Status)
    time.Sleep(1 * time.Second)
    iteration, _ = trainer.GetIteration(ctx, *project.ID, *iteration.ID)
}
fmt.Println("Training status: " + *iteration.Status)

trainer.PublishIteration(ctx, *project.ID, *iteration.ID, iteration_publish_name, prediction_resource_id))

Utiliser le point de terminaison de prédiction

Pour envoyer une image au point de terminaison de prédiction et récupérer la prédiction, ajoutez le code suivant à la fin du fichier :

    fmt.Println("Predicting...")
    predictor := prediction.New(prediction_key, endpoint)

    testImageData, _ := ioutil.ReadFile(path.Join(sampleDataDirectory, "Test", "test_image.jpg"))
    results, _ := predictor.ClassifyImage(ctx, *project.ID, iteration_publish_name, ioutil.NopCloser(bytes.NewReader(testImageData)), "")

    for _, prediction := range *results.Predictions    {
        fmt.Printf("\t%s: %.2f%%", *prediction.TagName, *prediction.Probability * 100)
        fmt.Println("")
    }
}

Exécution de l'application

Exécutez sample.go.

go run sample.go

Le résultat de l’application ressemble au texte suivant :

Creating project...
Adding images...
Training...
Training status: Training
Training status: Training
Training status: Training
Training status: Completed
Done!
        Hemlock: 93.53%
        Japanese Cherry: 0.01%

Vous pouvez ensuite vérifier que l’image de test (qui se trouve dans <url_image_de_base>/images/Test/) est correctement étiquetée. Vous pouvez aussi revenir sur le site web Custom Vision et consulter l’état actuel de votre nouveau projet.

Nettoyer les ressources

Si vous voulez implémenter votre projet de classification d’images (ou essayer un projet de détection d’objet), supprimez le projet d’identification d’arbre de cet exemple. Avec un abonnement gratuit, vous pouvez avoir deux projets Custom Vision.

Sur le site web Custom Vision, accédez à Projects (Projets) puis sélectionnez la corbeille sous My New Project (Nouveau projet).

Capture d’écran d’un panneau étiqueté Mon Nouveau Projet avec une icône de corbeille.

Étapes suivantes

Vous savez maintenant comment effectuer la détection d’objet dans le code. Cet exemple exécute une seule itération d’entraînement, mais vous aurez souvent besoin d’entraîner et de tester votre modèle à plusieurs reprises pour le rendre plus précis.

Bien démarrer avec l’utilisation de la bibliothèque de client Custom Vision pour Java afin de générer un modèle de classification d’images Suivez les étapes suivantes pour installer le package et essayer l’exemple de code pour les tâches de base. Utilisez cet exemple comme modèle pour générer votre propre application de reconnaissance d’image.

Notes

Si vous souhaitez créer et entraîner un modèle de classification sans écrire de code, consultez à la place les instructions basées sur le navigateur.

Utilisez la bibliothèque de client Custom Vision pour Java pour :

  • Créer un projet de service Custom Vision
  • Ajouter des balises au projet
  • Charger et étiqueter des images
  • Entraîner le projet
  • Publier l’itération actuelle
  • Tester le point de terminaison de prédiction

Documentation de référence | Code source de la bibliothèque (entraînement) (prédiction) | Artefact (Maven) (entraînement) (prédiction) | Exemples

Prérequis

Créer des variables d’environnement

Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Accédez au portail Azure. Si les ressources Custom Vision que vous avez créées dans la section Prérequis ont été déployées, sélectionnez le bouton Accéder à la ressource sous Étapes suivantes. Les clés et le point de terminaison se trouvent dans les pages Clé et point de terminaison des ressources, sous Gestion des ressources. Vous devez obtenir les clés pour vos ressources de formation et de prévision, ainsi que les points de terminaison API.

L’ID de ressource de prévision est disponible dans le portail Microsoft Azure, sous l’onglet Propriétés de la ressource, listé comme ID de ressource.

Conseil

Vous utilisez également https://www.customvision.ai/ pour obtenir ces valeurs. Après vous être connecté, sélectionnez l’icône Paramètres en haut à droite. Dans les pages de Paramètres, vous pouvez visualiser l’ensemble des clés, ID de ressource et points de terminaison.

Pour définir les variables d’environnement, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  • Pour définir la variable d’environnement VISION_TRAINING KEY, remplacez your-training-key par l’une des clés de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_TRAINING_ENDPOINT, remplacez your-training-endpoint par le point de terminaison de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_PREDICTION_KEY, remplacez your-prediction-key par l’une des clés de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_ENDPOINT, remplacez your-prediction-endpoint par le point de terminaison de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_RESOURCE_ID, remplacez your-resource-id par l’ID de votre ressource de prévision.

Important

Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.

Pour plus d’informations sur la sécurité des services IA, consultez Authentifier les demandes auprès d’Azure AI services.

setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui les liront, y compris la fenêtre de console.

Configuration

Créer un projet Gradle

Dans une fenêtre de console (telle que cmd, PowerShell ou bash), créez un répertoire pour votre application et accédez-y.

mkdir myapp && cd myapp

Exécutez la commande gradle init à partir de votre répertoire de travail. Cette commande crée des fichiers de build essentiels pour Gradle, notamment build.gradle.kts, qui est utilisé au moment de l’exécution pour créer et configurer votre application.

gradle init --type basic

Quand vous êtes invité à choisir un DSL, sélectionnez Kotlin.

Installer la bibliothèque de client

Recherchez build.gradle.kts et ouvrez-le avec votre IDE ou votre éditeur de texte habituel. Copiez-y ensuite la configuration de build suivante. Cette configuration définit le projet en tant qu’application Java dont le point d’entrée est la classe CustomVisionQuickstart. Elle importe les bibliothèques Custom Vision.

plugins {
    java
    application
}
application { 
    mainClassName = "CustomVisionQuickstart"
}
repositories {
    mavenCentral()
}
dependencies {
    compile(group = "com.azure", name = "azure-cognitiveservices-customvision-training", version = "1.1.0-preview.2")
    compile(group = "com.azure", name = "azure-cognitiveservices-customvision-prediction", version = "1.1.0-preview.2")
}

Créer un fichier Java

Dans votre répertoire de travail, exécutez la commande suivante pour créer un dossier de projet source :

mkdir -p src/main/java

Accédez au nouveau dossier et créez le fichier CustomVisionQuickstart.java. Ouvrez-le dans votre éditeur ou IDE habituel et ajoutez les instructions import suivantes :

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import com.google.common.io.ByteStreams;

import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Classifier;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Domain;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.DomainType;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.ImageFileCreateBatch;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.ImageFileCreateEntry;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Iteration;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Project;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Region;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.TrainProjectOptionalParameter;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.CustomVisionTrainingClient;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.Trainings;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.CustomVisionTrainingManager;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.models.ImagePrediction;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.models.Prediction;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.CustomVisionPredictionClient;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.CustomVisionPredictionManager;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Tag;

Conseil

Vous voulez voir l’intégralité du fichier de code de démarrage rapide à la fois ? Vous le trouverez sur GitHub, qui contient les exemples de code utilisés dans ce guide de démarrage rapide.

Dans la classe CustomVisionQuickstart de l’application, créez des variables qui récupèrent les clés et les points de terminaison de votre ressource à partir de variables d’environnement.

// retrieve environment variables
final static String trainingApiKey = System.getenv("VISION_TRAINING_KEY");
final static String trainingEndpoint = System.getenv("VISION_TRAINING_ENDPOINT");
final static String predictionApiKey = System.getenv("VISION_PREDICTION_KEY");
final static String predictionEndpoint = System.getenv("VISION_PREDICTION_ENDPOINT");
final static String predictionResourceId = System.getenv("VISION_PREDICTION_RESOURCE_ID");

Important

Accédez au portail Azure. Si les ressources Custom Vision que vous avez créées dans la section Prérequis ont été déployées, sélectionnez le bouton Accéder à la ressource sous Étapes suivantes. La clé et le point de terminaison se trouvent dans les pages Clé et point de terminaison des ressources. Vous devez obtenir les clés pour vos ressources d’entraînement et de prédiction, ainsi que le point de terminaison d’API pour votre ressource d’entraînement.

L’ID de ressource de prédiction est disponible sous l’onglet Propriétés de la ressource dans le portail Azure, listé comme ID de ressource.

Important

N’oubliez pas de supprimer les clés de votre code une fois que vous avez terminé, et ne les postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.

Dans la méthode main de l’application, ajoutez des appels pour les méthodes utilisées dans ce guide de démarrage rapide. Vous les définirez plus tard.

Project project = createProject(trainClient);
addTags(trainClient, project);
uploadImages(trainClient, project);
trainProject(trainClient, project);
publishIteration(trainClient, project);
testProject(predictor, project);

Modèle objet

Les classes et interfaces suivantes gèrent certaines des principales fonctionnalités de la bibliothèque de client Custom Vision pour Java.

Name Description
CustomVisionTrainingClient Cette classe gère la création, l’entraînement et la publication de vos modèles.
CustomVisionPredictionClient Cette classe gère l’interrogation de vos modèles pour les prédictions de classification d’images.
ImagePrediction Cette classe définit une prédiction unique sur une seule image. Elle comprend des propriétés pour l’ID et le nom de l’objet ainsi qu’un score de confiance.

Exemples de code

Ces extraits de code vous montrent comment effectuer les tâches suivantes avec la bibliothèque de client Custom Vision pour Java :

Authentifier le client

Dans votre méthode main, instanciez les clients d’entraînement et de prédiction à l’aide de votre point de terminaison et de vos clés.

// Authenticate
CustomVisionTrainingClient trainClient = CustomVisionTrainingManager
        .authenticate(trainingEndpoint, trainingApiKey)
        .withEndpoint(trainingEndpoint);
CustomVisionPredictionClient predictor = CustomVisionPredictionManager
        .authenticate(predictionEndpoint, predictionApiKey)
        .withEndpoint(predictionEndpoint);

Créer un projet Custom Vision

T## Créer un projet Custom Vision

La méthode suivante crée un projet de classification d’images. Le projet créé apparaît sur le site web Custom Vision sur lequel vous êtes allé plus tôt. Consultez les surcharges de méthode CreateProject pour spécifier d’autres options quand vous créez votre projet (procédure expliquée dans le guide du portail web Build a detector [Créer un détecteur]).

public static Project createProject(CustomVisionTrainingClient trainClient) {
    System.out.println("ImageClassification Sample");
    Trainings trainer = trainClient.trainings();

    System.out.println("Creating project...");
    Project project = trainer.createProject().withName("Sample Java Project").execute();

    return project;
}

Ajouter des mots clés à votre projet

Cette méthode définit les étiquettes sur lesquelles vous allez effectuer l’entraînement du modèle.

public static void addTags(CustomVisionTrainingClient trainClient, Project project) {

    Trainings trainer = trainClient.trainings();

    // create hemlock tag
    Tag hemlockTag = trainer.createTag().withProjectId(project.id()).withName("Hemlock").execute();
    // create cherry tag
    Tag cherryTag = trainer.createTag().withProjectId(project.id()).withName("Japanese Cherry").execute();
}

Charger et étiqueter des images

Tout d’abord, téléchargez les exemples d’images pour ce projet. Enregistrez le contenu du dossier des exemples d’images sur votre appareil local.

public static void uploadImages(CustomVisionTrainingClient trainClient, Project project) {
    Trainings trainer = trainClient.trainings();
    System.out.println("Adding images...");
    for (int i = 1; i <= 10; i++) {
        String fileName = "hemlock_" + i + ".jpg";
        byte[] contents = GetImage("/Hemlock", fileName);
        AddImageToProject(trainer, project, fileName, contents, hemlockTag.id(), null);
    }

    for (int i = 1; i <= 10; i++) {
        String fileName = "japanese_cherry_" + i + ".jpg";
        byte[] contents = GetImage("/Japanese_Cherry", fileName);
        AddImageToProject(trainer, project, fileName, contents, cherryTag.id(), null);
    }
}

L’extrait de code précédent utilise deux fonctions d’assistance qui récupèrent les images comme flux de ressources et les charge dans le service (vous pouvez charger jusqu’à 64 images dans un même lot).

private static void AddImageToProject(Trainings trainer, Project project, String fileName, byte[] contents,
        UUID tag, double[] regionValues) {
    System.out.println("Adding image: " + fileName);
    ImageFileCreateEntry file = new ImageFileCreateEntry().withName(fileName).withContents(contents);

    ImageFileCreateBatch batch = new ImageFileCreateBatch().withImages(Collections.singletonList(file));

    // If Optional region is specified, tack it on and place the tag there,
    // otherwise
    // add it to the batch.
    if (regionValues != null) {
        Region region = new Region().withTagId(tag).withLeft(regionValues[0]).withTop(regionValues[1])
                .withWidth(regionValues[2]).withHeight(regionValues[3]);
        file = file.withRegions(Collections.singletonList(region));
    } else {
        batch = batch.withTagIds(Collections.singletonList(tag));
    }

    trainer.createImagesFromFiles(project.id(), batch);
}

private static byte[] GetImage(String folder, String fileName) {
    try {
        return ByteStreams.toByteArray(CustomVisionSamples.class.getResourceAsStream(folder + "/" + fileName));
    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    return null;
}

Entraîner le projet

Cette méthode crée la première itération d’entraînement dans le projet. Elle interroge le service jusqu’à la fin de l’entraînement.

public static void trainProject(CustomVisionTrainingClient trainClient, Project project) {
    System.out.println("Training...");
    Trainings trainer = trainClient.trainings();

    Iteration iteration = trainer.trainProject(project.id(), new TrainProjectOptionalParameter());

    while (iteration.status().equals("Training")) {
        System.out.println("Training Status: " + iteration.status());
        Thread.sleep(1000);
        iteration = trainer.getIteration(project.id(), iteration.id());
    }
    System.out.println("Training Status: " + iteration.status());
}

Publier l’itération actuelle

Cette méthode rend l’itération actuelle du modèle disponible pour l’interrogation. Vous pouvez utiliser le nom du modèle comme référence pour envoyer des demandes de prédiction. Vous devez entrer votre propre valeur pour predictionResourceId. L’ID de ressource de prédiction est disponible sous l’onglet Propriétés de la ressource dans le portail Azure, listé comme ID de ressource.

public static String publishIteration(CustomVisionTrainingClient trainClient, Project project) {
    Trainings trainer = trainClient.trainings();
    // The iteration is now trained. Publish it to the prediction endpoint.
    String publishedModelName = "myModel";
    trainer.publishIteration(project.id(), iteration.id(), publishedModelName, predictionResourceId);
}

Tester le point de terminaison de prédiction

Cette méthode charge l’image test, interroge le point de terminaison du modèle et renvoie des données de prédiction à la console.

// load test image
public static void testProject(CustomVisionPredictionClient predictor, Project project) {

    byte[] testImage = GetImage("/Test", "test_image.jpg");

    // predict
    ImagePrediction results = predictor.predictions().classifyImage().withProjectId(project.id())
            .withPublishedName(publishedModelName).withImageData(testImage).execute();

    for (Prediction prediction : results.predictions()) {
        System.out.println(String.format("\t%s: %.2f%%", prediction.tagName(), prediction.probability() * 100.0f));
    }
}

Exécution de l'application

Vous pouvez générer l’application avec :

gradle build

Exécutez l’application avec la commande gradle run :

gradle run

Nettoyer les ressources

Si vous souhaitez nettoyer et supprimer un abonnement Azure AI services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.

Si vous voulez implémenter votre projet de classification d’images (ou essayer un projet de détection d’objet), supprimez le projet d’identification d’arbre de cet exemple. Avec un abonnement gratuit, vous pouvez avoir deux projets Custom Vision.

Sur le site web Custom Vision, accédez à Projects (Projets) puis sélectionnez la corbeille sous My New Project (Nouveau projet).

Capture d’écran d’un panneau étiqueté Mon Nouveau Projet avec une icône de corbeille.

Étapes suivantes

Vous savez maintenant comment effectuer la classification d’images dans le code. Cet exemple exécute une seule itération d’entraînement, mais vous aurez souvent besoin d’entraîner et de tester votre modèle à plusieurs reprises pour le rendre plus précis.

  • Qu’est-ce que Custom Vision ?
  • Le code source de cet exemple est disponible sur GitHub.

Ce guide fournit des instructions et un exemple de code pour vous aider à commencer à utiliser la bibliothèque de client Custom Vision pour Node.js afin de générer un modèle de classification d’images. Vous allez créer un projet, ajouter des étiquettes, entraîner le projet et utiliser l’URL de point de terminaison de prédiction du projet pour le tester programmatiquement. Utilisez cet exemple comme modèle pour générer votre propre application de reconnaissance d’image.

Notes

Si vous souhaitez créer et entraîner un modèle de classification sans écrire de code, consultez à la place les instructions basées sur le navigateur.

Utilisez la bibliothèque de client Custom Vision pour .NET pour :

  • Créer un projet de service Custom Vision
  • Ajouter des balises au projet
  • Charger et étiqueter des images
  • Entraîner le projet
  • Publier l’itération actuelle
  • Tester le point de terminaison de prédiction

Documentation de référence (entraînement) (prédiction) | Package (npm) (entraînement) (prédiction) | Échantillons

Prérequis

  • Abonnement Azure - En créer un gratuitement
  • Version actuelle de Node.js
  • Une fois votre abonnement Azure obtenu, permet de créer une ressource Custom Vision dans le portail Microsoft Azure pour créer une ressource de formation et de prévision.
    • Vous pouvez utiliser le niveau tarifaire Gratuit (F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.

Créer des variables d’environnement

Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Accédez au portail Azure. Si les ressources Custom Vision que vous avez créées dans la section Prérequis ont été déployées, sélectionnez le bouton Accéder à la ressource sous Étapes suivantes. Les clés et le point de terminaison se trouvent dans les pages Clé et point de terminaison des ressources, sous Gestion des ressources. Vous devez obtenir les clés pour vos ressources de formation et de prévision, ainsi que les points de terminaison API.

L’ID de ressource de prévision est disponible dans le portail Microsoft Azure, sous l’onglet Propriétés de la ressource, listé comme ID de ressource.

Conseil

Vous utilisez également https://www.customvision.ai/ pour obtenir ces valeurs. Après vous être connecté, sélectionnez l’icône Paramètres en haut à droite. Dans les pages de Paramètres, vous pouvez visualiser l’ensemble des clés, ID de ressource et points de terminaison.

Pour définir les variables d’environnement, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  • Pour définir la variable d’environnement VISION_TRAINING KEY, remplacez your-training-key par l’une des clés de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_TRAINING_ENDPOINT, remplacez your-training-endpoint par le point de terminaison de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_PREDICTION_KEY, remplacez your-prediction-key par l’une des clés de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_ENDPOINT, remplacez your-prediction-endpoint par le point de terminaison de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_RESOURCE_ID, remplacez your-resource-id par l’ID de votre ressource de prévision.

Important

Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.

Pour plus d’informations sur la sécurité des services IA, consultez Authentifier les demandes auprès d’Azure AI services.

setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui les liront, y compris la fenêtre de console.

Configuration

Création d’une application Node.js

Dans une fenêtre de console (telle que cmd, PowerShell ou bash), créez un répertoire pour votre application et accédez-y.

mkdir myapp && cd myapp

Exécutez la commande npm init pour créer une application de nœud avec un fichier package.json.

npm init

Installer la bibliothèque de client

Pour écrire une application d’analyse d’image avec Custom Vision pour Node.js, vous avez besoin des packages NPM Custom Vision. Pour les installer, exécutez la commande suivante dans PowerShell :

npm install @azure/cognitiveservices-customvision-training
npm install @azure/cognitiveservices-customvision-prediction

Le fichier package.json de votre application sera mis à jour avec les dépendances.

Créez un fichier nommé index.js et importez les bibliothèques suivantes :

const util = require('util');
const fs = require('fs');
const TrainingApi = require("@azure/cognitiveservices-customvision-training");
const PredictionApi = require("@azure/cognitiveservices-customvision-prediction");
const msRest = require("@azure/ms-rest-js");

Conseil

Vous voulez voir l’intégralité du fichier de code de démarrage rapide à la fois ? Vous le trouverez sur GitHub, qui contient les exemples de code utilisés dans ce guide de démarrage rapide.

Créez des variables pour le point de terminaison et les clés Azure de votre ressource.

// retrieve environment variables
const trainingKey = process.env["VISION_TRAINING_KEY"];
const trainingEndpoint = process.env["VISION_TRAINING_ENDPOINT"];

const predictionKey = process.env["VISION_PREDICTION_KEY"];
const predictionResourceId = process.env["VISION_PREDICTION_RESOURCE_ID"];
const predictionEndpoint = process.env["VISION_PREDICTION_ENDPOINT"];

Ajoutez également des champs pour le nom de votre projet et un paramètre de délai d’attente pour les appels asynchrones.

const publishIterationName = "classifyModel";
const setTimeoutPromise = util.promisify(setTimeout);

Modèle objet

Nom Description
TrainingAPIClient Cette classe gère la création, l’entraînement et la publication de vos modèles.
PredictionAPIClient Cette classe gère l’interrogation de vos modèles pour les prédictions de classification d’images.
Prédiction Cette interface définit une prédiction unique sur une seule image. Elle comprend des propriétés pour l’ID et le nom de l’objet ainsi qu’un score de confiance.

Exemples de code

Ces extraits de code vous montrent comment effectuer les tâches suivantes avec la bibliothèque de client Custom Vision pour JavaScript :

Authentifier le client

Instanciez les objets clients avec le point de terminaison et la clé. Créez un objet ApiKeyCredentials avec votre clé et utilisez-le avec votre point de terminaison pour créer un objet TrainingAPIClient et un objet PredictionAPIClient.

const credentials = new msRest.ApiKeyCredentials({ inHeader: { "Training-key": trainingKey } });
const trainer = new TrainingApi.TrainingAPIClient(credentials, trainingEndpoint);
const predictor_credentials = new msRest.ApiKeyCredentials({ inHeader: { "Prediction-key": predictionKey } });
const predictor = new PredictionApi.PredictionAPIClient(predictor_credentials, predictionEndpoint);

Créer un projet de service Custom Vision

Démarrez une nouvelle fonction destinée à contenir tous vos appels de fonction Custom Vision. Ajoutez le code suivant pour créer un projet de service Custom Vision.

(async () => {
    console.log("Creating project...");
    const sampleProject = await trainer.createProject("Sample Project");

Ajouter des balises au projet

Pour créer des étiquettes de classification dans votre projet, ajoutez le code suivant à votre fonction :

const hemlockTag = await trainer.createTag(sampleProject.id, "Hemlock");
const cherryTag = await trainer.createTag(sampleProject.id, "Japanese Cherry");

Charger et étiqueter des images

Tout d’abord, téléchargez les exemples d’images pour ce projet. Enregistrez le contenu du dossier des exemples d’images sur votre appareil local.

Pour ajouter les exemples d’images au projet, insérez le code suivant après la création de mots clés. Ce code charge chaque image avec la balise correspondante.

const sampleDataRoot = "Images";

console.log("Adding images...");
let fileUploadPromises = [];

const hemlockDir = `${sampleDataRoot}/Hemlock`;
const hemlockFiles = fs.readdirSync(hemlockDir);
hemlockFiles.forEach(file => {
    fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${hemlockDir}/${file}`), { tagIds: [hemlockTag.id] }));
});

const cherryDir = `${sampleDataRoot}/Japanese_Cherry`;
const japaneseCherryFiles = fs.readdirSync(cherryDir);
japaneseCherryFiles.forEach(file => {
    fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${cherryDir}/${file}`), { tagIds: [cherryTag.id] }));
});

await Promise.all(fileUploadPromises);

Important

Vous devez changer le chemin des images (sampleDataRoot), selon l’emplacement où vous avez téléchargé le référentiel d’exemples du kit de développement logiciel (SDK) Python d’Azure AI services.

Entraîner le projet

Ce code crée la première itération du modèle de prédiction.

console.log("Training...");
let trainingIteration = await trainer.trainProject(sampleProject.id);

// Wait for training to complete
console.log("Training started...");
while (trainingIteration.status == "Training") {
    console.log("Training status: " + trainingIteration.status);
    await setTimeoutPromise(1000, null);
    trainingIteration = await trainer.getIteration(sampleProject.id, trainingIteration.id)
}
console.log("Training status: " + trainingIteration.status);

Publier l’itération actuelle

Ce code publie l’itération entraînée sur le point de terminaison de prédiction. Le nom donné à l’itération publiée peut être utilisé pour envoyer des requêtes de prédiction. Les itérations ne sont pas disponibles sur le point de terminaison de prédiction tant qu’elles n’ont pas été publiées.

// Publish the iteration to the end point
await trainer.publishIteration(sampleProject.id, trainingIteration.id, publishIterationName, predictionResourceId);

Tester le point de terminaison de prédiction

Pour envoyer une image au point de terminaison de prédiction et récupérer la prédiction, ajoutez le code suivant à votre fonction.

const testFile = fs.readFileSync(`${sampleDataRoot}/Test/test_image.jpg`);

const results = await predictor.classifyImage(sampleProject.id, publishIterationName, testFile);

// Show results
console.log("Results:");
results.predictions.forEach(predictedResult => {
    console.log(`\t ${predictedResult.tagName}: ${(predictedResult.probability * 100.0).toFixed(2)}%`);
});

Ensuite, fermez votre fonction Custom Vision et appelez-la.

})()

Exécution de l'application

Exécutez l’application avec la commande node de votre fichier de démarrage rapide.

node index.js

Le résultat de l’application ressemble au texte suivant :

Creating project...
Adding images...
Training...
Training started...
Training status: Training
Training status: Training
Training status: Training
Training status: Completed
Results:
         Hemlock: 94.97%
         Japanese Cherry: 0.01%

Vous pouvez ensuite vérifier que l’image de test (qui se trouve dans <sampleDataRoot>/Test/) est correctement étiquetée. Vous pouvez aussi revenir sur le site web Custom Vision et consulter l’état actuel de votre nouveau projet.

Si vous voulez implémenter votre projet de classification d’images (ou essayer un projet de détection d’objet), supprimez le projet d’identification d’arbre de cet exemple. Avec un abonnement gratuit, vous pouvez avoir deux projets Custom Vision.

Sur le site web Custom Vision, accédez à Projects (Projets) puis sélectionnez la corbeille sous My New Project (Nouveau projet).

Capture d’écran d’un panneau étiqueté Mon Nouveau Projet avec une icône de corbeille.

Étapes suivantes

Vous savez maintenant comment effectuer la détection d’objet dans le code. Cet exemple exécute une seule itération d’entraînement, mais vous aurez souvent besoin d’entraîner et de tester votre modèle à plusieurs reprises pour le rendre plus précis.

Bien démarrer avec la bibliothèque de client Custom Vision pour Python Suivez les étapes ci-après pour installer le package et essayer l’exemple de code afin de créer un modèle de classification d’images. Vous allez créer un projet, ajouter des étiquettes, entraîner le projet et utiliser l’URL de point de terminaison de prédiction du projet pour le tester programmatiquement. Utilisez cet exemple comme modèle pour générer votre propre application de reconnaissance d’image.

Notes

Si vous souhaitez créer et entraîner un modèle de classification sans écrire de code, consultez à la place les instructions basées sur le navigateur.

Utilisez la bibliothèque de client Custom Vision pour Python pour :

  • Créer un projet de service Custom Vision
  • Ajouter des balises au projet
  • Charger et étiqueter des images
  • Entraîner le projet
  • Publier l’itération actuelle
  • Tester le point de terminaison de prédiction

Documentation de référence | Code source de la bibliothèque | Package (PyPI) | Exemples

Prérequis

  • Abonnement Azure - En créer un gratuitement
  • Python 3.x
    • Votre installation Python doit inclure pip. Vous pouvez vérifier si pip est installé en exécutant pip --version sur la ligne de commande. Procurez-vous pip en installant la dernière version de Python.
  • Une fois votre abonnement Azure obtenu, permet de créer une ressource Custom Vision dans le portail Azure pour créer une ressource de formation et de prévision.
    • Vous pouvez utiliser le niveau tarifaire Gratuit (F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.

Créer des variables d’environnement

Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Accédez au portail Azure. Si les ressources Custom Vision que vous avez créées dans la section Prérequis ont été déployées, sélectionnez le bouton Accéder à la ressource sous Étapes suivantes. Les clés et le point de terminaison se trouvent dans les pages Clé et point de terminaison des ressources, sous Gestion des ressources. Vous devez obtenir les clés pour vos ressources de formation et de prévision, ainsi que les points de terminaison API.

L’ID de ressource de prévision est disponible dans le portail Microsoft Azure, sous l’onglet Propriétés de la ressource, listé comme ID de ressource.

Conseil

Vous utilisez également https://www.customvision.ai/ pour obtenir ces valeurs. Après vous être connecté, sélectionnez l’icône Paramètres en haut à droite. Dans les pages de Paramètres, vous pouvez visualiser l’ensemble des clés, ID de ressource et points de terminaison.

Pour définir les variables d’environnement, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  • Pour définir la variable d’environnement VISION_TRAINING KEY, remplacez your-training-key par l’une des clés de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_TRAINING_ENDPOINT, remplacez your-training-endpoint par le point de terminaison de votre ressource de formation.
  • Pour définir la variable d’environnement VISION_PREDICTION_KEY, remplacez your-prediction-key par l’une des clés de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_ENDPOINT, remplacez your-prediction-endpoint par le point de terminaison de votre ressource de prévision.
  • Pour définir la variable d’environnement VISION_PREDICTION_RESOURCE_ID, remplacez your-resource-id par l’ID de votre ressource de prévision.

Important

Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.

Pour plus d’informations sur la sécurité des services IA, consultez Authentifier les demandes auprès d’Azure AI services.

setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui les liront, y compris la fenêtre de console.

Configuration

Installer la bibliothèque de client

Pour écrire une application d’analyse d’image avec Custom Vision pour Python, vous avez besoin de la bibliothèque de client Custom Vision. Après l’installation de Python, exécutez la commande suivante dans PowerShell ou dans une fenêtre de console :

pip install azure-cognitiveservices-vision-customvision

Créer une application Python

Créez un fichier Python et importez les bibliothèques suivantes.

from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
from azure.cognitiveservices.vision.customvision.training.models import ImageFileCreateBatch, ImageFileCreateEntry, Region
from msrest.authentication import ApiKeyCredentials
import os, time, uuid

Conseil

Vous voulez voir l’intégralité du fichier de code de démarrage rapide à la fois ? Vous le trouverez sur GitHub, qui contient les exemples de code utilisés dans ce guide de démarrage rapide.

Créez des variables pour le point de terminaison et les clés Azure de votre ressource.

# retrieve environment variables
ENDPOINT = os.environ["VISION_TRAINING_ENDPOINT"]
training_key = os.environ["VISION_TRAINING_KEY"]
prediction_key = os.environ["VISION_PREDICTION_KEY"]
prediction_resource_id = os.environ["VISION_PREDICTION_RESOURCE_ID"]

Modèle objet

Nom Description
CustomVisionTrainingClient Cette classe gère la création, l’entraînement et la publication de vos modèles.
CustomVisionPredictionClient Cette classe gère l’interrogation de vos modèles pour les prédictions de classification d’images.
ImagePrediction Cette classe définit une prédiction d’objet unique sur une seule image. Elle comprend des propriétés pour l’ID et le nom de l’objet, la position du rectangle englobant de l’objet et un score de confiance.

Exemples de code

Ces extraits de code vous montrent comment effectuer les opérations suivantes avec la bibliothèque de client Custom Vision pour Python :

Authentifier le client

Instanciez un client d’entraînement et de prédiction à l’aide de votre point de terminaison et de vos clés. Créez des objets ApiKeyServiceClientCredentials avec vos clés et utilisez-les avec votre point de terminaison pour créer un objet CustomVisionTrainingClient et un objet CustomVisionPredictionClient.

credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)
prediction_credentials = ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
predictor = CustomVisionPredictionClient(ENDPOINT, prediction_credentials)

Créer un projet de service Custom Vision

Pour créer un nouveau projet Service Vision personnalisée, ajoutez le code suivant à votre script.

Consultez la méthode create_project pour spécifier d’autres options quand vous créez votre projet (procédure expliquée dans le guide du portail web Créer un classifieur).

publish_iteration_name = "classifyModel"

credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)

# Create a new project
print ("Creating project...")
project_name = uuid.uuid4()
project = trainer.create_project(project_name)

Ajouter des balises au projet

Pour ajouter des étiquettes de classification à votre projet, ajoutez le code suivant :

# Make two tags in the new project
hemlock_tag = trainer.create_tag(project.id, "Hemlock")
cherry_tag = trainer.create_tag(project.id, "Japanese Cherry")

Charger et étiqueter des images

Tout d’abord, téléchargez les exemples d’images pour ce projet. Enregistrez le contenu du dossier des exemples d’images sur votre appareil local.

Pour ajouter les exemples d’images au projet, insérez le code suivant après la création de mots clés. Ce code charge chaque image avec la balise correspondante. Vous pouvez charger jusqu’à 64 images dans un même lot.

base_image_location = os.path.join (os.path.dirname(__file__), "Images")

print("Adding images...")

image_list = []

for image_num in range(1, 11):
    file_name = "hemlock_{}.jpg".format(image_num)
    with open(os.path.join (base_image_location, "Hemlock", file_name), "rb") as image_contents:
        image_list.append(ImageFileCreateEntry(name=file_name, contents=image_contents.read(), tag_ids=[hemlock_tag.id]))

for image_num in range(1, 11):
    file_name = "japanese_cherry_{}.jpg".format(image_num)
    with open(os.path.join (base_image_location, "Japanese_Cherry", file_name), "rb") as image_contents:
        image_list.append(ImageFileCreateEntry(name=file_name, contents=image_contents.read(), tag_ids=[cherry_tag.id]))

upload_result = trainer.create_images_from_files(project.id, ImageFileCreateBatch(images=image_list))
if not upload_result.is_batch_successful:
    print("Image batch upload failed.")
    for image in upload_result.images:
        print("Image status: ", image.status)
    exit(-1)

Notes

Vous devez modifier le chemin des images, selon l’emplacement où vous avez téléchargé le référentiel d’exemples du kit de développement logiciel (SDK) Python d’Azure AI services.

Entraîner le projet

Ce code crée la première itération du modèle de prédiction.

print ("Training...")
iteration = trainer.train_project(project.id)
while (iteration.status != "Completed"):
    iteration = trainer.get_iteration(project.id, iteration.id)
    print ("Training status: " + iteration.status)
    print ("Waiting 10 seconds...")
    time.sleep(10)

Conseil

Entraîner avec des étiquettes sélectionnées

Vous pouvez, si vous le souhaitez, effectuer l’entraînement sur un sous-ensemble de vos étiquettes appliquées. Vous pouvez procéder de la sorte si vous n’avez pas encore suffisamment appliqué certaines étiquettes, contrairement à d’autres. Dans l’appel train_project , définissez le paramètre facultatif selected_tags sur une liste de chaînes d’ID des étiquettes que vous souhaitez utiliser. Le modèle effectue l’entraînement pour ne reconnaître que les étiquettes présentes dans cette liste.

Publier l’itération actuelle

Les itérations ne sont pas disponibles sur le point de terminaison de prédiction tant qu’elles n’ont pas été publiées. Le code suivant rend l’itération actuelle du modèle disponible pour l’interrogation.

# The iteration is now trained. Publish it to the project endpoint
trainer.publish_iteration(project.id, iteration.id, publish_iteration_name, prediction_resource_id)
print ("Done!")

Tester le point de terminaison de prédiction

Pour envoyer une image au point de terminaison de prédiction et récupérer la prédiction, ajoutez le code suivant à la fin du fichier :

# Now there is a trained endpoint that can be used to make a prediction
prediction_credentials = ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
predictor = CustomVisionPredictionClient(ENDPOINT, prediction_credentials)

with open(os.path.join (base_image_location, "Test/test_image.jpg"), "rb") as image_contents:
    results = predictor.classify_image(
        project.id, publish_iteration_name, image_contents.read())

    # Display the results.
    for prediction in results.predictions:
        print("\t" + prediction.tag_name +
              ": {0:.2f}%".format(prediction.probability * 100))

Exécution de l'application

Exécutez CustomVisionQuickstart.py.

python CustomVisionQuickstart.py

Le résultat de l’application ressemble au texte suivant :

Creating project...
Adding images...
Training...
Training status: Training
Training status: Completed
Done!
        Hemlock: 93.53%
        Japanese Cherry: 0.01%

Vous pouvez ensuite vérifier que l’image de test (qui se trouve dans <emplacement_image_de_base>/images/Test/) est correctement étiquetée. Vous pouvez aussi revenir sur le site web Custom Vision et consulter l’état actuel de votre nouveau projet.

Nettoyer les ressources

Si vous voulez implémenter votre projet de classification d’images (ou essayer un projet de détection d’objet), supprimez le projet d’identification d’arbre de cet exemple. Avec un abonnement gratuit, vous pouvez avoir deux projets Custom Vision.

Sur le site web Custom Vision, accédez à Projects (Projets) puis sélectionnez la corbeille sous My New Project (Nouveau projet).

Capture d’écran d’un panneau étiqueté Mon Nouveau Projet avec une icône de corbeille.

Étapes suivantes

Vous savez maintenant comment effectuer la classification d’images dans le code. Cet exemple exécute une seule itération d’entraînement, mais vous aurez souvent besoin d’entraîner et de tester votre modèle à plusieurs reprises pour le rendre plus précis.

Bien démarrer avec l’API REST Custom Vision Suivez ces étapes pour appeler l’API et générer un modèle de classification d’images. Vous allez créer un projet, ajouter des étiquettes, entraîner le projet et utiliser l’URL de point de terminaison de prédiction du projet pour le tester programmatiquement. Utilisez cet exemple comme modèle pour générer votre propre application de reconnaissance d’image.

Notes

Custom Vision est plus facile à utiliser par le biais d’un SDK de bibliothèque de client ou en suivant les conseils basés sur le navigateur.

Utilisez la bibliothèque de client Custom Vision pour .NET pour :

  • Créer un projet de service Custom Vision
  • Ajouter des balises au projet
  • Charger et étiqueter des images
  • Entraîner le projet
  • Publier l’itération actuelle
  • Tester le point de terminaison de prédiction

Prérequis

  • Abonnement Azure - En créer un gratuitement
  • Une fois que vous avez votre abonnement Azure, créez une ressource Custom Vision dans le portail Azure pour créer une ressource d’entraînement et de prédiction, et obtenir vos clés et votre point de terminaison. Attendez qu’elle se déploie, puis cliquez sur le bouton Accéder à la ressource.
    • Vous aurez besoin de la clé et du point de terminaison des ressources que vous créez pour connecter votre application Custom Vision. Vous collerez votre clé et votre point de terminaison dans le code ci-dessous plus loin dans le guide de démarrage rapide.
    • Vous pouvez utiliser le niveau tarifaire Gratuit (F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
  • PowerShell version 6.0 + ou une application de ligne de commande similaire.

Créer un projet de service Custom Vision

Vous allez utiliser une commande comme celle qui suit pour créer un projet de classification d’images. Le projet créé apparaît sur le site web Custom Vision.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects?name={name}"

Copiez la commande dans un éditeur de texte et apportez les modifications suivantes :

  • Remplacez {subscription key} par votre clé Visage valide.
  • Remplacez {endpoint} par le point de terminaison qui correspond à votre clé.

    Notes

    Les nouvelles ressources créées après le 1er juillet 2019 utilisent des noms de sous-domaines personnalisés. Pour plus d’informations et afin d’obtenir une liste complète des points de terminaison régionaux, consultez Noms personnalisés de sous-domaine pour Azure AI services.

  • Remplacez {name} par le nom de votre projet.
  • Si vous le souhaitez, définissez d’autres paramètres d’URL pour configurer le type de modèle que votre projet utilisera. Pour plus d’options, consultez l’API Créer un projet.

Vous recevrez une réponse JSON semblable à la suivante. Enregistrez la valeur "id" de votre projet dans un emplacement temporaire.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "description": "string",
  "settings": {
    "domainId": "00000000-0000-0000-0000-000000000000",
    "classificationType": "Multiclass",
    "targetExportPlatforms": [
      "CoreML"
    ],
    "useNegativeSet": true,
    "detectionParameters": "string",
    "imageProcessingSettings": {
      "augmentationMethods": {}
    }
  },
  "created": "string",
  "lastModified": "string",
  "thumbnailUri": "string",
  "drModeEnabled": true,
  "status": "Succeeded"
}

Ajouter des étiquettes au projet

Utilisez la commande suivante pour définir les étiquettes sur lesquelles vous entraînerez le modèle.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/tags?name={name}"
  • Là encore, insérez votre propre clé et votre propre URL de point de terminaison.
  • Remplacez {projectId} par votre propre ID de projet.
  • Remplacez {name} par le nom de l’étiquette que vous voulez utiliser.

Répétez ce processus pour toutes les étiquettes que vous souhaitez utiliser dans votre projet. Si vous utilisez les exemples d’images fournis, ajoutez les étiquettes "Hemlock" et "Japanese Cherry".

Vous recevrez une réponse JSON semblable à la suivante. Enregistrez la valeur "id" de chaque étiquette dans un emplacement temporaire.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "description": "string",
  "type": "Regular",
  "imageCount": 0
}

Charger et étiqueter des images

Ensuite, téléchargez les exemples d’images pour ce projet. Enregistrez le contenu du dossier des exemples d’images sur votre appareil local.

Utilisez la commande suivante pour charger les images et appliquer les étiquettes : une fois pour les images « Hemlock » et séparément pour les images « Japanese Cherry ». Pour plus d’options, consultez l’API Créer des images à partir de données.

curl -v -X POST -H "Content-Type: multipart/form-data" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/images?tagIds={tagArray}"
--data-ascii "{binary data}"
  • Là encore, insérez votre propre clé et votre propre URL de point de terminaison.
  • Remplacez {projectId} par votre propre ID de projet.
  • Remplacez {tagArray} par l’ID d’une l’étiquette.
  • Ensuite, renseignez le corps de la requête avec les données binaires des images que vous souhaitez étiqueter.

Entraîner le projet

Cette méthode entraîne le modèle sur les images étiquetées que vous avez chargées, et retourne un ID pour l’itération du projet en cours.

curl -v -X POST -H "Content-Type: application/json" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/train"
  • Là encore, insérez votre propre clé et votre propre URL de point de terminaison.
  • Remplacez {projectId} par votre propre ID de projet.
  • Remplacez {tagArray} par l’ID d’une l’étiquette.
  • Ensuite, renseignez le corps de la requête avec les données binaires des images que vous souhaitez étiqueter.
  • Utilisez éventuellement d’autres paramètres d’URL. Pour plus d’options, consultez l’API Entraîner un projet.

Conseil

Entraîner avec des étiquettes sélectionnées

Vous pouvez, si vous le souhaitez, effectuer l’entraînement sur un sous-ensemble de vos étiquettes appliquées. Vous pouvez procéder de la sorte si vous n’avez pas encore suffisamment appliqué certaines étiquettes, contrairement à d’autres. Ajoutez le contenu JSON facultatif au corps de votre requête. Renseignez le tableau "selectedTags" avec les ID des étiquettes que vous souhaitez utiliser.

{
  "selectedTags": [
    "00000000-0000-0000-0000-000000000000"
  ]
}

La réponse JSON contient des informations sur votre projet entraîné, y compris l’ID d’itération ("id"). Enregistrez cette valeur pour l’étape suivante.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "status": "string",
  "created": "string",
  "lastModified": "string",
  "trainedAt": "string",
  "projectId": "00000000-0000-0000-0000-000000000000",
  "exportable": true,
  "exportableTo": [
    "CoreML"
  ],
  "domainId": "00000000-0000-0000-0000-000000000000",
  "classificationType": "Multiclass",
  "trainingType": "Regular",
  "reservedBudgetInHours": 0,
  "trainingTimeInMinutes": 0,
  "publishName": "string",
  "originalPublishResourceId": "string"
}

Publier l’itération actuelle

Cette méthode rend l’itération actuelle du modèle disponible pour l’interrogation. Vous utilisez le nom du modèle retourné comme référence pour envoyer des demandes de prédiction.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Là encore, insérez votre propre clé et votre propre URL de point de terminaison.
  • Remplacez {projectId} par votre propre ID de projet.
  • Remplacez {iterationId} par l’ID renvoyé à l’étape précédente.
  • Remplacez {publishedName} par le nom que vous souhaitez donner à votre modèle de prédiction.
  • Remplacez {predictionId} par votre propre ID de ressource de prédiction. L’ID de ressource de prédiction est disponible sous l’onglet Propriétés de la ressource dans le portail Azure, listé comme ID de ressource.
  • Utilisez éventuellement d’autres paramètres d’URL. Consultez l’API Publier une itération.

Tester le point de terminaison de prédiction

Pour finir, utilisez cette commande afin de tester votre modèle entraîné en chargeant une nouvelle image pour qu’il la classifie avec des étiquettes. Vous pouvez utiliser l’image qui se trouve dans le dossier « Test » des exemples de fichiers que vous avez téléchargés précédemment.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Là encore, insérez votre propre clé et votre propre URL de point de terminaison.
  • Remplacez {projectId} par votre propre ID de projet.
  • Remplacez {publishedName} par le nom que vous avez utilisé à l’étape précédente.
  • Ajoutez les données binaires de votre image locale au corps de la requête.
  • Utilisez éventuellement d’autres paramètres d’URL. Consultez l’API Classifier une image.

La réponse JSON retournée listera chacune des étiquettes appliquées par le modèle à votre image, ainsi que les scores de probabilité pour chaque étiquette.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "project": "00000000-0000-0000-0000-000000000000",
  "iteration": "00000000-0000-0000-0000-000000000000",
  "created": "string",
  "predictions": [
    {
      "probability": 0.0,
      "tagId": "00000000-0000-0000-0000-000000000000",
      "tagName": "string",
      "boundingBox": {
        "left": 0.0,
        "top": 0.0,
        "width": 0.0,
        "height": 0.0
      },
      "tagType": "Regular"
    }
  ]
}

Si vous voulez implémenter votre projet de classification d’images (ou essayer un projet de détection d’objet), supprimez le projet d’identification d’arbre de cet exemple. Avec un abonnement gratuit, vous pouvez avoir deux projets Custom Vision.

Sur le site web Custom Vision, accédez à Projects (Projets) puis sélectionnez la corbeille sous My New Project (Nouveau projet).

Capture d’écran d’un panneau étiqueté Mon Nouveau Projet avec une icône de corbeille.

Étapes suivantes

Vous avez à présent effectué toutes les étapes du processus de classification d’images à l’aide de l’API REST. Cet exemple exécute une seule itération d’entraînement, mais vous aurez souvent besoin d’entraîner et de tester votre modèle à plusieurs reprises pour le rendre plus précis.