Freigeben über


Schnellstart: Erstellen eines Bildklassifizierungsprojekts mit der Custom Vision-Clientbibliothek oder der REST-API

Hier erhalten Sie Informationen zu den ersten Schritten mit der Custom Vision-Clientbibliothek für .NET. Führen Sie diese Schritte aus, um das Paket zu installieren und den Beispielcode zum Erstellen eines Bildklassifizierungsmodells auszuprobieren. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Vorhersageendpunkt-URL des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage für die Erstellung Ihrer eigenen Bilderkennungsanwendung.

Hinweis

Falls Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, sehen Sie sich stattdessen die browserbasierte Anleitung an.

Referenzdokumentation | Quellcode der Bibliothek (Training) (Vorhersage) | Paket (NuGet) (Training) (Vorhersage) | Beispiele

Voraussetzungen

Erstellen von Umgebungsvariablen

In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Öffnen Sie das Azure-Portal. Wenn die im Abschnitt Voraussetzungen erstellten Custom Vision-Ressourcen erfolgreich bereitgestellt wurden, wählen Sie unter Nächste Schritte die Schaltfläche Zu Ressource wechseln aus. Ihre Schlüssel und Endpunkte finden Sie auf den entsprechenden Seiten der Ressourcen unter Ressourcenverwaltung. Sie müssen die Schlüssel für Ihre Trainings- und Vorhersageressourcen sowie die API-Endpunkte erhalten.

Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Vorhersageressource, wo sie als Ressourcen-ID angegeben ist.

Tipp

Sie verwenden https://www.customvision.ai/ auch, um diese Werte abzurufen. Wählen Sie nach der Anmeldung oben rechts das Symbol Einstellungen aus. Auf den Seiten Einstellung können Sie alle Schlüssel, Ressourcen-IDs und Endpunkte anzeigen.

Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING KEY ersetzen Sie your-training-key durch einen der Schlüssel für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING_ENDPOINT ersetzen Sie your-training-endpoint durch den Endpunkt für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_KEY ersetzen Sie your-prediction-key durch einen der Schlüssel für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_ENDPOINT ersetzen Sie your-prediction-endpoint durch den Endpunkt für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_RESOURCE_ID ersetzen Sie your-resource-id durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI 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

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden, einschließlich des Konsolenfensters.

Einrichten

Erstellen einer neuen C#-Anwendung

Erstellen Sie mit Visual Studio eine neue .NET Core-Anwendung.

Installieren der Clientbibliothek

Installieren Sie nach der Erstellung eines neuen Projekts die Clientbibliothek, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe klicken und NuGet-Pakete verwalten auswählen. Wählen Sie im daraufhin geöffneten Paket-Manager die Option Durchsuchen aus, aktivieren Sie das Kontrollkästchen Vorabversion einbeziehen, und suchen Sie nach Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training und Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. Wählen Sie die neueste Version und dann die Option Installieren aus.

Tipp

Möchten Sie sich sofort die gesamte Codedatei für die Schnellstartanleitung ansehen? Die Datei steht auf GitHub zur Verfügung. Dort finden Sie die Codebeispiele aus dieser Schnellstartanleitung.

Öffnen Sie über das Projektverzeichnis die Datei program.cs, und fügen Sie die folgenden using-Direktiven hinzu:

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;

Erstellen Sie in der Main-Methode der Anwendung Variablen, die die Schlüssel und Endpunkte Ihrer Ressource aus Umgebungsvariablen abrufen. Darüber hinaus deklarieren Sie einige grundlegende Objekte zur späteren Verwendung.

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

Fügen Sie in der Main-Methode der Anwendung Aufrufe für die Methoden hinzu, die in dieser Schnellstartanleitung verwendet werden. Sie führen die Implementierung hierfür zu einem späteren Zeitpunkt durch.

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

Authentifizieren des Clients

Instanziieren Sie in einer neuen Methode Trainings- und Vorhersageclients, indem Sie Ihren Endpunkt und die Schlüssel verwenden.

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

Erstellen eines neuen Custom Vision-Projekts

Mit dem nächsten Teil des Codes wird ein Bildklassifizierungsprojekt erstellt. Das erstellte Projekt wird auf der Custom Vision-Website angezeigt. Informationen zur Angabe weiterer Optionen bei der Erstellung Ihres Projekts finden Sie im Artikel zur Methode CreateProject. Informationen zur Projekterstellung finden Sie unter Schnellstart: Erstellen einer Klassifizierung mit Custom Vision.

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

Hinzufügen von Tags zum Projekt

Mit dieser Methode werden die Tags definiert, die Sie zum Trainieren des Modells verwenden.

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

Hochladen und Kennzeichnen von Bildern

Laden Sie zunächst die Beispielbilder für dieses Projekt herunter. Speichern Sie den Inhalt des Ordners mit den Beispielbildern auf Ihrem lokalen Gerät.

Definieren Sie anschließend eine Hilfsmethode zum Hochladen der Bilder in dieses Verzeichnis. Unter Umständen müssen Sie das GetFiles-Argument so bearbeiten, dass es auf den Speicherort Ihrer Bilder verweist.

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

Definieren Sie als Nächstes eine Methode zum Hochladen der Bilder, wobei Tags gemäß dem Ordnerspeicherort vergeben werden (die Bilder sind bereits sortiert). Sie können Bilder iterativ oder per Batchvorgang (bis zu 64 pro Batch) hochladen und mit Tags versehen. Dieser Codeausschnitt enthält Beispiele für beide Vorgehensweisen.

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

}

Trainieren des Projekts

Mit dieser Methode wird die erste Trainingsiteration im Projekt erstellt. Der Dienst wird so lange abgefragt, bis das Training abgeschlossen ist.

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

Tipp

Trainieren mit ausgewählten Tags

Optional können Sie das Training nur mit einer Teilmenge der angewendeten Tags durchführen. Das ist empfehlenswert, wenn bestimmte Tags noch nicht ausreichend angewendet wurden, andere jedoch schon. Verwenden Sie den Parameter trainingParameters im TrainProject-Aufruf. Erstellen Sie eine TrainingParameters-Klasse, und legen Sie deren Eigenschaft SelectedTags auf eine Liste der zu verwendenden Tag-IDs fest. Das Modell wird darauf trainiert, nur die Tags in dieser Liste zu erkennen.

Veröffentlichen der aktuellen Iteration

