Quickstart: Een afbeeldingsclassificatieproject maken met de Custom Vision-clientbibliotheek of REST API

Aan de slag met de clientbibliotheek van Custom Vision voor .NET. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor het bouwen van een model voor de classificatie van afbeeldingen uit te proberen. U maakt een project, voegt tags toe, traint het project en gebruikt de URL van het voorspellingseindpunt van het project om het programmatisch te testen. Gebruik dit voorbeeld als een sjabloon om uw eigen beeldherkennings-app te maken.

Notitie

Als u een classificatiemodel wilt bouwen en trainen zonder code te schrijven, raadpleegt u de handleiding voor browsers.

Referentiedocumentatie | Broncode bibliotheek (training)(voorspelling) | Pakket (NuGet) (training)(voorspelling) | -voorbeelden

Vereisten

Omgevingsvariabelen maken

In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Ga naar de Azure-portal. Als de Custom Vision-resources die u hebt gemaakt in de sectie Vereisten zijn geïmplementeerd, selecteert u de knop Ga naar resource onder Volgende stappen. U vindt uw sleutels en eindpunten op de sleutel- en eindpuntpagina's van de resources, onder resourcebeheer. U moet de sleutels voor zowel uw trainings- als voorspellingsbronnen ophalen, samen met de API-eindpunten.

U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de voorspellingsresource in Azure Portal, vermeld als resource-id.

Tip

U gebruikt https://www.customvision.ai/ ook om deze waarden op te halen. Nadat u zich hebt aangemeld, selecteert u het pictogram Instellingen rechtsboven. Op de pagina's Instellingen kunt u alle sleutels, resource-id's en eindpunten weergeven.

Let op

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabelen wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de VISION_TRAINING KEY omgevingsvariabele wilt instellen, vervangt u deze door your-training-key een van de sleutels voor uw trainingsresource.
  2. Als u de VISION_TRAINING_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-training-endpoint u het eindpunt voor uw trainingsresource.
  3. Als u de VISION_PREDICTION_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-prediction-key een van de sleutels voor uw voorspellingsresource.
  4. Als u de VISION_PREDICTION_ENDPOINT omgevingsvariabele wilt instellen, vervangt u het your-prediction-endpoint eindpunt voor uw voorspellingsresource.
  5. Als u de VISION_PREDICTION_RESOURCE_ID omgevingsvariabele wilt instellen, vervangt u deze door your-resource-id de resource-id voor uw voorspellingsresource.
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

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.

Instellen

Een nieuwe C#-toepassing maken

Maak met behulp van Visual Studio een nieuwe .NET Core-toepassing.

De clientbibliotheek installeren

Nadat u een nieuw project hebt gemaakt, installeert u de clientbibliotheek door in Solution Explorer met de rechtermuisknop op de projectoplossing te klikken en NuGet-pakketten beheren te selecteren. Selecteer in de pakketbeheerder die wordt geopend de optie Bladeren, schakel Prerelease opnemen in en zoek naar Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training en Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. Selecteer de nieuwste versie en vervolgens Installeren.

Tip

Wilt u het volledige quickstartcodebestand ineens weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.

Open vanuit de projectmap het bestand program.cs en voeg de volgende using-instructies toe:

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;

Maak in de main-methode van de toepassing variabelen waarmee de sleutels en eindpunten van uw resource worden opgehaald uit omgevingsvariabelen. U declareert ook enkele basisobjecten die u later kunt gebruiken.

// 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;

Voeg in de Hoofdmethode van de toepassing aanroepen toe voor de methoden die in deze quickstart worden gebruikt. U gaat deze later implementeren.

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);

De client verifiëren

In een nieuwe methode instantieert u trainings- en voorspellingsclients met behulp van uw eindpunt en sleutels.

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

Een nieuw project maken in de Custom Vision-service

Met het volgende deel van de code wordt een afbeeldingsclassificatieproject gemaakt. Het project wordt weergegeven op de Custom Vision-website. Raadpleeg de CreateProject-methode om andere opties op te geven wanneer u uw project maakt (uitgelegd in de webportalgids Een classificatie maken).

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

Label aan het project toevoegen

Met deze methode worden de tags gedefinieerd waarmee u het model gaat trainen.

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");
}

Afbeeldingen uploaden en labelen

Download eerst de voorbeeldafbeeldingen voor dit project. Sla de inhoud van de map Voorbeeldafbeeldingen op uw lokale apparaat op.

Definieer vervolgens een helpermethode voor het uploaden van de afbeeldingen in deze map. Mogelijk moet u het argument GetFiles bewerken om te verwijzen naar de locatie waar de afbeeldingen worden opgeslagen.

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")));
}

Definieer vervolgens een methode voor het uploaden van de afbeeldingen, waarbij tags worden toegepast op basis van de locatie van de map (de afbeeldingen zijn al gesorteerd). U kunt afbeeldingen een voor een uploaden en taggen of in een batch (maximaal 64 per batch). Dit codefragment bevat voorbeelden van beide.

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 }));

}

Het project trainen

Met deze methode wordt de eerste trainingsiteratie in het project gemaakt. Er wordt een query uitgevoerd op de service totdat de training is voltooid.

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);
    }
}

Tip

Trainen met geselecteerde tags

Indien gewenst kun u alleen trainen op een subset van de toegepaste tags. U kunt dit doen als u bepaalde tags nog niet vaak genoeg hebt toegepast, maar u wel voldoende andere codes hebt toegepast. Gebruik in de TrainProject-aanroep de parameter trainingParameters. Maak een TrainingParameters en stel de eigenschap SelectedTags in voor een lijst met id's van de tags die u wilt gebruiken. Het model wordt getraind om alleen de tags in de lijst te herkennen.