Mit dieser Methode wird die aktuelle Iteration des Modells zum Abfragen verfügbar gemacht. Sie können den Modellnamen als Referenz zum Senden von Vorhersageanforderungen verwenden. Hierbei ist es erforderlich, dass Sie Ihren eigenen Wert für predictionResourceId eingeben. Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Ressource, wo sie als Ressourcen-ID angegeben ist.

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
}

Testen des Vorhersageendpunkts

Dieser Teil des Skripts lädt das Testbild, fragt den Modellendpunkt ab und gibt Vorhersagedaten an die Konsole aus.

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

Ausführen der Anwendung

Führen Sie die Anwendung aus, indem Sie oben im IDE-Fenster auf die Schaltfläche Debuggen klicken.

Während der Anwendungsausführung sollte ein Konsolenfenster mit folgender Ausgabe geöffnet werden:

Creating new project:
        Uploading images
        Training
Done!

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

Daraufhin können Sie sich vergewissern, dass das Testbild (unter Images/Test/ ) ordnungsgemäß gekennzeichnet ist. Drücken Sie eine beliebige Taste, um die Anwendung zu beenden. Sie können auch zur Custom Vision-Website zurückgehen und den aktuellen Status Ihres neu erstellten Projekts ansehen.

Bereinigen von Ressourcen

Wenn Sie Ihr eigenes Bildklassifizierungsprojekt implementieren oder stattdessen ein Projekt zur Objekterkennung ausprobieren möchten, können Sie das Projekt zur Erkennung von Bäumen aus diesem Beispiel löschen. Im Rahmen eines kostenlosen Abonnements können zwei Custom Vision-Projekte erstellt werden.

Navigieren Sie auf der Custom Vision-Website zu Projects (Projekte), und wählen Sie unter „My New Project“ (Mein neues Projekt) das Papierkorbsymbol.

Screenshot eines Panels mit der Bezeichnung „Mein neues Projekt“ mit einem Papierkorbsymbol.

Nächste Schritte

Sie haben jetzt die einzelnen Schritte des Bildklassifizierungsprozesses im Code ausgeführt. In diesem Beispiel wird eine einzelne Trainingsiteration ausgeführt. Zur Verbesserung der Genauigkeit muss ein Modell jedoch häufig mehrmals trainiert und getestet werden.

Dieser Leitfaden enthält Anweisungen und Beispielcode für die ersten Schritte mit der Custom Vision-Clientbibliothek für Go und unterstützt Sie beim Erstellen eines Bildklassifizierungsmodells. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Vorhersageendpunkt-URL des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage für die Erstellung Ihrer eigenen Bilderkennungsanwendung.

Hinweis

Falls Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, sehen Sie sich stattdessen die browserbasierte Anleitung an.

Verwenden Sie die Custom Vision-Clientbibliothek für Go für folgende Aufgaben:

  • Erstellen eines neuen Custom Vision-Projekts
  • Hinzufügen von Tags zum Projekt
  • Hochladen und Kennzeichnen von Bildern
  • Trainieren des Projekts
  • Veröffentlichen der aktuellen Iteration
  • Testen des Vorhersageendpunkts

Referenzdokumentation (Training) (Vorhersage)

Voraussetzungen

Erstellen von Umgebungsvariablen

In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Öffnen Sie das Azure-Portal. Wenn die im Abschnitt Voraussetzungen erstellten Custom Vision-Ressourcen erfolgreich bereitgestellt wurden, wählen Sie unter Nächste Schritte die Schaltfläche Zu Ressource wechseln aus. Ihre Schlüssel und Endpunkte finden Sie auf den entsprechenden Seiten der Ressourcen unter Ressourcenverwaltung. Sie müssen die Schlüssel für Ihre Trainings- und Vorhersageressourcen sowie die API-Endpunkte erhalten.

Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Vorhersageressource, wo sie als Ressourcen-ID angegeben ist.

Tipp

Sie verwenden https://www.customvision.ai/ auch, um diese Werte abzurufen. Wählen Sie nach der Anmeldung oben rechts das Symbol Einstellungen aus. Auf den Seiten Einstellung können Sie alle Schlüssel, Ressourcen-IDs und Endpunkte anzeigen.

Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING KEY ersetzen Sie your-training-key durch einen der Schlüssel für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING_ENDPOINT ersetzen Sie your-training-endpoint durch den Endpunkt für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_KEY ersetzen Sie your-prediction-key durch einen der Schlüssel für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_ENDPOINT ersetzen Sie your-prediction-endpoint durch den Endpunkt für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_RESOURCE_ID ersetzen Sie your-resource-id durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI 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

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden, einschließlich des Konsolenfensters.

Einrichten

Installieren der Custom Vision-Clientbibliothek

Zum Schreiben einer Bildanalyseanwendung mit Custom Vision für Go benötigen Sie die Clientbibliothek für den Custom Vision-Dienst. Führen Sie in PowerShell den folgenden Befehl aus:

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

Bei Verwendung von dep können Sie alternativ Folgendes in Ihrem Repository ausführen:

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

Abrufen der Beispielbilder

Dieses Beispiel verwendet die Bilder aus dem GitHub-Repository Azure KI Services-Beispiele für das Python SDK. Klonen Sie dieses Repository, oder laden Sie es in Ihre Entwicklungsumgebung herunter. Merken Sie sich den Speicherort des Ordners. Er wird in einem späteren Schritt benötigt.

Erstellen des Custom Vision-Projekts

Erstellen Sie eine neue Datei namens sample.go in Ihrem bevorzugten Projektverzeichnis, und öffnen Sie sie in einem Code-Editor Ihrer Wahl.

Fügen Sie Ihrem Skript den folgenden Code hinzu, um ein neues Custom Vision Service-Projekt zu erstellen.

Informationen zur Angabe weiterer Optionen bei der Erstellung Ihres Projekts finden Sie im Artikel zur Methode CreateProject. Informationen zur Projekterstellung finden Sie unter Schnellstart: Erstellen einer Klassifizierung mit Custom Vision.

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

Erstellen von Tags im Projekt

Fügen Sie am Ende der Datei sample.go den folgenden Code hinzu, um Ihrem Projekt Klassifizierungstags hinzuzufügen:

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

Hochladen und Kennzeichnen von Bildern

Um dem Projekt die Beispielbilder hinzuzufügen, fügen Sie nach der Erstellung der Kategorien den folgenden Code ein. Dieser Code lädt das Bild mit dem entsprechenden Tag hoch. Sie können bis zu 64 Bilder in einem Batch hochladen.

Hinweis

Sie müssen den Pfad zu den Bildern basierend auf dem Ort ändern, von dem Sie zuvor das Azure KI Services SDK-Beispielprojekt für Go heruntergeladen haben.

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

Trainieren und Veröffentlichen des Projekts

Dieser Code erstellt die erste Iteration des Vorhersagemodells und veröffentlicht diese anschließend am Vorhersageendpunkt. Der Name der veröffentlichten Iteration kann zum Senden von Vorhersageanforderungen verwendet werden. Eine Iteration ist erst im Vorhersageendpunkt verfügbar, wenn sie veröffentlicht wurde.

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

Verwenden des Vorhersageendpunkts

Um ein Bild an den Vorhersageendpunkt zu senden und die Vorhersage abzurufen, fügen Sie am Ende der Datei den folgenden Code hinzu:

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

Ausführen der Anwendung

Führen Sie sample.go aus.

go run sample.go

Die Ausgabe der Anwendung sollte dem folgenden Text ähneln:

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%

Daraufhin können Sie sich vergewissern, dass das Testbild (unter <>/Images/Test/) ordnungsgemäß gekennzeichnet ist. Sie können auch zur Custom Vision-Website zurückgehen und den aktuellen Status Ihres neu erstellten Projekts ansehen.

Bereinigen von Ressourcen

Wenn Sie Ihr eigenes Bildklassifizierungsprojekt implementieren oder stattdessen ein Projekt zur Objekterkennung ausprobieren möchten, können Sie das Projekt zur Erkennung von Bäumen aus diesem Beispiel löschen. Im Rahmen eines kostenlosen Abonnements können zwei Custom Vision-Projekte erstellt werden.

Navigieren Sie auf der Custom Vision-Website zu Projects (Projekte), und wählen Sie unter „My New Project“ (Mein neues Projekt) das Papierkorbsymbol.

Screenshot eines Panels mit der Bezeichnung „Mein neues Projekt“ mit einem Papierkorbsymbol.

Nächste Schritte

Sie wissen nun, wie die einzelnen Schritte des Objekterkennungsprozesses im Code ausgeführt werden. In diesem Beispiel wird eine einzelne Trainingsiteration ausgeführt. Zur Verbesserung der Genauigkeit muss ein Modell jedoch häufig mehrmals trainiert und getestet werden.

Erste Schritte mit der Custom Vision-Clientbibliothek für Java zum Erstellen eines Bildklassifizierungsmodells. Führen Sie die nachfolgenden Schritte zum Installieren des Pakets aus, und testen Sie den Beispielcode für grundlegende Aufgaben. Verwenden Sie dieses Beispiel als Vorlage für die Erstellung Ihrer eigenen Bilderkennungsanwendung.

Hinweis

Falls Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, sehen Sie sich stattdessen die browserbasierte Anleitung an.

Verwenden Sie die Custom Vision-Clientbibliothek für Java für folgende Aufgaben:

  • Erstellen eines neuen Custom Vision-Projekts
  • Hinzufügen von Tags zum Projekt
  • Hochladen und Kennzeichnen von Bildern
  • Trainieren des Projekts
  • Veröffentlichen der aktuellen Iteration
  • Testen des Vorhersageendpunkts

Referenzdokumentation | Quellcode der Bibliothek (Training) (Vorhersage)| Artefakt (Maven) (Training) (Vorhersage) | Beispiele

Voraussetzungen

Erstellen von Umgebungsvariablen

In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Öffnen Sie das Azure-Portal. Wenn die im Abschnitt Voraussetzungen erstellten Custom Vision-Ressourcen erfolgreich bereitgestellt wurden, wählen Sie unter Nächste Schritte die Schaltfläche Zu Ressource wechseln aus. Ihre Schlüssel und Endpunkte finden Sie auf den entsprechenden Seiten der Ressourcen unter Ressourcenverwaltung. Sie müssen die Schlüssel für Ihre Trainings- und Vorhersageressourcen sowie die API-Endpunkte erhalten.

Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Vorhersageressource, wo sie als Ressourcen-ID angegeben ist.

Tipp

Sie verwenden https://www.customvision.ai/ auch, um diese Werte abzurufen. Wählen Sie nach der Anmeldung oben rechts das Symbol Einstellungen aus. Auf den Seiten Einstellung können Sie alle Schlüssel, Ressourcen-IDs und Endpunkte anzeigen.

Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING KEY ersetzen Sie your-training-key durch einen der Schlüssel für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING_ENDPOINT ersetzen Sie your-training-endpoint durch den Endpunkt für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_KEY ersetzen Sie your-prediction-key durch einen der Schlüssel für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_ENDPOINT ersetzen Sie your-prediction-endpoint durch den Endpunkt für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_RESOURCE_ID ersetzen Sie your-resource-id durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI 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

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden, einschließlich des Konsolenfensters.

Einrichten

Erstellen eines neuen Gradle-Projekts