De huidige iteratie publiceren

Met deze methode wordt de huidige iteratie van het model beschikbaar voor het uitvoeren van query's. U kunt de naam van het model gebruiken als referentie voor het verzenden van voorspellingsaanvragen. U moet uw eigen waarde invoeren voor predictionResourceId. U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de resource in Azure Portal, vermeld als resource-id.

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
}

Voorspellingseindpunt testen

In dit deel van het script wordt de testafbeelding geladen, wordt een query op het eindpunt van het model uitgevoerd en worden de gegevens van de voorspelling op de console weergegeven.

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}");
    }
}

De toepassing uitvoeren

Voer de toepassing uit door boven in het IDE-venster op de knop Fouten opsporen te klikken.

Terwijl de toepassing wordt uitgevoerd, wordt een consolevenster geopend en wordt de volgende uitvoer geschreven:

Creating new project:
        Uploading images
        Training
Done!

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

U kunt vervolgens controleren of de testafbeelding (in Images/Test/) correct is gelabeld. Druk op een willekeurige toets om de toepassing af te sluiten. U kunt altijd teruggaan naar de Custom Vision-website en de huidige status bekijken van het nieuwe project dat u hebt gemaakt.

Resources opschonen

Als u uw eigen afbeeldingsclassificatieproject wilt uitvoeren (of in plaats daarvan een objectdetectieproject wilt proberen), kunt u het beste het boomidentificatieproject uit dit voorbeeld verwijderen. Met een gratis abonnement kunt u twee Custom Vision-projecten maken.

Ga op de Custom Vision-website naar Projecten en selecteer de prullenbak onder Mijn nieuwe project.

Screenshot of a panel labeled My New Project with a trash can icon.

Volgende stappen

Nu heeft u elke stap van het proces voor afbeeldingsclassificatie in code uitgevoerd. Met dit voorbeeld wordt één trainingsiteratie uitgevoerd, maar vaak zult u uw model meerdere keren willen trainen en testen om het nauwkeuriger te maken.

Dit artikel biedt informatie en voorbeeldcode om u op weg te helpen met de Custom Vision-clientbibliotheek voor Go om een afbeeldingsclassificatiemodel te maken. U maakt een project, voegt tags toe, traint het project en gebruikt de voorspellingseindpunt-URL van het project om het programmatisch te testen. Gebruik dit voorbeeld als een sjabloon om uw eigen beeldherkennings-app te maken.

Notitie

Als u een classificatiemodel wilt bouwen en trainen zonder code te schrijven, raadpleegt u de handleiding voor browsers.

Gebruik de Custom Vision-clientbibliotheek voor Go naar:

  • Een nieuw project maken in de Custom Vision-service
  • Label aan het project toevoegen
  • Afbeeldingen uploaden en labelen
  • Het project trainen
  • De huidige iteratie publiceren
  • Voorspellingseindpunt testen

Referentiedocumentatie (training)(voorspelling)

Vereisten

Omgevingsvariabelen maken

In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Ga naar de Azure-portal. Als de Custom Vision-resources die u hebt gemaakt in de sectie Vereisten zijn geïmplementeerd, selecteert u de knop Ga naar resource onder Volgende stappen. U vindt uw sleutels en eindpunten op de sleutel- en eindpuntpagina's van de resources, onder resourcebeheer. U moet de sleutels voor zowel uw trainings- als voorspellingsbronnen ophalen, samen met de API-eindpunten.

U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de voorspellingsresource in Azure Portal, vermeld als resource-id.

Tip

U gebruikt https://www.customvision.ai/ ook om deze waarden op te halen. Nadat u zich hebt aangemeld, selecteert u het pictogram Instellingen rechtsboven. Op de pagina's Instellingen kunt u alle sleutels, resource-id's en eindpunten weergeven.

Let op

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabelen wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de VISION_TRAINING KEY omgevingsvariabele wilt instellen, vervangt u deze door your-training-key een van de sleutels voor uw trainingsresource.
  2. Als u de VISION_TRAINING_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-training-endpoint u het eindpunt voor uw trainingsresource.
  3. Als u de VISION_PREDICTION_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-prediction-key een van de sleutels voor uw voorspellingsresource.
  4. Als u de VISION_PREDICTION_ENDPOINT omgevingsvariabele wilt instellen, vervangt u het your-prediction-endpoint eindpunt voor uw voorspellingsresource.
  5. Als u de VISION_PREDICTION_RESOURCE_ID omgevingsvariabele wilt instellen, vervangt u deze door your-resource-id de resource-id voor uw voorspellingsresource.
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

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.

Instellen

De Custom Vision-clientbibliotheek installeren

Als u een beeldanalyse-app wilt schrijven met Custom Vision voor Go, hebt u de Custom Vision Service-clientbibliotheek nodig. Voer de volgende opdracht uit in PowerShell:

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

of, als u dep gebruikt, binnen de uitvoer van de opslagplaats:

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

Voorbeeldafbeeldingen ophalen

In dit voorbeeld worden de installatiekopieën uit de opslagplaats Python SDK-voorbeelden van Azure AI-services op GitHub gebruikt. Kloon of download deze opslagplaats in uw ontwikkelomgeving. Onthoud de locatie van de map voor een latere stap.

Het Custom Vision-project maken

Maak een nieuw bestand met de naam sample.go in de projectmap van uw voorkeur en open het in de code-editor van uw voorkeur.

Als u een nieuw Custom Vision Service-project wilt maken, voegt u de volgende code aan uw script toe.

Raadpleeg de CreateProject-methode om andere opties op te geven wanneer u uw project maakt (uitgelegd in de webportalgids Een classificatie maken).

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

Labels maken in het project

Voeg de volgende code toe aan het eind van sample.go om classificatielabels voor uw project te maken:

// 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))

Afbeeldingen uploaden en labelen

Als u de voorbeeldafbeeldingen aan het project wilt toevoegen, voegt u de volgende code in nadat u de tag hebt gemaakt. Met deze code wordt elke afbeelding met de bijbehorende tag geüpload. U kunt maximaal 64 afbeeldingen uploaden in één batch.

Notitie

U moet het pad naar de installatiekopieën wijzigen op basis van waar u het Go SDK-project voor Azure AI-services eerder hebt gedownload.

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() })
}

Train en publiceer het project

Met deze code wordt de eerste iteratie van het voorspellingsmodel gemaakt en vervolgens wordt die iteratie gepubliceerd naar het voorspellingseindpunt. De naam die is opgegeven voor de gepubliceerde iteratie, kan worden gebruikt voor het verzenden van voorspellingsaanvragen. Er is pas na publicatie een iteratie beschikbaar in het voorspellingseindpunt.

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

Voorspellingseindpunt gebruiken

Als u een afbeelding naar het voorspellingseindpunt wilt verzenden en de voorspelling wilt ophalen, voegt u de volgende code toe aan het einde van het bestand:

    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("")
    }
}

De toepassing uitvoeren

Voer sample.go uit.

go run sample.go

Als het goed is, is de uitvoer van de toepassing vergelijkbaar met de volgende tekst:

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%

Vervolgens kunt u controleren of de testafbeelding (gevonden in <base_image_url>/Images/Test/) op de juiste wijze is gelabeld. U kunt altijd teruggaan naar de Custom Vision-website en de huidige status bekijken van het nieuwe project dat u hebt gemaakt.

Resources opschonen

Als u uw eigen afbeeldingsclassificatieproject wilt uitvoeren (of in plaats daarvan een objectdetectieproject wilt proberen), kunt u het beste het boomidentificatieproject uit dit voorbeeld verwijderen. Met een gratis abonnement kunt u twee Custom Vision-projecten maken.

Ga op de Custom Vision-website naar Projecten en selecteer de prullenbak onder Mijn nieuwe project.

Screenshot of a panel labeled My New Project with a trash can icon.

Volgende stappen

U hebt nu gezien hoe elke stap van het objectdetectieproces in code kan worden uitgevoerd. Met dit voorbeeld wordt één trainingsiteratie uitgevoerd, maar vaak zult u uw model meerdere keren willen trainen en testen om het nauwkeuriger te maken.

Ga aan de slag met de Custom Vision-clientbibliotheek voor Java om een model voor afbeeldingsclassificatie te maken. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor basistaken uit te proberen. Gebruik dit voorbeeld als een sjabloon om uw eigen beeldherkennings-app te maken.

Notitie

Als u een classificatiemodel wilt bouwen en trainen zonder code te schrijven, raadpleegt u de handleiding voor browsers.

Gebruik de Custom Vision-clientbibliotheek voor Java voor het volgende:

  • Een nieuw project maken in de Custom Vision-service
  • Label aan het project toevoegen
  • Afbeeldingen uploaden en labelen
  • Het project trainen
  • De huidige iteratie publiceren
  • Voorspellingseindpunt testen

Referentiedocumentatie | Broncode van bibliotheek (training)(voorspelling)| Artefact (Maven) (training)(voorspelling) | -voorbeelden

Vereisten

Omgevingsvariabelen maken

In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Ga naar de Azure-portal. Als de Custom Vision-resources die u hebt gemaakt in de sectie Vereisten zijn geïmplementeerd, selecteert u de knop Ga naar resource onder Volgende stappen. U vindt uw sleutels en eindpunten op de sleutel- en eindpuntpagina's van de resources, onder resourcebeheer. U moet de sleutels voor zowel uw trainings- als voorspellingsbronnen ophalen, samen met de API-eindpunten.

U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de voorspellingsresource in Azure Portal, vermeld als resource-id.

Tip

U gebruikt https://www.customvision.ai/ ook om deze waarden op te halen. Nadat u zich hebt aangemeld, selecteert u het pictogram Instellingen rechtsboven. Op de pagina's Instellingen kunt u alle sleutels, resource-id's en eindpunten weergeven.

Let op

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabelen wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de VISION_TRAINING KEY omgevingsvariabele wilt instellen, vervangt u deze door your-training-key een van de sleutels voor uw trainingsresource.
  2. Als u de VISION_TRAINING_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-training-endpoint u het eindpunt voor uw trainingsresource.
  3. Als u de VISION_PREDICTION_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-prediction-key een van de sleutels voor uw voorspellingsresource.
  4. Als u de VISION_PREDICTION_ENDPOINT omgevingsvariabele wilt instellen, vervangt u het your-prediction-endpoint eindpunt voor uw voorspellingsresource.
  5. Als u de VISION_PREDICTION_RESOURCE_ID omgevingsvariabele wilt instellen, vervangt u deze door your-resource-id de resource-id voor uw voorspellingsresource.
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

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.

Instellen

Een nieuw Gradle-project maken

Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.

mkdir myapp && cd myapp

Voer de opdracht gradle init uit vanuit uw werkmap. Met deze opdracht maakt u essentiële buildbestanden voor Gradle, inclusief build.gradle.kts, dat tijdens runtime wordt gebruikt om de toepassing te maken en te configureren.

gradle init --type basic

Wanneer u wordt gevraagd om een DSL te kiezen, selecteert u Kotlin.

De clientbibliotheek installeren