Erstellen Sie in einem Konsolenfenster (etwa cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und rufen Sie es auf.

mkdir myapp && cd myapp

Führen Sie den Befehl gradle init in Ihrem Arbeitsverzeichnis aus. Mit diesem Befehl werden grundlegende Builddateien für Gradle, u. a. die Datei build.gradle.kts, erstellt. Diese Datei wird zur Laufzeit zum Erstellen und Konfigurieren Ihrer Anwendung verwendet.

gradle init --type basic

Wenn Sie zur Auswahl einer DSL aufgefordert werden, wählen Sie Kotlin aus.

Installieren der Clientbibliothek

Navigieren Sie zur Datei build.gradle.kts, und öffnen Sie sie in Ihrer bevorzugten IDE bzw. Ihrem bevorzugten Text-Editor. Kopieren Sie anschließend die folgende Buildkonfiguration. Diese Konfiguration definiert das Projekt als Java-Anwendung, deren Einstiegspunkt die Klasse CustomVisionQuickstart ist. Die Custom Vision-Bibliotheken werden davon importiert.

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

Erstellen einer Java-Datei

Führen Sie in Ihrem Arbeitsverzeichnis den folgenden Befehl aus, um einen Projektquellordner zu erstellen:

mkdir -p src/main/java

Navigieren Sie zu dem neuen Ordner, und erstellen Sie eine Datei namens CustomVisionQuickstart.java. Öffnen Sie sie in Ihrem bevorzugten Editor bzw. Ihrer bevorzugten IDE, und fügen Sie die folgenden import-Anweisungen hinzu:

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;

Tipp

Möchten Sie sich sofort die gesamte Codedatei für die Schnellstartanleitung ansehen? Die Datei steht auf GitHub zur Verfügung. Dort finden Sie die Codebeispiele aus dieser Schnellstartanleitung.

Erstellen Sie in der CustomVisionQuickstart-Klasse der Anwendung Variablen, die die Schlüssel und den Endpunkt Ihrer Ressource aus Umgebungsvariablen abrufen.

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

Wichtig

Öffnen Sie das Azure-Portal. Wenn die im Abschnitt Voraussetzungen erstellten Custom Vision-Ressourcen erfolgreich bereitgestellt wurden, wählen Sie unter Nächste Schritte die Schaltfläche Zu Ressource wechseln aus. Sie können Ihre Schlüssel und Endpunkte auf den Seiten für Schlüssel und Endpunkte der Ressourcen finden. Sie müssen die Schlüssel für Ihre Trainings-und Vorhersage Ressourcen zusammen mit dem API-Endpunkt für Ihre Schulungs Ressource erhalten.

Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Ressource, wo sie als Ressourcen-ID angegeben ist.

Wichtig

Denken Sie daran, die Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und machen Sie sie niemals öffentlich zugänglich. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.

Fügen Sie in der main-Methode der Anwendung Aufrufe für die Methoden hinzu, die in dieser Schnellstartanleitung verwendet werden. Diese werden später definiert.

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

Objektmodell

Die folgenden Klassen und Schnittstellen verarbeiten einige der Hauptfunktionen der Custom Vision-Java-Clientbibliothek:

Name Beschreibung
CustomVisionTrainingClient Diese Klasse wird für die Erstellung, das Training und die Veröffentlichung Ihrer Modelle verwendet.
CustomVisionPredictionClient Diese Klasse wird zum Abfragen Ihrer Modelle nach Vorhersagen zur Bildklassifizierung verwendet.
ImagePrediction Mit dieser Klasse wird eine einzelne Vorhersage für ein einzelnes Bild definiert. Sie enthält Eigenschaften für die Objekt-ID und den Namen sowie eine Zuverlässigkeitsbewertung.

Codebeispiele

Diese Codeausschnitte veranschaulichen, wie die folgenden Aufgaben mit der Custom Vision-Clientbibliothek für Java durchgeführt werden:

Authentifizieren des Clients

Instanziieren Sie in Ihrer main-Methode Trainings- und Vorhersageclients, indem Sie Ihren Endpunkt und die Schlüssel verwenden.

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

Erstellen eines Custom Vision-Projekts

T## Erstellen eines neuen Custom Vision-Projekts

Mit der nächsten Methode wird ein Bildklassifizierungsprojekt erstellt. Das erstellte Projekt wird auf der Custom Vision-Website angezeigt, die Sie zuvor besucht haben. Informationen zur Angabe weiterer Optionen bei der Erstellung Ihres Projekts finden Sie im Artikel zu Überladungen der Methode CreateProject. Informationen zur Projekterstellung finden Sie unter Schnellstart: Informationen zum Erstellen einer Objekterkennung mit Custom Vision.

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

Hinzufügen von Kategorien zu Ihrem Projekt

Mit dieser Methode werden die Tags definiert, die Sie zum Trainieren des Modells verwenden.

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

Hochladen und Kennzeichnen von Bildern

Laden Sie zunächst die Beispielbilder für dieses Projekt herunter. Speichern Sie den Inhalt des Ordners mit den Beispielbildern auf Ihrem lokalen Gerät.

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

Der vorherige Codeausschnitt verwendet zwei Hilfsfunktionen, die die Bilder als Ressourcenstreams abrufen und in den Dienst hochladen. (Sie können bis zu 64 Bilder in einem Batch hochladen.)

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

Trainieren des Projekts

Mit dieser Methode wird die erste Trainingsiteration im Projekt erstellt. Der Dienst wird so lange abgefragt, bis das Training abgeschlossen ist.

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

Veröffentlichen der aktuellen Iteration

Mit dieser Methode wird die aktuelle Iteration des Modells zum Abfragen verfügbar gemacht. Sie können den Modellnamen als Referenz zum Senden von Vorhersageanforderungen verwenden. Hierbei ist es erforderlich, dass Sie Ihren eigenen Wert für predictionResourceId eingeben. Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Ressource, wo sie als Ressourcen-ID angegeben ist.

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

Testen des Vorhersageendpunkts

Diese Methode lädt das Testbild, fragt den Modellendpunkt ab und gibt Vorhersagedaten an die Konsole aus.

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

Ausführen der Anwendung

Sie können die App mit folgendem Befehl erstellen:

gradle build

Führen Sie die Anwendung mit Befehl gradle run aus:

gradle run

Bereinigen von Ressourcen

Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind.

Wenn Sie Ihr eigenes Bildklassifizierungsprojekt implementieren oder stattdessen ein Projekt zur Objekterkennung ausprobieren möchten, können Sie das Projekt zur Erkennung von Bäumen aus diesem Beispiel löschen. Im Rahmen eines kostenlosen Abonnements können zwei Custom Vision-Projekte erstellt werden.

Navigieren Sie auf der Custom Vision-Website zu Projects (Projekte), und wählen Sie unter „My New Project“ (Mein neues Projekt) das Papierkorbsymbol.

Screenshot eines Panels mit der Bezeichnung „Mein neues Projekt“ mit einem Papierkorbsymbol.

Nächste Schritte

Sie wissen nun, wie die einzelnen Schritte des Bildklassifizierungsprozesses im Code ausgeführt werden. In diesem Beispiel wird eine einzelne Trainingsiteration ausgeführt. Zur Verbesserung der Genauigkeit muss ein Modell jedoch häufig mehrmals trainiert und getestet werden.

Dieser Leitfaden enthält Anweisungen und Beispielcode für die ersten Schritte mit der Custom Vision-Clientbibliothek für Node.js und unterstützt Sie beim Erstellen eines Bildklassifizierungsmodells. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Vorhersageendpunkt-URL des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage für die Erstellung Ihrer eigenen Bilderkennungsanwendung.

Hinweis

Falls Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, sehen Sie sich stattdessen die browserbasierte Anleitung an.

Verwenden Sie die Custom Vision-Clientbibliothek für .NET für folgende Aufgaben:

  • Erstellen eines neuen Custom Vision-Projekts
  • Hinzufügen von Tags zum Projekt
  • Hochladen und Kennzeichnen von Bildern
  • Trainieren des Projekts
  • Veröffentlichen der aktuellen Iteration
  • Testen des Vorhersageendpunkts

Referenzdokumentation (Training)(Vorhersage) | Paket (npm) (Training)(Vorhersage) | Beispiele

Voraussetzungen

  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Die aktuelle Version von Node.js
  • Wenn Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Custom Vision-Ressource erstellen, um eine Trainings- und Vorhersageressource zu erstellen.
    • Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.

Erstellen von Umgebungsvariablen

In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Öffnen Sie das Azure-Portal. Wenn die im Abschnitt Voraussetzungen erstellten Custom Vision-Ressourcen erfolgreich bereitgestellt wurden, wählen Sie unter Nächste Schritte die Schaltfläche Zu Ressource wechseln aus. Ihre Schlüssel und Endpunkte finden Sie auf den entsprechenden Seiten der Ressourcen unter Ressourcenverwaltung. Sie müssen die Schlüssel für Ihre Trainings- und Vorhersageressourcen sowie die API-Endpunkte erhalten.

Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Vorhersageressource, wo sie als Ressourcen-ID angegeben ist.

Tipp

Sie verwenden https://www.customvision.ai/ auch, um diese Werte abzurufen. Wählen Sie nach der Anmeldung oben rechts das Symbol Einstellungen aus. Auf den Seiten Einstellung können Sie alle Schlüssel, Ressourcen-IDs und Endpunkte anzeigen.

Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING KEY ersetzen Sie your-training-key durch einen der Schlüssel für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING_ENDPOINT ersetzen Sie your-training-endpoint durch den Endpunkt für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_KEY ersetzen Sie your-prediction-key durch einen der Schlüssel für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_ENDPOINT ersetzen Sie your-prediction-endpoint durch den Endpunkt für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_RESOURCE_ID ersetzen Sie your-resource-id durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI 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

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden, einschließlich des Konsolenfensters.

Einrichten

Erstellen einer neuen Node.js-Anwendung

Erstellen Sie in einem Konsolenfenster (etwa cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und rufen Sie es auf.

mkdir myapp && cd myapp

Führen Sie den Befehl npm init aus, um eine Knotenanwendung mit der Datei package.json zu erstellen.

npm init

Installieren der Clientbibliothek

Zum Schreiben einer Bildanalyseanwendung mit Custom Vision für Node.js benötigen Sie die Custom Vision NPM-Pakete. Führen Sie den folgenden Befehl in PowerShell aus, um sie zu installieren:

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

Die Datei package.json Ihrer App wird mit den Abhängigkeiten aktualisiert.

Erstellen Sie eine Datei namens index.js, und importieren Sie die folgenden 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");

Tipp

Möchten Sie sich sofort die gesamte Codedatei für die Schnellstartanleitung ansehen? Die Datei steht auf GitHub zur Verfügung. Dort finden Sie die Codebeispiele aus dieser Schnellstartanleitung.

Erstellen Sie Variablen für Azure-Endpunkt und -Schlüssel Ihrer 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"];

Fügen Sie außerdem Felder für Ihren Projektnamen und einen Timeoutparameter für asynchrone Aufrufe hinzu.

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

Objektmodell

name BESCHREIBUNG
TrainingAPIClient Diese Klasse wird für die Erstellung, das Training und die Veröffentlichung Ihrer Modelle verwendet.
PredictionAPIClient Diese Klasse wird zum Abfragen Ihrer Modelle nach Vorhersagen zur Bildklassifizierung verwendet.
Vorhersage Mit dieser Schnittstelle wird eine einzelne Vorhersage für ein einzelnes Bild definiert. Sie enthält Eigenschaften für die Objekt-ID und den Namen sowie eine Zuverlässigkeitsbewertung.

Codebeispiele

Diese Codeausschnitte veranschaulichen, wie die folgenden Aufgaben mit der Custom Vision-Clientbibliothek für JavaScript durchgeführt werden:

Authentifizieren des Clients

Instanziieren Sie Clientobjekte mit Ihrem Endpunkt und Schlüssel. Erstellen Sie ein ApiKeyCredentials-Objekt mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein TrainingAPIClient- und ein PredictionAPIClient-Objekt zu erstellen.

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

Erstellen eines neuen Custom Vision-Projekts

Starten Sie eine neue Funktion, die alle Custom Vision-Funktionsaufrufe enthält. Fügen Sie den folgenden Code hinzu, um ein neues Custom Vision Service-Projekt zu erstellen.

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

Hinzufügen von Tags zum Projekt

Fügen Sie Ihrer Funktion den folgenden Code hinzu, um Klassifizierungstags für Ihr Projekt zu erstellen:

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

Hochladen und Kennzeichnen von Bildern

Laden Sie zunächst die Beispielbilder für dieses Projekt herunter. Speichern Sie den Inhalt des Ordners mit den Beispielbildern auf Ihrem lokalen Gerät.

Um dem Projekt die Beispielbilder hinzuzufügen, fügen Sie nach der Erstellung der Kategorien den folgenden Code ein. Dieser Code lädt das Bild mit dem entsprechenden Tag hoch.

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

Wichtig

Sie müssen den Pfad zu den Bildern (sampleDataRoot) basierend auf dem Ort ändern, von dem Sie das Repository mit den Azure KI Services-Beispielen für das Python-SDK heruntergeladen haben.

Trainieren des Projekts

Mit diesem Code wird die erste Iteration des Vorhersagemodells erstellt.

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

Veröffentlichen der aktuellen Iteration

Mit diesem Code wird die trainierte Iteration für den Vorhersageendpunkt veröffentlicht. Der Name der veröffentlichten Iteration kann zum Senden von Vorhersageanforderungen verwendet werden. Eine Iteration ist erst im Vorhersageendpunkt verfügbar, wenn sie veröffentlicht wurde.

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

Testen des Vorhersageendpunkts

Um ein Bild an den Vorhersageendpunkt zu senden und die Vorhersage abzurufen, fügen Sie Ihrer Funktion den folgenden Code hinzu:

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

Schließen Sie anschließend die Custom Vision-Funktion, und rufen Sie sie auf:

})()