Zoek build.gradle.kts en open het met uw favoriete IDE of teksteditor. Kopieer het vervolgens in de volgende buildconfiguratie. Deze configuratie definieert het project als een Java-toepassing waarvan het toegangspunt de klasse CustomVisionQuickstart is. De Custom Vision-bibliotheken worden geïmporteerd.

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

Een Java-bestand maken

Voer de volgende opdracht uit vanuit uw werkmap om een projectbronmap te maken:

mkdir -p src/main/java

Ga naar de nieuwe map en maak een bestand met de naam CustomVisionQuickstart.java. Open het bestand in uw voorkeurseditor of IDE en voeg de volgende import-instructies toe:

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;

Tip

Wilt u het volledige quickstartcodebestand ineens weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.

Maak in de klasse CustomVisionQuickstart van de toepassing variabelen waarmee de sleutels en het eindpunt van uw resource worden opgehaald uit omgevingsvariabelen.

// 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");

Belangrijk

Ga naar de Azure-portal. Als de Custom Vision-resources die u hebt gemaakt in de sectie Vereisten zijn geïmplementeerd, selecteert u de knop Ga naar resource onder Volgende stappen. U vindt uw sleutels en eindpunten op de sleutel- en eindpuntpagina's van de resources. U moet de sleutels voor zowel uw trainings- als voorspellingsresources ophalen, samen met het API-eindpunt voor uw trainingsresource.

U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de resource in Azure Portal, vermeld als resource-id.

Belangrijk

Vergeet niet de sleutels uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutels nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

Voeg in de hoofdmethode van de toepassing aanroepen toe voor de methoden die in deze quickstart worden gebruikt. U definieert deze later.

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

Objectmodel

De volgende klassen en interfaces verwerken enkele van de belangrijkste functies van de Custom Vision Java-clientbibliotheek.

Name Beschrijving
CustomVisionTrainingClient Deze klasse behandelt het maken, trainen en publiceren van uw modellen.
CustomVisionPredictionClient Deze klasse verwerkt de query op uw modellen voor voorspellingen met betrekking tot de classificatie van afbeeldingen.
ImagePrediction Deze klasse definieert één voorspelling van één afbeelding. De klasse bevat eigenschappen voor de id en de naam van het object en een betrouwbaarheidsscore.

Codevoorbeelden

Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Custom Vision-clientbibliotheek voor Java:

De client verifiëren

In uw hoofdmethode instantieert u trainings- en voorspellingsclients met behulp van uw eindpunt en sleutels.

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

Een Custom Vision-project maken

T## Een Custom Vision-project maken

Met deze volgende methode wordt een afbeeldingsclassificatieproject gemaakt. Het project wordt weergegeven op de Custom Vision-website, die u eerder hebt bezocht. Raadpleeg de overloads van de methode CreateProject om andere opties op te geven wanneer u uw project maakt (uitgelegd in de webportalgids Een detector maken).

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

Tags toevoegen aan uw project

Met deze methode worden de tags gedefinieerd waarmee u het model gaat trainen.

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();
}

Afbeeldingen uploaden en labelen

Download eerst de voorbeeldafbeeldingen voor dit project. Sla de inhoud van de map Voorbeeldafbeeldingen op uw lokale apparaat op.

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);
    }
}

Het vorige codefragment maakt gebruik van twee hulpfuncties die de afbeeldingen als resourcestreams ophalen en ze naar de service uploaden (u kunt maximaal 64 afbeeldingen tegelijk uploaden).

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

Het project trainen

Met deze methode wordt de eerste trainingsiteratie in het project gemaakt. Er wordt een query uitgevoerd op de service totdat de training is voltooid.

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());
}

De huidige iteratie publiceren

Met deze methode wordt de huidige iteratie van het model beschikbaar voor het uitvoeren van query's. U kunt de naam van het model gebruiken als referentie voor het verzenden van voorspellingsaanvragen. U moet uw eigen waarde invoeren voor predictionResourceId. U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de resource in Azure Portal, vermeld als resource-id.

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);
}

Voorspellingseindpunt testen

In deze methode wordt de testafbeelding geladen, wordt een query op het eindpunt van het model uitgevoerd en worden de gegevens van de voorspelling op de console weergegeven.

// 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));
    }
}

De toepassing uitvoeren

U kunt de app maken met:

gradle build

De toepassing uitvoeren met de opdracht gradle run:

gradle run

Resources opschonen

Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

Als u uw eigen afbeeldingsclassificatieproject wilt uitvoeren (of in plaats daarvan een objectdetectieproject wilt proberen), kunt u het beste het boomidentificatieproject uit dit voorbeeld verwijderen. Met een gratis abonnement kunt u twee Custom Vision-projecten maken.

Ga op de Custom Vision-website naar Projecten en selecteer de prullenbak onder Mijn nieuwe project.

Screenshot of a panel labeled My New Project with a trash can icon.

Volgende stappen

U hebt nu gezien hoe elke stap van het afbeeldingsclassificatieproces in code kan worden uitgevoerd. Met dit voorbeeld wordt één trainingsiteratie uitgevoerd, maar vaak zult u uw model meerdere keren willen trainen en testen om het nauwkeuriger te maken.

Dit artikel biedt informatie en voorbeeldcode om u op weg te helpen met de Custom Vision-clientbibliotheek voor Node.js om een afbeeldingsclassificatiemodel te maken. U maakt een project, voegt tags toe, traint het project en gebruikt de voorspellingseindpunt-URL van het project om het programmatisch te testen. Gebruik dit voorbeeld als een sjabloon om uw eigen beeldherkennings-app te maken.

Notitie

Als u een classificatiemodel wilt bouwen en trainen zonder code te schrijven, raadpleegt u de handleiding voor browsers.

Gebruik de Custom Vision-clientbibliotheek voor .NET voor het volgende:

  • Een nieuw project maken in de Custom Vision-service
  • Label aan het project toevoegen
  • Afbeeldingen uploaden en labelen
  • Het project trainen
  • De huidige iteratie publiceren
  • Voorspellingseindpunt testen

Referentiedocumentatie (training)(voorspelling) | Broncode bibliotheek (training)(voorspelling) | Pakketvoorbeelden (npm) (training)(voorspelling) |

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • De huidige versie van Node.js
  • Zodra u uw Azure-abonnement hebt, maakt u een Custom Vision-resource in Azure Portal om een trainings- en voorspellingsresource te maken.
    • U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.

Omgevingsvariabelen maken

In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Ga naar de Azure-portal. Als de Custom Vision-resources die u hebt gemaakt in de sectie Vereisten zijn geïmplementeerd, selecteert u de knop Ga naar resource onder Volgende stappen. U vindt uw sleutels en eindpunten op de sleutel- en eindpuntpagina's van de resources, onder resourcebeheer. U moet de sleutels voor zowel uw trainings- als voorspellingsbronnen ophalen, samen met de API-eindpunten.

U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de voorspellingsresource in Azure Portal, vermeld als resource-id.

Tip

U gebruikt https://www.customvision.ai/ ook om deze waarden op te halen. Nadat u zich hebt aangemeld, selecteert u het pictogram Instellingen rechtsboven. Op de pagina's Instellingen kunt u alle sleutels, resource-id's en eindpunten weergeven.

Let op

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabelen wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de VISION_TRAINING KEY omgevingsvariabele wilt instellen, vervangt u deze door your-training-key een van de sleutels voor uw trainingsresource.
  2. Als u de VISION_TRAINING_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-training-endpoint u het eindpunt voor uw trainingsresource.
  3. Als u de VISION_PREDICTION_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-prediction-key een van de sleutels voor uw voorspellingsresource.
  4. Als u de VISION_PREDICTION_ENDPOINT omgevingsvariabele wilt instellen, vervangt u het your-prediction-endpoint eindpunt voor uw voorspellingsresource.
  5. Als u de VISION_PREDICTION_RESOURCE_ID omgevingsvariabele wilt instellen, vervangt u deze door your-resource-id de resource-id voor uw voorspellingsresource.
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

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.

Instellen

Een nieuwe Node.js-toepassing maken

Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.

mkdir myapp && cd myapp

Voer de opdracht npm init uit om een knooppunttoepassing te maken met een package.json-bestand.

npm init

De clientbibliotheek installeren

Als u een beeldanalyse-app wilt schrijven met Custom Vision voor Node.js, hebt u de Custom Vision NPM-pakketten nodig. Voer de volgende opdracht uit in PowerShell om ze te installeren:

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

Het package.json-bestand van uw app wordt bijgewerkt met de afhankelijkheden.

Maak een bestand met de naam index.js en importeer de volgende bibliotheken:

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");

Tip

Wilt u het volledige quickstartcodebestand ineens weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.

Maak variabelen voor het Azure-eindpunt en de Azure-sleutels voor uw resource.

// 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"];

Voeg ook velden toe voor de projectnaam en een time-outparameter voor asynchrone aanroepen.

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

Objectmodel

Name Beschrijving
TrainingAPIClient Deze klasse behandelt het maken, trainen en publiceren van uw modellen.
PredictionAPIClient Deze klasse verwerkt de query op uw modellen voor voorspellingen met betrekking tot de classificatie van afbeeldingen.
Prediction Deze interface definieert één voorspelling van één afbeelding. De klasse bevat eigenschappen voor de id en de naam van het object en een betrouwbaarheidsscore.

Codevoorbeelden

Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Custom Vision-clientbibliotheek voor JavaScript:

De client verifiëren

Instantieer clientobjecten met uw eindpunt en sleutel. Maak een ApiKeyCredentials-object met uw sleutel en gebruik het met uw eindpunt om een TrainingAPIClient- en PredictionAPIClient-object te maken.

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);

Een nieuw project maken in de Custom Vision-service

Start een nieuwe functie die al uw Custom Vision-functieaanroepen omvat. Voeg de volgende code toe om een nieuw Custom Vision-serviceproject te maken.

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

Label aan het project toevoegen

Voeg de volgende code toe aan uw functie om classificatielabels voor uw project te maken:

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

Afbeeldingen uploaden en labelen

Download eerst de voorbeeldafbeeldingen voor dit project. Sla de inhoud van de map Voorbeeldafbeeldingen op uw lokale apparaat op.

Als u de voorbeeldafbeeldingen aan het project wilt toevoegen, voegt u de volgende code in nadat u de tag hebt gemaakt. Met deze code wordt elke afbeelding met de bijbehorende tag geüpload.

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);

Belangrijk

U moet het pad wijzigen naar de installatiekopieën (sampleDataRoot) op basis van waar u de opslagplaats Python SDK-voorbeelden van Azure AI-services hebt gedownload.

Het project trainen

Met deze code wordt de eerste iteratie van het voorspellingsmodel gemaakt.

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);

De huidige iteratie publiceren

Met deze code wordt de getrainde iteratie gepubliceerd naar het voorspellingseindpunt. De naam die is opgegeven voor de gepubliceerde iteratie, kan worden gebruikt voor het verzenden van voorspellingsaanvragen. Er is pas na publicatie een iteratie beschikbaar in het voorspellingseindpunt.

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

Voorspellingseindpunt testen