Ausführen der Anwendung

Führen Sie die Anwendung mit dem Befehl node für die Schnellstartdatei aus.

node index.js

Die Ausgabe der Anwendung sollte dem folgenden Text ähneln:

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%

Daraufhin können Sie sich vergewissern, dass das Testbild (unter <sampleDataRoot>/Test/) ordnungsgemäß gekennzeichnet ist. Sie können auch zur Custom Vision-Website zurückgehen und den aktuellen Status Ihres neu erstellten Projekts ansehen.

Wenn Sie Ihr eigenes Bildklassifizierungsprojekt implementieren oder stattdessen ein Projekt zur Objekterkennung ausprobieren möchten, können Sie das Projekt zur Erkennung von Bäumen aus diesem Beispiel löschen. Im Rahmen eines kostenlosen Abonnements können zwei Custom Vision-Projekte erstellt werden.

Navigieren Sie auf der Custom Vision-Website zu Projects (Projekte), und wählen Sie unter „My New Project“ (Mein neues Projekt) das Papierkorbsymbol.

Screenshot eines Panels mit der Bezeichnung „Mein neues Projekt“ mit einem Papierkorbsymbol.

Nächste Schritte

Sie wissen nun, wie die einzelnen Schritte des Objekterkennungsprozesses im Code ausgeführt werden. In diesem Beispiel wird eine einzelne Trainingsiteration ausgeführt. Zur Verbesserung der Genauigkeit muss ein Modell jedoch häufig mehrmals trainiert und getestet werden.

Hier erhalten Sie Informationen zu den ersten Schritten mit der Custom Vision-Clientbibliothek für Python. Führen Sie diese Schritte aus, um das Paket zu installieren und den Beispielcode zum Erstellen eines Bildklassifizierungsmodells auszuprobieren. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Vorhersageendpunkt-URL des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage für die Erstellung Ihrer eigenen Bilderkennungsanwendung.

Hinweis

Falls Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, sehen Sie sich stattdessen die browserbasierte Anleitung an.

Verwenden Sie die Custom Vision-Clientbibliothek für Python für folgende Aufgaben:

  • Erstellen eines neuen Custom Vision-Projekts
  • Hinzufügen von Tags zum Projekt
  • Hochladen und Kennzeichnen von Bildern
  • Trainieren des Projekts
  • Veröffentlichen der aktuellen Iteration
  • Testen des Vorhersageendpunkts

Referenzdokumentation | Quellcode der Bibliothek | Paket (PyPI) | Beispiele

Voraussetzungen

  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Python 3.x
    • Ihre Python-Installation sollte pip enthalten. Sie können überprüfen, ob pip installiert ist, indem Sie pip --version in der Befehlszeile ausführen. Installieren Sie die aktuelle Python-Version, um pip zu erhalten.
  • Wenn Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Custom Vision-Ressource erstellen, um eine Trainings- und Vorhersageressource zu erstellen.
    • Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.

Erstellen von Umgebungsvariablen

In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Öffnen Sie das Azure-Portal. Wenn die im Abschnitt Voraussetzungen erstellten Custom Vision-Ressourcen erfolgreich bereitgestellt wurden, wählen Sie unter Nächste Schritte die Schaltfläche Zu Ressource wechseln aus. Ihre Schlüssel und Endpunkte finden Sie auf den entsprechenden Seiten der Ressourcen unter Ressourcenverwaltung. Sie müssen die Schlüssel für Ihre Trainings- und Vorhersageressourcen sowie die API-Endpunkte erhalten.

Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Vorhersageressource, wo sie als Ressourcen-ID angegeben ist.

Tipp

Sie verwenden https://www.customvision.ai/ auch, um diese Werte abzurufen. Wählen Sie nach der Anmeldung oben rechts das Symbol Einstellungen aus. Auf den Seiten Einstellung können Sie alle Schlüssel, Ressourcen-IDs und Endpunkte anzeigen.

Zum Festlegen der Umgebungsvariable für Ihren Ressourcenschlüssel öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING KEY ersetzen Sie your-training-key durch einen der Schlüssel für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_TRAINING_ENDPOINT ersetzen Sie your-training-endpoint durch den Endpunkt für Ihre Trainingsressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_KEY ersetzen Sie your-prediction-key durch einen der Schlüssel für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_ENDPOINT ersetzen Sie your-prediction-endpoint durch den Endpunkt für Ihre Vorhersageressource.
  • Zum Festlegen der Umgebungsvariablen VISION_PREDICTION_RESOURCE_ID ersetzen Sie your-resource-id durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI 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

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden, einschließlich des Konsolenfensters.

Einrichten

Installieren der Clientbibliothek

Zum Schreiben einer Bildanalyseanwendung mit Custom Vision für Python benötigen Sie die Clientbibliothek für Custom Vision. Führen Sie nach der Installation von Python den folgenden Befehl in PowerShell oder in einem Konsolenfenster aus:

pip install azure-cognitiveservices-vision-customvision

Erstellen einer neuen Python-Anwendung

Erstellen Sie eine neue Python-Datei, und importieren Sie die folgenden 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

Tipp

Möchten Sie sich sofort die gesamte Codedatei für die Schnellstartanleitung ansehen? Die Datei steht auf GitHub zur Verfügung. Dort finden Sie die Codebeispiele aus dieser Schnellstartanleitung.

Erstellen Sie Variablen für Azure-Endpunkt und -Schlüssel Ihrer 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"]

Objektmodell

name Beschreibung
CustomVisionTrainingClient Diese Klasse wird für die Erstellung, das Training und die Veröffentlichung Ihrer Modelle verwendet.
CustomVisionPredictionClient Diese Klasse wird zum Abfragen Ihrer Modelle nach Vorhersagen zur Bildklassifizierung verwendet.
ImagePrediction Mit dieser Klasse wird eine einzelne Objektvorhersage für ein einzelnes Bild definiert. Sie enthält Eigenschaften für die Objekt-ID und den Namen, die Position des Begrenzungsrahmens für das Objekt und eine Zuverlässigkeitsbewertung.

Codebeispiele

Diese Codeausschnitte veranschaulichen, wie die folgenden Aufgaben mit der Custom Vision-Clientbibliothek für Python durchgeführt werden:

Authentifizieren des Clients