Als u een afbeelding naar het voorspellingseindpunt wilt verzenden en de voorspelling wilt ophalen, voegt u de volgende code toe aan uw functie.

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)}%`);
});

Sluit vervolgens uw Custom Vision-functie en roep deze aan.

})()

De toepassing uitvoeren

Voer de toepassing uit met de opdracht node in uw quickstart-bestand.

node index.js

Als het goed is, is de uitvoer van de toepassing vergelijkbaar met de volgende tekst:

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%

Vervolgens kunt u controleren of de testafbeelding (gevonden in <sampleDataRoot>/Test/) op de juiste wijze is getagd. U kunt altijd teruggaan naar de Custom Vision-website en de huidige status bekijken van het nieuwe project dat u hebt gemaakt.

Als u uw eigen afbeeldingsclassificatieproject wilt uitvoeren (of in plaats daarvan een objectdetectieproject wilt proberen), kunt u het beste het boomidentificatieproject uit dit voorbeeld verwijderen. Met een gratis abonnement kunt u twee Custom Vision-projecten maken.

Ga op de Custom Vision-website naar Projecten en selecteer de prullenbak onder Mijn nieuwe project.

Screenshot of a panel labeled My New Project with a trash can icon.

Volgende stappen

U hebt nu gezien hoe elke stap van het objectdetectieproces in code kan worden uitgevoerd. Met dit voorbeeld wordt één trainingsiteratie uitgevoerd, maar vaak zult u uw model meerdere keren willen trainen en testen om het nauwkeuriger te maken.

Aan de slag met de Custom Vision-clientbibliotheek voor Python. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor het bouwen van een model voor de classificatie van afbeeldingen uit te proberen. U maakt een project, voegt tags toe, traint het project en gebruikt de voorspellingseindpunt-URL van het project om het programmatisch te testen. Gebruik dit voorbeeld als een sjabloon om uw eigen beeldherkennings-app te maken.

Notitie

Als u een classificatiemodel wilt bouwen en trainen zonder code te schrijven, raadpleegt u de handleiding voor browsers.

Gebruik de Custom Vision-clientbibliotheek voor Python voor het volgende:

  • Een nieuw project maken in de Custom Vision-service
  • Label aan het project toevoegen
  • Afbeeldingen uploaden en labelen
  • Het project trainen
  • De huidige iteratie publiceren
  • Voorspellingseindpunt testen

Referentiedocumentatie | Broncode bibliotheek | Package (PyPI) | Voorbeelden

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • Python 3.x
    • Uw Python-installatie moet pip bevatten. U kunt controleren of pip is geïnstalleerd door op de opdrachtregel uit te voeren pip --version . Haal pip op door de nieuwste versie van Python te installeren.
  • Zodra u uw Azure-abonnement hebt, maakt u een Custom Vision-resource in Azure Portal om een trainings- en voorspellingsresource te maken.
    • U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.

Omgevingsvariabelen maken

In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Ga naar de Azure-portal. Als de Custom Vision-resources die u hebt gemaakt in de sectie Vereisten zijn geïmplementeerd, selecteert u de knop Ga naar resource onder Volgende stappen. U vindt uw sleutels en eindpunten op de sleutel- en eindpuntpagina's van de resources, onder resourcebeheer. U moet de sleutels voor zowel uw trainings- als voorspellingsbronnen ophalen, samen met de API-eindpunten.

U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de voorspellingsresource in Azure Portal, vermeld als resource-id.

Tip

U gebruikt https://www.customvision.ai/ ook om deze waarden op te halen. Nadat u zich hebt aangemeld, selecteert u het pictogram Instellingen rechtsboven. Op de pagina's Instellingen kunt u alle sleutels, resource-id's en eindpunten weergeven.

Let op

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabelen wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de VISION_TRAINING KEY omgevingsvariabele wilt instellen, vervangt u deze door your-training-key een van de sleutels voor uw trainingsresource.
  2. Als u de VISION_TRAINING_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-training-endpoint u het eindpunt voor uw trainingsresource.
  3. Als u de VISION_PREDICTION_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-prediction-key een van de sleutels voor uw voorspellingsresource.
  4. Als u de VISION_PREDICTION_ENDPOINT omgevingsvariabele wilt instellen, vervangt u het your-prediction-endpoint eindpunt voor uw voorspellingsresource.
  5. Als u de VISION_PREDICTION_RESOURCE_ID omgevingsvariabele wilt instellen, vervangt u deze door your-resource-id de resource-id voor uw voorspellingsresource.
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

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.

Instellen

De clientbibliotheek installeren

Als u een beeldanalyse-app wilt schrijven met Custom Vision voor Python, hebt u de Custom Vision-clientbibliotheek nodig. Nadat u Python hebt geïnstalleerd, voert u de volgende opdracht uit in PowerShell of een consolevenster:

pip install azure-cognitiveservices-vision-customvision

Een nieuwe Python-toepassing maken

Maak een nieuw Python-bestand en importeer de volgende bibliotheken.

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

Tip

Wilt u het volledige quickstartcodebestand ineens weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.

Maak variabelen voor het Azure-eindpunt en de Azure-sleutels voor uw resource.

# 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"]

Objectmodel

Name Beschrijving
CustomVisionTrainingClient Deze klasse behandelt het maken, trainen en publiceren van uw modellen.
CustomVisionPredictionClient Deze klasse verwerkt de query op uw modellen voor voorspellingen met betrekking tot de classificatie van afbeeldingen.
ImagePrediction Deze klasse definieert een voorspelling van één object op één afbeelding. Het bevat eigenschappen voor de object-id en -naam, de locatie van het begrenzingsvak van het object en een betrouwbaarheidsscore.

Codevoorbeelden

Deze codefragmenten laten zien hoe u het volgende kunt uitvoeren met de Custom Vision-clientbibliotheek voor Python:

De client verifiëren

Instantieer een exemplaar van een trainings- en voorspellingsclient met uw eindpunt en sleutels. Maak ApiKeyServiceClientCredentials-objecten met uw sleutels en gebruik deze met uw eindpunt om een CustomVisionTrainingClient- en CustomVisionPredictionClient-object te maken.

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)

Een nieuw project maken in de Custom Vision-service

Als u een nieuw Custom Vision Service-project wilt maken, voegt u de volgende code aan uw script toe.

Raadpleeg de create_project-methode om andere opties op te geven wanneer u uw project maakt (uitgelegd in de webportalgids Een classificatie maken).

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)

Label aan het project toevoegen

Voeg de volgende code toe om classificatietags toe te voegen aan uw project:

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

Afbeeldingen uploaden en labelen

Download eerst de voorbeeldafbeeldingen voor dit project. Sla de inhoud van de map Voorbeeldafbeeldingen op uw lokale apparaat op.

Als u de voorbeeldafbeeldingen aan het project wilt toevoegen, voegt u de volgende code in nadat u de tag hebt gemaakt. Met deze code wordt elke afbeelding met de bijbehorende tag geüpload. U kunt maximaal 64 afbeeldingen uploaden in één batch.

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)

Notitie

U moet het pad naar de installatiekopieën wijzigen op basis van waar u de opslagplaats Python SDK-voorbeelden van Azure AI-services hebt gedownload.

Het project trainen

Met deze code wordt de eerste iteratie van het voorspellingsmodel gemaakt.

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)

Tip

Trainen met geselecteerde tags

Indien gewenst kun u alleen trainen op een subset van de toegepaste tags. U kunt dit doen als u bepaalde tags nog niet vaak genoeg hebt toegepast, maar u wel voldoende andere codes hebt toegepast. Stel in de train_project-aanroep de optionele parameter selected_tags in op een lijst met de ID-tekenreeksen van de tags die u wilt gebruiken. Het model wordt getraind om alleen de tags in de lijst te herkennen.

De huidige iteratie publiceren

Er is pas na publicatie een iteratie beschikbaar in het voorspellingseindpunt. Met de volgende code wordt de huidige iteratie van het model beschikbaar gemaakt voor het uitvoeren van query's.

# 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!")

Voorspellingseindpunt testen

Als u een afbeelding naar het voorspellingseindpunt wilt verzenden en de voorspelling wilt ophalen, voegt u de volgende code toe aan het einde van het bestand:

# 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))

De toepassing uitvoeren

Voer CustomVisionQuickstart.py uit.

python CustomVisionQuickstart.py

Als het goed is, is de uitvoer van de toepassing vergelijkbaar met de volgende tekst:

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

Vervolgens kunt u controleren of de testafbeelding (gevonden in <base_image_location>/images/Test/) op de juiste wijze is gelabeld. U kunt altijd teruggaan naar de Custom Vision-website en de huidige status bekijken van het nieuwe project dat u hebt gemaakt.

Resources opschonen

Als u uw eigen afbeeldingsclassificatieproject wilt uitvoeren (of in plaats daarvan een objectdetectieproject wilt proberen), kunt u het beste het boomidentificatieproject uit dit voorbeeld verwijderen. Met een gratis abonnement kunt u twee Custom Vision-projecten maken.

Ga op de Custom Vision-website naar Projecten en selecteer de prullenbak onder Mijn nieuwe project.

Screenshot of a panel labeled My New Project with a trash can icon.

Volgende stappen

U hebt nu gezien hoe elke stap van het afbeeldingsclassificatieproces in code kan worden uitgevoerd. Met dit voorbeeld wordt één trainingsiteratie uitgevoerd, maar vaak zult u uw model meerdere keren willen trainen en testen om het nauwkeuriger te maken.

Aan de slag met de REST API van Custom Vision. Volg deze stappen om de API aan te roepen en een afbeeldingsclassificatiemodel te bouwen. U maakt een project, voegt tags toe, traint het project en gebruikt de voorspellingseindpunt-URL van het project om het programmatisch te testen. Gebruik dit voorbeeld als een sjabloon om uw eigen beeldherkennings-app te maken.

Notitie

Custom Vision is het eenvoudigst te gebruiken via een SDK van de clientbibliotheek of via de aanwijzingen in de browser.

Gebruik de Custom Vision-clientbibliotheek voor .NET voor het volgende:

  • Een nieuw project maken in de Custom Vision-service
  • Label aan het project toevoegen
  • Afbeeldingen uploaden en labelen
  • Het project trainen
  • De huidige iteratie publiceren
  • Voorspellingseindpunt testen

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • Zodra u uw Azure-abonnement hebt, maakt u een Custom Vision-resource in Azure Portal om een trainings- en voorspellingsresource te maken en uw sleutels en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met Custom Vision. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
    • U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
  • PowerShell versie 6.0+ of een vergelijkbare opdrachtregeltoepassing.

Een nieuw project maken in de Custom Vision-service

U gebruikt een opdracht als de volgende voor het maken van een afbeeldingsclassificatieproject. Het project wordt weergegeven op de Custom Vision-website.

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

Kopieer de opdracht naar een teksteditor en maak de volgende wijzigingen:

  • Vervang {subscription key} door uw geldige Face-toets.
  • Vervang {endpoint} door het eindpunt dat overeenkomt met uw sleutel.

    Notitie

    Nieuwe resources die zijn gemaakt na 1 juli 2019, hebben aangepaste subdomeinnamen. Zie Aangepaste subdomeinnamen voor Azure AI-services voor meer informatie en een volledige lijst met regionale eindpunten.

  • Vervang {name} door de naam van uw project.
  • Stel eventueel andere URL-parameters in om te configureren welk type model voor uw project moet worden gebruikt. Zie de CreatProject API (Engelstalig) voor opties.

U ontvangt een JSON-antwoord dat lijkt op het volgende. Sla de "id"-waarde van het project op een tijdelijke locatie op.

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

Label aan het project toevoegen

Gebruik de volgende opdracht om de tags te definiëren waarmee u het model wilt trainen.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/tags?name={name}"
  • Voeg nogmaals uw eigen sleutel en eindpunt-URL in.
  • Vervang {projectId} door uw eigen project-id.
  • Vervang {name} door de naam van de tag die u wilt gebruiken.

Herhaal dit proces voor alle tags die u in uw project wilt gebruiken. Als u de voorbeeldafbeeldingen gebruikt, voegt u de tags "Hemlock" en "Japanese Cherry" toe.

U ontvangt een JSON-antwoord dat lijkt op het volgende. Sla de "id"-waarde van elke tag op een tijdelijke locatie op.

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

Afbeeldingen uploaden en labelen

Download vervolgens de voorbeeldafbeeldingen voor dit project. Sla de inhoud van de map Voorbeeldafbeeldingen op uw lokale apparaat op.

Gebruik de volgende opdracht om de afbeeldingen te uploaden en tags toe te passen; eenmaal voor de Hemlock-afbeeldingen en afzonderlijk voor de Japanese Cherry-afbeeldingen. Zie de API Create Images From Data (Afbeeldingen van gegevens maken) voor meer opties.

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}"
  • Voeg nogmaals uw eigen sleutel en eindpunt-URL in.
  • Vervang {projectId} door uw eigen project-id.
  • Vervang {tagArray} door de id van een tag.
  • Vul vervolgens de hoofdtekst van de aanvraag in met de binaire gegevens van de afbeeldingen die u wilt taggen.

Het project trainen

Met deze methode wordt het model getraind met de getagde afbeeldingen die u hebt geüpload en wordt er een id voor de huidige projectiteratie geretourneerd.

curl -v -X POST -H "Content-Type: application/json" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/train"
  • Voeg nogmaals uw eigen sleutel en eindpunt-URL in.
  • Vervang {projectId} door uw eigen project-id.
  • Vervang {tagArray} door de id van een tag.
  • Vul vervolgens de hoofdtekst van de aanvraag in met de binaire gegevens van de afbeeldingen die u wilt taggen.
  • Gebruik eventueel andere URL-parameters. Zie API Train Project (Project trainen) voor options.

Tip

Trainen met geselecteerde tags

Indien gewenst kun u alleen trainen op een subset van de toegepaste tags. U kunt dit doen als u bepaalde tags nog niet vaak genoeg hebt toegepast, maar u wel voldoende andere codes hebt toegepast. Voeg de optionele JSON-inhoud toe aan de hoofdtekst van uw aanvraag. Vul de "selectedTags"-matrix met de id's van de tags die u wilt gebruiken.

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

Het JSON-antwoord bevat informatie over uw getrainde project, waaronder de iteratie-id ("id"). Sla deze waarde op voor de volgende stap.

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

De huidige iteratie publiceren

Met deze methode wordt de huidige iteratie van het model beschikbaar voor het uitvoeren van query's. U gebruikt de naam van het model als referentie voor het verzenden van voorspellingsaanvragen.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Voeg nogmaals uw eigen sleutel en eindpunt-URL in.
  • Vervang {projectId} door uw eigen project-id.
  • Vervang {iterationId} door de id die in de vorige stap is geretourneerd.
  • Vervang {publishedName} door de naam die u wilt toewijzen aan uw voorspellingsmodel.
  • Vervang {predictionId} door de id van uw eigen voorspellingsresource. U vindt de voorspellingsresource-id op het tabblad Eigenschappen van de resource in Azure Portal, vermeld als resource-id.
  • Gebruik eventueel andere URL-parameters. Zie de API Publish Iteration (Iteratie publiceren).

Voorspellingseindpunt testen

Gebruik deze opdracht ten slotte om uw getrainde model te testen door een nieuwe afbeelding te uploaden zodat deze met tags kan worden geclassificeerd. U kunt de afbeelding gebruiken in de map Test met de voorbeeldbestanden die u eerder hebt gedownload.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Voeg nogmaals uw eigen sleutel en eindpunt-URL in.
  • Vervang {projectId} door uw eigen project-id.
  • Vervang {publishedName} door de naam die u in de vorige stap hebt gebruikt.
  • Voeg de binaire gegevens van uw lokale afbeelding opnieuw toe aan de hoofdtekst van de aanvraag.
  • Gebruik eventueel andere URL-parameters. Zie de API Classify image (Afbeelding classificeren).

Het geretourneerde JSON-antwoord vermeldt elk van de tags die het model op uw afbeelding heeft toegepast, samen met waarschijnlijkheidsscores voor elke tag.

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

Als u uw eigen afbeeldingsclassificatieproject wilt uitvoeren (of in plaats daarvan een objectdetectieproject wilt proberen), kunt u het beste het boomidentificatieproject uit dit voorbeeld verwijderen. Met een gratis abonnement kunt u twee Custom Vision-projecten maken.

Ga op de Custom Vision-website naar Projecten en selecteer de prullenbak onder Mijn nieuwe project.

Screenshot of a panel labeled My New Project with a trash can icon.

Volgende stappen

U hebt nu elke stap van het proces voor afbeeldingsclassificatie uitgevoerd met behulp van de REST API. Met dit voorbeeld wordt één trainingsiteratie uitgevoerd, maar vaak zult u uw model meerdere keren willen trainen en testen om het nauwkeuriger te maken.