Instanziieren Sie Trainings- und Vorhersageclients mit dem Endpunkt und den Schlüsseln. Erstellen Sie ApiKeyServiceClientCredentials-Objekte mit Ihren Schlüsseln, und verwenden Sie sie mit Ihrem Endpunkt, um ein CustomVisionTrainingClient- und ein CustomVisionPredictionClient-Objekt zu erstellen.

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)

Erstellen eines neuen Custom Vision-Projekts

Fügen Sie Ihrem Skript den folgenden Code hinzu, um ein neues Custom Vision Service-Projekt zu erstellen.

Informationen zur Angabe weiterer Optionen bei der Erstellung Ihres Projekts finden Sie im Artikel zur Methode create_project. Informationen zur Projekterstellung finden Sie unter Schnellstart: Erstellen einer Klassifizierung mit Custom Vision.

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)

Hinzufügen von Tags zum Projekt

Fügen Sie den folgenden Code hinzu, um Ihrem Projekt Klassifizierungstags hinzuzufügen:

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

Hochladen und Kennzeichnen von Bildern

Laden Sie zunächst die Beispielbilder für dieses Projekt herunter. Speichern Sie den Inhalt des Ordners mit den Beispielbildern auf Ihrem lokalen Gerät.

Um dem Projekt die Beispielbilder hinzuzufügen, fügen Sie nach der Erstellung der Kategorien den folgenden Code ein. Dieser Code lädt das Bild mit dem entsprechenden Tag hoch. Sie können bis zu 64 Bilder in einem Batch hochladen.

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)

Hinweis

Sie müssen den Pfad zu den Bildern basierend auf dem Ort ändern, von dem Sie das Repository mit den Azure KI Services-Beispielen für das Python-SDK heruntergeladen haben.

Trainieren des Projekts

Mit diesem Code wird die erste Iteration des Vorhersagemodells erstellt.

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)

Tipp

Trainieren mit ausgewählten Tags

Optional können Sie das Training nur mit einer Teilmenge der angewendeten Tags durchführen. Das ist empfehlenswert, wenn bestimmte Tags noch nicht ausreichend angewendet wurden, andere jedoch schon. Legen Sie im Aufruf train_project den optionalen Parameter selected_tags auf die Liste der zu verwendenden Tag-IDs fest. Das Modell wird darauf trainiert, nur die Tags in dieser Liste zu erkennen.

Veröffentlichen der aktuellen Iteration

Eine Iteration ist erst im Vorhersageendpunkt verfügbar, wenn sie veröffentlicht wurde. Mit dem folgenden Code wird die aktuelle Iteration des Modells zum Abfragen verfügbar gemacht:

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

Testen des Vorhersageendpunkts

Um ein Bild an den Vorhersageendpunkt zu senden und die Vorhersage abzurufen, fügen Sie am Ende der Datei den folgenden Code hinzu:

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

Ausführen der Anwendung

Führen Sie CustomVisionQuickstart.py aus.

python CustomVisionQuickstart.py

Die Ausgabe der Anwendung sollte dem folgenden Text ähneln:

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

Daraufhin können Sie sich vergewissern, dass das Testbild (unter< >/Images/Test/) ordnungsgemäß gekennzeichnet ist. Sie können auch zur Custom Vision-Website zurückgehen und den aktuellen Status Ihres neu erstellten Projekts ansehen.

Bereinigen von Ressourcen

Wenn Sie Ihr eigenes Bildklassifizierungsprojekt implementieren oder stattdessen ein Projekt zur Objekterkennung ausprobieren möchten, können Sie das Projekt zur Erkennung von Bäumen aus diesem Beispiel löschen. Im Rahmen eines kostenlosen Abonnements können zwei Custom Vision-Projekte erstellt werden.

Navigieren Sie auf der Custom Vision-Website zu Projects (Projekte), und wählen Sie unter „My New Project“ (Mein neues Projekt) das Papierkorbsymbol.

Screenshot eines Panels mit der Bezeichnung „Mein neues Projekt“ mit einem Papierkorbsymbol.

Nächste Schritte

Sie wissen nun, wie die einzelnen Schritte des Bildklassifizierungsprozesses im Code ausgeführt werden. In diesem Beispiel wird eine einzelne Trainingsiteration ausgeführt. Zur Verbesserung der Genauigkeit muss ein Modell jedoch häufig mehrmals trainiert und getestet werden.

Erste Schritte mit der Custom Vision-REST-API. Führen Sie diese Schritte aus, um die API aufzurufen und ein Bildklassifizierungsmodell zu erstellen. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Vorhersageendpunkt-URL des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage für die Erstellung Ihrer eigenen Bilderkennungsanwendung.

Hinweis

Am einfachsten ist es, für Custom Vision ein Clientbibliothek-SDK oder die browserbasierte Vorgehensweise zu nutzen.

Verwenden Sie die Custom Vision-Clientbibliothek für .NET für folgende Aufgaben:

  • Erstellen eines neuen Custom Vision-Projekts
  • Hinzufügen von Tags zum Projekt
  • Hochladen und Kennzeichnen von Bildern
  • Trainieren des Projekts
  • Veröffentlichen der aktuellen Iteration
  • Testen des Vorhersageendpunkts

Voraussetzungen

  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Wenn Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Custom Vision-Ressource erstellen, um eine Trainings- und Vorhersageressource zu erstellen und Ihre Schlüssel und den Endpunkt abzurufen. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.
    • Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressourcen, um Ihre Anwendung mit Custom Vision zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
    • Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
  • PowerShell-Version 6.0 oder höher oder eine ähnliche Befehlszeilenanwendung

Erstellen eines neuen Custom Vision-Projekts

Sie verwenden einen Befehl der folgenden Art, um ein Bildklassifizierungsprojekt zu erstellen. Das erstellte Projekt wird auf der Custom Vision-Website angezeigt.

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

Kopieren Sie den Befehl in einen Text-Editor, und nehmen Sie folgende Änderungen vor:

  • Ersetzen Sie {subscription key} durch Ihren gültigen Schlüssel für die Gesichtserkennung.
  • Ersetzen Sie {endpoint} durch den Endpunkt, der Ihrem Schlüssel entspricht.

    Hinweis

    Neue Ressourcen, die nach dem 1. Juli 2019 erstellt wurden, verwenden benutzerdefinierte Unterdomänennamen. Weitere Informationen und eine vollständige Liste mit regionalen Endpunkten finden Sie unter Benutzerdefinierte Unterdomänennamen für Azure KI Services.

  • Ersetzen Sie {name} durch den Namen Ihres Projekts.
  • Optional können Sie auch andere URL-Parameter festlegen, um zu konfigurieren, welche Art von Modell für Ihr Projekt verwendet werden soll. Informationen zu den Optionen finden Sie unter CreateProject-API.

Sie erhalten eine JSON-Antwort der folgenden Art: Speichern Sie den "id"-Wert Ihres Projekts an einem temporären Speicherort.

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

Hinzufügen von Tags zum Projekt

Verwenden Sie den folgenden Befehl, um die Tags zu definieren, die Sie zum Trainieren des Modells verwenden möchten.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/tags?name={name}"
  • Fügen Sie auch hier Ihren eigenen Schlüssel und die Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen Sie {name} durch den Namen des Tags, das Sie verwenden möchten.

Wiederholen Sie diesen Vorgang für alle Tags, die in Ihrem Projekt verwendet werden sollen. Fügen Sie die Tags "Hemlock" und "Japanese Cherry" hinzu, falls Sie die bereitgestellten Beispielbilder nutzen.

Sie erhalten eine JSON-Antwort der folgenden Art: Speichern Sie den "id"-Wert jedes Tags an einem temporären Speicherort.

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

Hochladen und Kennzeichnen von Bildern

Laden Sie als Nächstes die Beispielbilder für dieses Projekt herunter. Speichern Sie den Inhalt des Ordners mit den Beispielbildern auf Ihrem lokalen Gerät.

Verwenden Sie den folgenden Befehl, um die Bilder hochzuladen und die Tags anzuwenden: einmal für die Bilder vom Typ „Hemlock“ (Hemlocktanne) und dann separat für die Bilder vom Typ „Japanese Cherry“ (Japanische Zierkirsche). Weitere Optionen finden Sie unter der API zum Erstellen von Bildern aus Daten (Create Images From Data).

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}"
  • Fügen Sie auch hier Ihren eigenen Schlüssel und die Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen Sie {tagArray} durch die ID eines Tags.
  • Fügen Sie in den Text der Anforderung dann die Binärdaten der Bilder ein, die Sie mit Tags versehen möchten.

Trainieren des Projekts

Bei dieser Methode wird das Modell anhand der mit Tags versehenen Bilder trainiert, die Sie hochgeladen haben, und eine ID für die aktuelle Projektiteration zurückgegeben.

curl -v -X POST -H "Content-Type: application/json" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/train"
  • Fügen Sie auch hier Ihren eigenen Schlüssel und die Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen Sie {tagArray} durch die ID eines Tags.
  • Fügen Sie in den Text der Anforderung dann die Binärdaten der Bilder ein, die Sie mit Tags versehen möchten.
  • Optional können Sie auch andere URL-Parameter verwenden. Informationen zu den Optionen finden Sie unter der API für das Trainieren von Projekten (Train Project).

Tipp

Trainieren mit ausgewählten Tags

Optional können Sie das Training nur mit einer Teilmenge der angewendeten Tags durchführen. Das ist empfehlenswert, wenn bestimmte Tags noch nicht ausreichend angewendet wurden, andere jedoch schon. Fügen Sie den optionalen JSON-Inhalt dem Text Ihrer Anforderung hinzu. Fügen Sie die IDs der Tags, die Sie verwenden möchten, in das Array "selectedTags" ein.

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

Die JSON-Antwort enthält Informationen zu Ihrem trainierten Projekt, z. B. die Iterations-ID ("id"). Speichern Sie diesen Wert für den nächsten Schritt.

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

Veröffentlichen der aktuellen Iteration

Mit dieser Methode wird die aktuelle Iteration des Modells zum Abfragen verfügbar gemacht. Sie nutzen den zurückgegebenen Modellnamen als Referenz zum Senden von Vorhersageanforderungen.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Fügen Sie auch hier Ihren eigenen Schlüssel und die Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen Sie {iterationId} durch die ID, die im vorherigen Schritt zurückgegeben wurde.
  • Ersetzen Sie {publishedName} durch den Namen, den Sie Ihrem Vorhersagemodell zuweisen möchten.
  • Ersetzen Sie {predictionId} durch Ihre eigene Vorhersageressourcen-ID. Sie finden die Vorhersageressourcen-ID im Azure-Portal auf der Registerkarte Eigenschaften der Ressource, wo sie als Ressourcen-ID angegeben ist.
  • Optional können Sie auch andere URL-Parameter verwenden. Weitere Informationen finden Sie unter der API zum Veröffentlichen der Iteration (Publish Iteration).

Testen des Vorhersageendpunkts

Verwenden Sie abschließend diesen Befehl, um Ihr trainiertes Modell zu testen, indem Sie ein neues Bild für die Klassifizierung mit Tags hochladen. Sie können das Bild im Ordner „Test“ der zuvor heruntergeladenen Beispieldateien verwenden.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Fügen Sie auch hier Ihren eigenen Schlüssel und die Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen Sie {publishedName} durch den Namen, den Sie im vorherigen Schritt verwendet haben.
  • Fügen Sie dem Anforderungstext die Binärdaten Ihres lokalen Bilds hinzu.
  • Optional können Sie auch andere URL-Parameter verwenden. Weitere Informationen finden Sie unter der API zum Klassifizieren des Bilds (Classify Image).

In der zurückgegebenen JSON-Antwort sind die einzelnen Tags, die vom Modell auf das Bild angewendet wurden, und die zugehörigen Wahrscheinlichkeitsergebnisse aufgelistet.

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

Wenn Sie Ihr eigenes Bildklassifizierungsprojekt implementieren oder stattdessen ein Projekt zur Objekterkennung ausprobieren möchten, können Sie das Projekt zur Erkennung von Bäumen aus diesem Beispiel löschen. Im Rahmen eines kostenlosen Abonnements können zwei Custom Vision-Projekte erstellt werden.

Navigieren Sie auf der Custom Vision-Website zu Projects (Projekte), und wählen Sie unter „My New Project“ (Mein neues Projekt) das Papierkorbsymbol.

Screenshot eines Panels mit der Bezeichnung „Mein neues Projekt“ mit einem Papierkorbsymbol.

Nächste Schritte

Sie haben jetzt alle Schritte des Bildklassifizierungsprozesses per REST-API ausgeführt. In diesem Beispiel wird eine einzelne Trainingsiteration ausgeführt. Zur Verbesserung der Genauigkeit muss ein Modell jedoch häufig mehrmals trainiert und getestet werden.