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

Erste Schritte mit der Benutzerdefinierten Vision-Clientbibliothek für .NET. Führen Sie die folgenden Schritte aus, um das Paket zu installieren und den Beispielcode zum Erstellen eines Imageklassifizierungsmodells auszuprobieren. Sie können ein Projekt erstellen, Tags hinzufügen, das Projekt trainieren und die Vorhersageendpunkt-URL des Projekts verwenden, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage zum Erstellen Ihrer eigenen Bilderkennungs-App.

Hinweis

Wenn Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, lesen Sie die browserbasierte Anleitung.

Reference-Dokumentation | Quellcode der Bibliothek für training und Prediction | Paket (NuGet) für training und prediction | Samples

Voraussetzungen

  • Ein Azure-Abonnement. Sie können eine kostenlos erstellen.
  • Die Visual Studio-IDE oder die aktuelle Version von .NET Core.
  • Sobald Sie Ihr Azure-Abonnement haben, erstellen Sie eine Custom Vision-Ressource im Azure-Portal, um eine Schulungsressource und eine Vorhersageressource zu erstellen.
    • Sie können das kostenlose Preisniveau (F0) verwenden, um den Dienst zu testen und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.

Erstellen von Umgebungsvariablen

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

Wechseln Sie zum Azure-Portal. Wenn die benutzerdefinierten Vision-Ressourcen, die Sie im Abschnitt "Voraussetzungen" erstellt haben, erfolgreich bereitgestellt wurden, wählen Sie unter "Nächste Schritte" die Schaltfläche "Gehe zu Ressource" aus. Sie finden Ihre Schlüssel und Endpunkte auf den Ressourcenschlüssel- und Endpunktseiten unter "Ressourcenverwaltung". Sie müssen sowohl die Schlüssel für Ihre Trainingsressource als auch für Ihre Vorhersageressource zusammen mit den API-Endpunkten abrufen.

Sie finden die Ressourcen-ID der Vorhersage-Ressource auf der Registerkarte Properties im Azure-Portal, aufgelistet als Ressourcen-ID.

Tipp

Sie verwenden https://www.customvision.ai auch, um diese Werte abzurufen. Nachdem Sie sich angemeldet haben, wählen Sie oben rechts das Symbol "Einstellungen" aus. Auf den Einstellungsseiten können Sie alle Schlüssel, Ressourcen-ID und Endpunkte anzeigen.

Um die Umgebungsvariablen festzulegen, öffnen Sie ein Konsolenfenster, und befolgen Sie die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Um die Umgebungsvariable festzulegen, ersetzen Sie VISION_TRAINING KEY durch einen der Schlüssel für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_TRAINING_ENDPOINT festzulegen, ersetzen Sie <your-training-endpoint> durch den Endpunkt für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_PREDICTION_KEY festzulegen, ersetzen Sie <your-prediction-key> durch einen der Schlüssel für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_ENDPOINT festzulegen, ersetzen Sie <your-prediction-endpoint> durch den Endpunkt für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_RESOURCE_ID festzulegen, ersetzen Sie <your-resource-id> durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wir empfehlen die Verwendung der Microsoft Entra ID-Authentifizierung in Verbindung mit verwalteten Identitäten für Azure-Ressourcen, um zu vermeiden, dass Zugangsdaten mit Ihren Anwendungen gespeichert werden, die in der Cloud ausgeführt werden.

Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und veröffentlichen Sie ihn nie öffentlich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, drehen Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe rollenbasierter Zugriffssteuerung und Netzwerkzugriffseinschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.

Weitere Informationen zur Sicherheit von AI-Diensten finden Sie unter Authenticate-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 Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen, einschließlich des Konsolenfensters.

Einrichten

Erstellen einer neuen C#-Anwendung

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

Installieren der Clientbibliothek

Nachdem Sie ein neues Projekt erstellt haben, installieren Sie die Clientbibliothek, indem Sie mit der rechten Maustaste auf die Projektmappe im Projektmappen-Explorer klicken und Manage NuGet Packages auswählen. Wählen Sie Browse im daraufhin geöffneten Paket-Manager aus, und überprüfen Sie dann Include prerelease, 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 "Installieren" aus.

Tipp

Möchten Sie die gesamte Schnellstartcodedatei gleichzeitig anzeigen? Sie finden sie in GitHub, das die Codebeispiele in dieser Schnellstartanleitung enthält.

Öffnen Sie im 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 Methode der Anwendung main Variablen, die die Schlüssel und Endpunkte Ihrer Ressource aus Umgebungsvariablen abrufen. Darüber hinaus deklarieren Sie einige grundlegende Objekte, die später verwendet werden sollen.

// 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 Methode der Anwendung main Aufrufe für die in dieser Schnellstartanleitung verwendeten Methoden hinzu. Sie implementieren diese später.

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 mit einer neuen Methode Schulungs- und Vorhersage-Clients mithilfe Ihres Endpunkts und Ihrer Schlüssel.

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 Benutzerdefinierten Vision-Projekts

Mit diesem nächsten Codebeispiel wird ein Bildklassifizierungsprojekt erstellt. Das erstellte Projekt wird auf der Custom Vision-Website angezeigt. Sehen Sie sich die CreateProject-Methode an, um andere Optionen anzugeben, wenn Sie Ihr Projekt erstellen (im Leitfaden zum Erstellen eines Klassifizierers-Webportals erläutert).

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

Diese Methode definiert die Tags, nach denen Sie das Modell trainieren.

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 Kategorisieren von Bildern

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

Definieren Sie dann eine Hilfsmethode, um die Bilder in diesem Verzeichnis hochzuladen. Möglicherweise müssen Sie das GetFiles Argument bearbeiten, um auf den Speicherort zu verweisen, an dem Ihre Bilder gespeichert werden.

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, indem Sie Tags entsprechend ihrem Ordnerspeicherort anwenden. Die Bilder sind bereits sortiert. Sie können Bilder iterativ oder in einem Batch (bis zu 64 pro Batch) hochladen und kategorisieren. Dieser Codeausschnitt enthält Beispiele für 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 }));

}

Projekt trainieren

Diese Methode erstellt die erste Schulungsiteration im Projekt. Es fragt den Dienst ab, 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

Sie können optional nur eine Teilmenge Ihrer angewendeten Tags trainieren. Möglicherweise möchten Sie dies tun, wenn Sie noch nicht genug von bestimmten Tags angewendet haben, aber Sie haben genug von anderen. Verwenden Sie im TrainProject-Aufruf den trainingParameters Parameter. Erstellen Sie ein TrainingParameters , und legen Sie dessen SelectedTags Eigenschaft auf eine Liste der IDs der tags fest, die Sie verwenden möchten. Das Modell wird trainiert, nur die Tags in dieser Liste zu erkennen.

Veröffentlichen der aktuellen Iteration

Diese Methode stellt die aktuelle Iteration des Modells für die Abfrage zur Verfügung. Sie können den Modellnamen als Verweis verwenden, um Vorhersageanforderungen zu senden. Sie müssen ihren eigenen Wert eingeben für predictionResourceId. Sie finden die Vorhersageressourcen-ID auf dem Tab Properties im Azure-Portal, aufgelistet 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
}

Testen des Vorhersageendpunkts

Dieser Teil des Skripts lädt das Testimage, 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 Ausführung der Anwendung sollte ein Konsolenfenster geöffnet und die folgende Ausgabe geschrieben werden:

Creating new project:
        Uploading images
        Training
Done!

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

Anschließend können Sie überprüfen, ob das Testbild (in "Bilder/Test/") entsprechend markiert ist. Drücken Sie eine beliebige Taste, um die Anwendung zu beenden. Sie können auch zur Website "Custom Vision " zurückkehren und den aktuellen Status Ihres neu erstellten Projekts anzeigen.

Bereinigen von Ressourcen

Wenn Sie ihr eigenes Bildklassifizierungsprojekt implementieren möchten (oder stattdessen ein Objekterkennungsprojekt ausprobieren möchten), können Sie das Strukturidentifikationsprojekt aus diesem Beispiel löschen. Ein kostenloses Abonnement ermöglicht zwei Custom Vision-Projekte.

Navigieren Sie auf der Website Custom Vision zu Projects und wählen Sie den Papierkorb unter "Mein neues Project" aus.

Screenshot eines Bereichs mit der Bezeichnung

Nun haben Sie gesehen, wie jeder Schritt des Objekterkennungsprozesses im Code ausgeführt werden kann. In diesem Beispiel wird eine einzelne Schulungsiteration ausgeführt. Häufig müssen Sie ihr Modell jedoch mehrmals trainieren und testen, um es genauer zu gestalten.

Dieses Handbuch enthält Anweisungen und Beispielcode, die Ihnen bei den ersten Schritten mit der Custom Vision-Clientbibliothek zum Erstellen eines Bildklassifizierungsmodells helfen. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Url des Vorhersageendpunkts des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage zum Erstellen Ihrer eigenen Bilderkennungs-App.

Hinweis

Wenn Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, lesen Sie die browserbasierte Anleitung.

Verwenden Sie die Custom Vision-Clientbibliothek für Go.

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

Referenzdokumentation für (training) und (prediction)

Voraussetzungen

  • Ein Azure-Abonnement. Sie können eine kostenlos erstellen.
  • Wechseln Sie zu 1.8 oder höher.
  • Nachdem Sie Ihr Azure-Abonnement haben, erstellen Sie eine Custom Vision-Ressource im Azure-Portal, um eine Schulungs- und Vorhersageressource zu erstellen.
    • Sie können das kostenlose Preisniveau (F0) verwenden, um den Dienst zu testen und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.

Erstellen von Umgebungsvariablen

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

Wechseln Sie zum Azure-Portal. Wenn die benutzerdefinierten Vision-Ressourcen, die Sie im Abschnitt "Voraussetzungen" erstellt haben, erfolgreich bereitgestellt wurden, wählen Sie unter "Nächste Schritte" die Schaltfläche "Gehe zu Ressource" aus. Sie finden Ihre Schlüssel und Endpunkte auf den Ressourcenschlüssel- und Endpunktseiten unter "Ressourcenverwaltung". Sie müssen sowohl die Schlüssel für Ihre Trainingsressource als auch für Ihre Vorhersageressource zusammen mit den API-Endpunkten abrufen.

Sie finden die Ressourcen-ID der Vorhersage-Ressource auf der Registerkarte Properties im Azure-Portal, aufgelistet als Ressourcen-ID.

Tipp

Sie verwenden https://www.customvision.ai auch, um diese Werte abzurufen. Nachdem Sie sich angemeldet haben, wählen Sie oben rechts das Symbol "Einstellungen" aus. Auf den Einstellungsseiten können Sie alle Schlüssel, Ressourcen-ID und Endpunkte anzeigen.

Um die Umgebungsvariablen festzulegen, öffnen Sie ein Konsolenfenster, und befolgen Sie die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Um die Umgebungsvariable festzulegen, ersetzen Sie VISION_TRAINING KEY durch einen der Schlüssel für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_TRAINING_ENDPOINT festzulegen, ersetzen Sie <your-training-endpoint> durch den Endpunkt für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_PREDICTION_KEY festzulegen, ersetzen Sie <your-prediction-key> durch einen der Schlüssel für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_ENDPOINT festzulegen, ersetzen Sie <your-prediction-endpoint> durch den Endpunkt für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_RESOURCE_ID festzulegen, ersetzen Sie <your-resource-id> durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wir empfehlen die Verwendung der Microsoft Entra ID-Authentifizierung in Verbindung mit verwalteten Identitäten für Azure-Ressourcen, um zu vermeiden, dass Zugangsdaten mit Ihren Anwendungen gespeichert werden, die in der Cloud ausgeführt werden.

Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und veröffentlichen Sie ihn nie öffentlich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, drehen Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe rollenbasierter Zugriffssteuerung und Netzwerkzugriffseinschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.

Weitere Informationen zur Sicherheit von AI-Diensten finden Sie unter Authenticate-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 Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen, einschließlich des Konsolenfensters.

Einrichten

Installiere die Clientbibliothek für benutzerdefinierte Bildverarbeitung

Um eine Bildanalyse-App mit Custom Vision für Go zu schreiben, benötigen Sie die Clientbibliothek des Custom Vision-Dienstes. Führen Sie den folgenden Befehl in PowerShell aus:

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

Oder, falls Sie dep verwenden, führen Sie Folgendes in Ihrem Repository aus:

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

Abrufen der Beispielbilder

In diesem Beispiel werden die Bilder aus dem Repository Foundry Tools Python SDK Samples für GitHub verwendet. Klonen Sie oder laden Sie dieses Repository in Ihre Entwicklungsumgebung herunter. Merken Sie sich den Ordnerspeicherort für einen späteren Schritt.

Erstellen des Projekts "Custom Vision"

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

Fügen Sie Ihrem Skript den folgenden Code hinzu, um ein neues Benutzerdefiniertes Vision-Dienstprojekt zu erstellen.

Sehen Sie sich die CreateProject-Methode an, um andere Optionen anzugeben, wenn Sie Ihr Projekt erstellen (im Leitfaden zum Erstellen eines Klassifizierers-Webportals erläutert).

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

Um Klassifizierungstags für Ihr Projekt zu erstellen, fügen Sie am Ende von sample.go den folgenden Code hinzu:

// 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 Kategorisieren von Bildern

Fügen Sie nach dem Erstellen des Tags den folgenden Code ein, um dem Projekt die Beispielbilder hinzuzufügen. Dieser Code lädt jedes Bild mit dem entsprechenden Tag hoch. Sie können bis zu 64 Bilder in einem einzigen Batch hochladen.

Hinweis

Sie müssen den Pfad zu den Bildern ändern, basierend darauf, wo Sie das Projekt "Foundry Tools Go SDK Samples" zuvor 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() })
}

Projekt trainieren und veröffentlichen

Dieser Code erstellt die erste Iteration des Vorhersagemodells und veröffentlicht diese Iteration dann am Vorhersageendpunkt. Der Name, der der veröffentlichten Iteration zugewiesen wird, kann zum Senden von Vorhersageanforderungen verwendet werden. Eine Iteration ist erst im Prognose-Endpunkt verfügbar, wenn sie veröffentlicht wird.

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 Sie den Vorhersageendpunkt

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 die Anwendung mit dem folgenden Befehl 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%

Anschließend können Sie überprüfen, ob das Testbild (in <base_image_url>/Images/Test/) entsprechend markiert ist. Sie können auch zur Website "Custom Vision " zurückkehren und den aktuellen Status Ihres neu erstellten Projekts anzeigen.

Bereinigen von Ressourcen

Wenn Sie ihr eigenes Bildklassifizierungsprojekt implementieren möchten (oder stattdessen ein Objekterkennungsprojekt ausprobieren möchten), können Sie das Strukturidentifikationsprojekt aus diesem Beispiel löschen. Ein kostenloses Abonnement ermöglicht zwei Custom Vision-Projekte.

Navigieren Sie auf der Website Custom Vision zu Projects und wählen Sie den Papierkorb unter "Mein neues Project" aus.

Screenshot eines Bereichs mit der Bezeichnung

Nun haben Sie gesehen, wie jeder Schritt des Objekterkennungsprozesses im Code ausgeführt werden kann. In diesem Beispiel wird eine einzelne Schulungsiteration ausgeführt. Häufig müssen Sie ihr Modell jedoch mehrmals trainieren und testen, um es genauer zu gestalten.

Erste Schritte mit der Benutzerdefinierten Vision-Clientbibliothek für Java zum Erstellen eines Bildklassifizierungsmodells. Führen Sie die folgenden Schritte aus, um das Paket zu installieren und den Beispielcode für grundlegende Aufgaben auszuprobieren. Verwenden Sie dieses Beispiel als Vorlage zum Erstellen Ihrer eigenen Bilderkennungs-App.

Hinweis

Wenn Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, lesen Sie die browserbasierte Anleitung.

Verwenden Sie die Custom Vision-Bibliothek für Java, um:

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

Reference-Dokumentation | Bibliotheksquellcode für (training) und (prediction)| Artifact (Maven) für (training) und (prediction) | Samples

Voraussetzungen

  • Ein Azure-Abonnement. Sie können eine kostenlos erstellen.
  • Die aktuelle Version des Java Development Kit(JDK).
  • Das Gradle-Buildtool oder ein anderer Abhängigkeits-Manager.
  • Nachdem Sie Ihr Azure-Abonnement haben, erstellen Sie eine Custom Vision-Ressource im Azure-Portal, um eine Schulungs- und Vorhersageressource zu erstellen.
    • Sie können das kostenlose Preisniveau (F0) verwenden, um den Dienst zu testen und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.

Erstellen von Umgebungsvariablen

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

Wechseln Sie zum Azure-Portal. Wenn die benutzerdefinierten Vision-Ressourcen, die Sie im Abschnitt "Voraussetzungen" erstellt haben, erfolgreich bereitgestellt wurden, wählen Sie unter "Nächste Schritte" die Schaltfläche "Gehe zu Ressource" aus. Sie finden Ihre Schlüssel und Endpunkte auf den Ressourcenschlüssel- und Endpunktseiten unter "Ressourcenverwaltung". Sie müssen sowohl die Schlüssel für Ihre Trainingsressource als auch für Ihre Vorhersageressource zusammen mit den API-Endpunkten abrufen.

Sie finden die Ressourcen-ID der Vorhersage-Ressource auf der Registerkarte Properties im Azure-Portal, aufgelistet als Ressourcen-ID.

Tipp

Sie verwenden https://www.customvision.ai auch, um diese Werte abzurufen. Nachdem Sie sich angemeldet haben, wählen Sie oben rechts das Symbol "Einstellungen" aus. Auf den Einstellungsseiten können Sie alle Schlüssel, Ressourcen-ID und Endpunkte anzeigen.

Um die Umgebungsvariablen festzulegen, öffnen Sie ein Konsolenfenster, und befolgen Sie die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Um die Umgebungsvariable festzulegen, ersetzen Sie VISION_TRAINING KEY durch einen der Schlüssel für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_TRAINING_ENDPOINT festzulegen, ersetzen Sie <your-training-endpoint> durch den Endpunkt für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_PREDICTION_KEY festzulegen, ersetzen Sie <your-prediction-key> durch einen der Schlüssel für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_ENDPOINT festzulegen, ersetzen Sie <your-prediction-endpoint> durch den Endpunkt für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_RESOURCE_ID festzulegen, ersetzen Sie <your-resource-id> durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wir empfehlen die Verwendung der Microsoft Entra ID-Authentifizierung in Verbindung mit verwalteten Identitäten für Azure-Ressourcen, um zu vermeiden, dass Zugangsdaten mit Ihren Anwendungen gespeichert werden, die in der Cloud ausgeführt werden.

Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und veröffentlichen Sie ihn nie öffentlich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, drehen Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe rollenbasierter Zugriffssteuerung und Netzwerkzugriffseinschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.

Weitere Informationen zur Sicherheit von AI-Diensten finden Sie unter Authenticate-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 Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen, einschließlich des Konsolenfensters.

Einrichten

Erstellen eines neuen Gradle-Projekts

Erstellen Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und navigieren Sie zu ihr.

mkdir myapp && cd myapp

Führen Sie den gradle init Befehl aus Ihrem Arbeitsverzeichnis aus. Mit diesem Befehl werden wichtige Builddateien für Gradle erstellt, einschließlich build.gradle.kts, die zur Laufzeit zum Erstellen und Konfigurieren Ihrer Anwendung verwendet werden.

gradle init --type basic

Wenn Sie aufgefordert werden, ein DSL auszuwählen, wählen Sie Kotlin aus.

Installieren der Clientbibliothek

Suchen Sie build.gradle.kts , und öffnen Sie sie mit Ihrer bevorzugten IDE oder Ihrem Text-Editor. Kopieren Sie die folgende Buildkonfiguration. Diese Konfiguration definiert das Projekt als Java Anwendung, deren Einstiegspunkt die Klasse CustomVisionQuickstart ist. Sie importiert die benutzerdefinierten Vision-Bibliotheken.

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 zum neuen Ordner, und erstellen Sie eine Datei namens CustomVisionQuickstart.java. Öffnen Sie ihn in Ihrem bevorzugten Editor oder 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 die gesamte Schnellstartcodedatei gleichzeitig anzeigen? Sie finden sie in GitHub, das die Codebeispiele in dieser Schnellstartanleitung enthält.

Erstellen Sie in der Klasse der Anwendung CustomVisionQuickstart Variablen, die die Schlüssel und endpunkte 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

Denken Sie daran, die Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und veröffentlichen Sie sie niemals öffentlich. Verwenden Sie für die Produktion eine sichere Möglichkeit zum Speichern und Zugreifen auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Sicherheitsartikel "Foundry Tools".

Fügen Sie in der Methode der Anwendung main Aufrufe für die in dieser Schnellstartanleitung verwendeten Methoden hinzu. Sie definieren diese später.

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 behandeln einige der wichtigsten Features der Custom Vision Java-Clientbibliothek.

Namen Beschreibung
CustomVisionTrainingClient Diese Klasse behandelt die Erstellung, Schulung und Veröffentlichung Ihrer Modelle.
CustomVisionPredictionClient Diese Klasse behandelt die Abfrage Ihrer Modelle für Bildklassifizierungsvorhersagen.
ImagePrediction Diese Klasse definiert eine einzelne Vorhersage für ein einzelnes Bild. Es enthält Eigenschaften für die Objekt-ID und den Namen und eine Konfidenzbewertung.

Codebeispiele

Diese Codeausschnitte zeigen Ihnen, wie Sie die folgenden Aufgaben mit der Benutzerdefinierten Vision-Clientbibliothek für Java ausführen:

Authentifizieren des Clients

Instanziieren Sie in Ihrer main Methode Trainings- und Vorhersage-Clients mithilfe Ihres Endpunkts und Ihrer Schlüssel.

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

Erstellen eines benutzerdefinierten Vision-Projekts

Diese nächste Methode erstellt ein Bildklassifizierungsprojekt. Das erstellte Projekt wird auf der Zuvor besuchten Custom Vision-Website angezeigt. Sehen Sie sich die CreateProject-Methodenüberladungen an, um andere Optionen anzugeben, wenn Sie Ihr Projekt erstellen (erläutert im Handbuch zum Erstellen eines Detektorwebportals ).

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 Tags zu Ihrem Projekt

Diese Methode definiert die Tags, mit denen Sie das Modell trainieren.

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 Kategorisieren von Bildern

Laden Sie zunächst die Beispielbilder für dieses Projekt herunter. Speichern Sie den Inhalt des Ordners sample Images 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 einzigen 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;
}

Projekt trainieren

Diese Methode erstellt die erste Schulungsiteration im Projekt. Es fragt den Dienst ab, 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

Diese Methode stellt die aktuelle Iteration des Modells für die Abfrage zur Verfügung. Sie können den Modellnamen als Verweis verwenden, um Vorhersageanforderungen zu senden. Sie müssen ihren eigenen Wert eingeben für predictionResourceId. Sie finden die Vorhersageressourcen-ID auf dem Tab Properties im Azure-Portal, aufgelistet 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);
}

Testen des Vorhersageendpunkts

Diese Methode lädt das Testimage, 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:

gradle build

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

gradle run

Bereinigen von Ressourcen

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

Wenn Sie ihr eigenes Bildklassifizierungsprojekt implementieren möchten (oder stattdessen ein Objekterkennungsprojekt ausprobieren möchten), können Sie das Strukturidentifikationsprojekt aus diesem Beispiel löschen. Ein kostenloses Abonnement ermöglicht zwei Custom Vision-Projekte.

Navigieren Sie auf der Website Custom Vision zu Projects und wählen Sie den Papierkorb unter "Mein neues Project" aus.

Screenshot eines Bereichs mit der Bezeichnung

Nun haben Sie gesehen, wie jeder Schritt des Objekterkennungsprozesses im Code ausgeführt werden kann. In diesem Beispiel wird eine einzelne Schulungsiteration ausgeführt. Häufig müssen Sie ihr Modell jedoch mehrmals trainieren und testen, um es genauer zu gestalten.

Dieses Handbuch enthält Anweisungen und Beispielcode, mit dem Sie mit der Clientbibliothek für benutzerdefinierte Vision für Node.js beginnen können, um ein Bildklassifizierungsmodell zu erstellen. Sie können ein Projekt erstellen, Tags hinzufügen, das Projekt trainieren und die Vorhersageendpunkt-URL des Projekts verwenden, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage zum Erstellen Ihrer eigenen Bilderkennungs-App.

Hinweis

Wenn Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, lesen Sie die browserbasierte Anleitung.

Verwenden Sie die Custom Vision-Clientbibliothek für Node.js, um:

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

Referenzdokumentation für (Schulung) und (Vorhersage) | Paket (npm) für (Schulung) und (Vorhersage) | Beispiele

Voraussetzungen

  • Ein Azure-Abonnement. Sie können eine kostenlos erstellen.
  • Die aktuelle Version von Node.js.
  • Nachdem Sie Ihr Azure-Abonnement haben, erstellen Sie eine Custom Vision-Ressource im Azure-Portal, um eine Schulungs- und Vorhersageressource zu erstellen.
    • Sie können das kostenlose Preisniveau (F0) verwenden, um den Dienst zu testen und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.

Erstellen von Umgebungsvariablen

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

Wechseln Sie zum Azure-Portal. Wenn die benutzerdefinierten Vision-Ressourcen, die Sie im Abschnitt "Voraussetzungen" erstellt haben, erfolgreich bereitgestellt wurden, wählen Sie unter "Nächste Schritte" die Schaltfläche "Gehe zu Ressource" aus. Sie finden Ihre Schlüssel und Endpunkte auf den Ressourcenschlüssel- und Endpunktseiten unter "Ressourcenverwaltung". Sie müssen sowohl die Schlüssel für Ihre Trainingsressource als auch für Ihre Vorhersageressource zusammen mit den API-Endpunkten abrufen.

Sie finden die Ressourcen-ID der Vorhersage-Ressource auf der Registerkarte Properties im Azure-Portal, aufgelistet als Ressourcen-ID.

Tipp

Sie verwenden https://www.customvision.ai auch, um diese Werte abzurufen. Nachdem Sie sich angemeldet haben, wählen Sie oben rechts das Symbol "Einstellungen" aus. Auf den Einstellungsseiten können Sie alle Schlüssel, Ressourcen-ID und Endpunkte anzeigen.

Um die Umgebungsvariablen festzulegen, öffnen Sie ein Konsolenfenster, und befolgen Sie die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Um die Umgebungsvariable festzulegen, ersetzen Sie VISION_TRAINING KEY durch einen der Schlüssel für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_TRAINING_ENDPOINT festzulegen, ersetzen Sie <your-training-endpoint> durch den Endpunkt für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_PREDICTION_KEY festzulegen, ersetzen Sie <your-prediction-key> durch einen der Schlüssel für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_ENDPOINT festzulegen, ersetzen Sie <your-prediction-endpoint> durch den Endpunkt für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_RESOURCE_ID festzulegen, ersetzen Sie <your-resource-id> durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wir empfehlen die Verwendung der Microsoft Entra ID-Authentifizierung in Verbindung mit verwalteten Identitäten für Azure-Ressourcen, um zu vermeiden, dass Zugangsdaten mit Ihren Anwendungen gespeichert werden, die in der Cloud ausgeführt werden.

Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und veröffentlichen Sie ihn nie öffentlich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, drehen Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe rollenbasierter Zugriffssteuerung und Netzwerkzugriffseinschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.

Weitere Informationen zur Sicherheit von AI-Diensten finden Sie unter Authenticate-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 Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen, einschließlich des Konsolenfensters.

Einrichten

Erstellen einer neuen Node.js Anwendung

Erstellen Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und navigieren Sie zu ihr.

mkdir myapp && cd myapp

Führen Sie den npm init Befehl aus, um eine Knotenanwendung mit einer package.json Datei zu erstellen. Drücken Sie mehrmals die EINGABETASTE, um den Vorgang abzuschließen.

npm init

Installieren der Clientbibliothek

Um eine Bildanalyse-App mit Custom Vision für Node.js zu schreiben, benötigen Sie die Custom Vision npm-Pakete. Führen Sie zum Installieren den folgenden Befehl in PowerShell aus:

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

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

Erstellen Sie eine Datei mit dem Namen 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 die gesamte Schnellstartcodedatei gleichzeitig anzeigen? Sie finden sie in GitHub, das die Codebeispiele in dieser Schnellstartanleitung enthält.

Erstellen Sie Variablen für den 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 den Projektnamen und einen Timeoutparameter für asynchrone Aufrufe hinzu.

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

Objektmodell

Namen Beschreibung
TrainingAPIClient Diese Klasse behandelt die Erstellung, Schulung und Veröffentlichung Ihrer Modelle.
PredictionAPIClient Diese Klasse behandelt die Abfrage Ihrer Modelle für Bildklassifizierungsvorhersagen.
Vorhersage Diese Schnittstelle definiert eine einzelne Vorhersage für ein einzelnes Bild. Es enthält Eigenschaften für die Objekt-ID und den Namen und eine Konfidenzbewertung.

Codebeispiele

Diese Codeausschnitte zeigen Ihnen, wie Sie die folgenden Aufgaben mit der Custom Vision-Clientbibliothek für JavaScript ausführen:

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 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 Benutzerdefinierten Vision-Projekts

Starten Sie eine neue Funktion, um alle Aufrufe Ihrer benutzerdefinierten Funktion für Vision zu verwalten. Fügen Sie den folgenden Code hinzu, um ein neues Custom Vision-Dienstprojekt zu erstellen.

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

Hinzufügen von Tags zum Projekt

Um Klassifizierungstags zu Ihrem Projekt zu erstellen, fügen Sie Ihrer Funktion den folgenden Code hinzu:

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

Hochladen und Kategorisieren von Bildern

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

Fügen Sie nach dem Erstellen des Tags den folgenden Code ein, um dem Projekt die Beispielbilder hinzuzufügen. Dieser Code lädt jedes 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 Speicherort ändern, an dem Sie das Repository "Foundry Tools Python SDK Samples" heruntergeladen haben.

Projekt trainieren

Dieser Code erstellt die erste Iteration des Vorhersagemodells.

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

Dieser Code veröffentlicht die trainierte Iteration an den Vorhersageendpunkt. Der Name, der der veröffentlichten Iteration zugewiesen wird, kann zum Senden von Vorhersageanforderungen verwendet werden. Eine Iteration ist erst im Prognose-Endpunkt verfügbar, wenn sie veröffentlicht wird.

// 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 Der 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 dann die Custom Vision-Funktion und rufen Sie sie auf.

})()

Ausführen der Anwendung

Führen Sie die Anwendung mit dem node Befehl in der 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%

Anschließend können Sie überprüfen, ob das Testbild (in <sampleDataRoot>/Test/) entsprechend markiert ist. Sie können auch zur Website "Custom Vision " zurückkehren und den aktuellen Status Ihres neu erstellten Projekts anzeigen.

Wenn Sie ihr eigenes Bildklassifizierungsprojekt implementieren möchten (oder stattdessen ein Objekterkennungsprojekt ausprobieren möchten), können Sie das Strukturidentifikationsprojekt aus diesem Beispiel löschen. Ein kostenloses Abonnement ermöglicht zwei Custom Vision-Projekte.

Navigieren Sie auf der Website Custom Vision zu Projects und wählen Sie den Papierkorb unter "Mein neues Project" aus.

Screenshot eines Bereichs mit der Bezeichnung

In diesem Handbuch wird gezeigt, wie jeder Schritt des Objekterkennungsprozesses im Code ausgeführt werden kann. In diesem Beispiel wird eine einzelne Schulungsiteration ausgeführt. Häufig müssen Sie ihr Modell jedoch mehrmals trainieren und testen, um es genauer zu gestalten.

Erste Schritte mit der Benutzerdefinierten Vision-Clientbibliothek für Python. Führen Sie die folgenden Schritte aus, um das Paket zu installieren und den Beispielcode zum Erstellen eines Imageklassifizierungsmodells auszuprobieren. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Url des Vorhersageendpunkts des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage zum Erstellen Ihrer eigenen Bilderkennungs-App.

Hinweis

Wenn Sie ein Klassifizierungsmodell erstellen und trainieren möchten, ohne Code zu schreiben, lesen Sie die browserbasierte Anleitung.

Verwenden Sie die Custom Vision-Clientbibliothek für Python, um:

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

Reference-Dokumentation | Bibliotheksquellcode | Package (PyPI) | Beispiele

Voraussetzungen

  • Ein Azure-Abonnement. Sie können eine kostenlos erstellen.
  • Python 3.x.
    • Ihre Python-Installation sollte pip enthalten. Sie können überprüfen, ob pip installiert ist, indem Sie pip --version auf der Befehlszeile ausführen. Erhalten Sie pip durch die Installation der neuesten Version von Python.
  • Nachdem Sie Ihr Azure-Abonnement haben, erstellen Sie eine Custom Vision-Ressource im Azure-Portal, um eine Schulungs- und Vorhersageressource zu erstellen.
    • Sie können das kostenlose Preisniveau (F0) verwenden, um den Dienst zu testen und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.

Erstellen von Umgebungsvariablen

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

Wechseln Sie zum Azure-Portal. Wenn die benutzerdefinierten Vision-Ressourcen, die Sie im Abschnitt "Voraussetzungen" erstellt haben, erfolgreich bereitgestellt wurden, wählen Sie unter "Nächste Schritte" die Schaltfläche "Gehe zu Ressource" aus. Sie finden Ihre Schlüssel und Endpunkte auf den Ressourcenschlüssel- und Endpunktseiten unter "Ressourcenverwaltung". Sie müssen sowohl die Schlüssel für Ihre Trainingsressource als auch für Ihre Vorhersageressource zusammen mit den API-Endpunkten abrufen.

Sie finden die Ressourcen-ID der Vorhersage-Ressource auf der Registerkarte Properties im Azure-Portal, aufgelistet als Ressourcen-ID.

Tipp

Sie verwenden https://www.customvision.ai auch, um diese Werte abzurufen. Nachdem Sie sich angemeldet haben, wählen Sie oben rechts das Symbol "Einstellungen" aus. Auf den Einstellungsseiten können Sie alle Schlüssel, Ressourcen-ID und Endpunkte anzeigen.

Um die Umgebungsvariablen festzulegen, öffnen Sie ein Konsolenfenster, und befolgen Sie die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Um die Umgebungsvariable festzulegen, ersetzen Sie VISION_TRAINING KEY durch einen der Schlüssel für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_TRAINING_ENDPOINT festzulegen, ersetzen Sie <your-training-endpoint> durch den Endpunkt für Ihre Schulungsressource.
  • Um die Umgebungsvariable VISION_PREDICTION_KEY festzulegen, ersetzen Sie <your-prediction-key> durch einen der Schlüssel für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_ENDPOINT festzulegen, ersetzen Sie <your-prediction-endpoint> durch den Endpunkt für Ihre Vorhersageressource.
  • Um die Umgebungsvariable VISION_PREDICTION_RESOURCE_ID festzulegen, ersetzen Sie <your-resource-id> durch die Ressourcen-ID für Ihre Vorhersageressource.

Wichtig

Wir empfehlen die Verwendung der Microsoft Entra ID-Authentifizierung in Verbindung mit verwalteten Identitäten für Azure-Ressourcen, um zu vermeiden, dass Zugangsdaten mit Ihren Anwendungen gespeichert werden, die in der Cloud ausgeführt werden.

Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und veröffentlichen Sie ihn nie öffentlich. Wenn Sie API-Schlüssel verwenden, speichern Sie sie sicher in Azure Key Vault, drehen Sie die Schlüssel regelmäßig, und beschränken Sie den Zugriff auf Azure Key Vault mithilfe rollenbasierter Zugriffssteuerung und Netzwerkzugriffseinschränkungen. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.

Weitere Informationen zur Sicherheit von AI-Diensten finden Sie unter Authenticate-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 Umgebungsvariablen hinzugefügt haben, müssen Sie möglicherweise alle ausgeführten Programme neu starten, die die Umgebungsvariablen lesen, einschließlich des Konsolenfensters.

Einrichten

Installieren der Clientbibliothek

Zum Schreiben einer Bildanalyse-App mit custom Vision for Python benötigen Sie die Clientbibliothek "Custom Vision". Führen Sie nach der Installation von Python den folgenden Befehl in PowerShell oder 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 die gesamte Schnellstartcodedatei gleichzeitig anzeigen? Sie finden sie in GitHub, das die Codebeispiele in dieser Schnellstartanleitung enthält.

Erstellen Sie Variablen für den Azure Endpunkt und schlüssel Ihrer Ressource.

# retrieve environment variables
ENDPOINT = os.environ["VISION_TRAINING_ENDPOINT"]
prediction_endpoint = os.environ["VISION_PREDICTION_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

Namen Beschreibung
CustomVisionTrainingClient Diese Klasse behandelt die Erstellung, Schulung und Veröffentlichung Ihrer Modelle.
CustomVisionPredictionClient Diese Klasse behandelt die Abfrage Ihrer Modelle für Bildklassifizierungsvorhersagen.
ImagePrediction Diese Klasse definiert eine einzelne Objektvorhersage für ein einzelnes Bild. Es enthält Eigenschaften für die Objekt-ID und den Namen, die Position des Begrenzungsrahmens des Objekts und einen Konfidenzwert.

Codebeispiele

Diese Codeausschnitte zeigen Ihnen, wie Sie die folgenden Schritte mit der Clientbibliothek "Custom Vision" für Python ausführen:

Authentifizieren des Clients

Instanziieren Sie einen Schulungs- und Vorhersageclient mit Ihrem Endpunkt und Ihren Schlüsseln. Erstellen Sie ApiKeyServiceClientCredentials Objekte mit Ihren Schlüsseln, und verwenden Sie sie mit Ihrem Endpunkt, um ein CustomVisionTrainingClient - und 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(prediction_endpoint, prediction_credentials)

Erstellen eines neuen Benutzerdefinierten Vision-Projekts

Fügen Sie Ihrem Skript den folgenden Code hinzu, um ein neues Benutzerdefiniertes Vision-Dienstprojekt zu erstellen.

Sehen Sie sich die create_project-Methode an, um weitere Optionen beim Erstellen Ihres Projekts festzulegen (erläutert im Leitfaden des Webportals zum Erstellen eines Klassifizierers).

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

Um Ihrem Projekt Klassifizierungstags hinzuzufügen, fügen Sie den folgenden Code hinzu:

# 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 Kategorisieren von Bildern

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

Fügen Sie nach dem Erstellen des Tags den folgenden Code ein, um dem Projekt die Beispielbilder hinzuzufügen. Dieser Code lädt jedes Bild mit dem entsprechenden Tag hoch. Sie können bis zu 64 Bilder in einem einzigen 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 darauf ändern, wo Sie das Foundry Tools Python SDK Samples-Repository heruntergeladen haben.

Projekt trainieren

Dieser Code erstellt die erste Iteration des Vorhersagemodells.

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

Sie können optional nur eine Teilmenge Ihrer angewendeten Tags trainieren. Möglicherweise möchten Sie dies tun, wenn Sie noch nicht genug von bestimmten Tags angewendet haben, aber Sie haben genug von anderen. Legen Sie im aufruf train_project den optionalen Parameter selected_tags auf eine Liste der ID-Zeichenfolgen der zu verwendenden Tags fest. Das Modell wird trainiert, nur die Tags in dieser Liste zu erkennen.

Veröffentlichen der aktuellen Iteration

Eine Iteration ist erst im Prognose-Endpunkt verfügbar, wenn sie veröffentlicht wird. Der folgende Code stellt die aktuelle Iteration des Modells für die Abfrage zur Verfügung.

# 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(prediction_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 die Anwendung mit dem folgenden Befehl 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%

Anschließend können Sie überprüfen, ob das Testbild (in <base_image_location>/images/Test/) entsprechend markiert ist. Sie können auch zur Website "Custom Vision " zurückkehren und den aktuellen Status Ihres neu erstellten Projekts anzeigen.

Bereinigen von Ressourcen

Wenn Sie ihr eigenes Bildklassifizierungsprojekt implementieren möchten (oder stattdessen ein Objekterkennungsprojekt ausprobieren möchten), können Sie das Strukturidentifikationsprojekt aus diesem Beispiel löschen. Ein kostenloses Abonnement ermöglicht zwei Custom Vision-Projekte.

Navigieren Sie auf der Website Custom Vision zu Projects und wählen Sie den Papierkorb unter "Mein neues Project" aus.

Screenshot eines Bereichs mit der Bezeichnung

Jetzt haben Sie gesehen, wie jeder Schritt des Bildklassifizierungsprozesses im Code ausgeführt werden kann. In diesem Beispiel wird eine einzelne Schulungsiteration ausgeführt. Häufig müssen Sie ihr Modell jedoch mehrmals trainieren und testen, um es genauer zu gestalten.

Erste Schritte mit der REST-API für benutzerdefinierte Vision. Führen Sie die folgenden Schritte aus, um die API aufzurufen und ein Imageklassifizierungsmodell zu erstellen. Sie erstellen ein Projekt, fügen Tags hinzu, trainieren das Projekt und verwenden die Url des Vorhersageendpunkts des Projekts, um es programmgesteuert zu testen. Verwenden Sie dieses Beispiel als Vorlage zum Erstellen Ihrer eigenen Bilderkennungs-App.

Hinweis

Benutzerdefinierte Vision wird am einfachsten über ein Clientbibliotheks-SDK oder über die browserbasierte Anleitung verwendet.

Verwenden Sie die Benutzerdefinierte Vision-Clientbibliothek für die REST-API, um:

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

Voraussetzungen

  • Ein Azure-Abonnement. Sie können eine kostenlos erstellen.
  • Nachdem Sie Ihr Azure-Abonnement haben, erstellen Sie eine Custom Vision-Ressource im Azure-Portal, um eine Schulungs- und Vorhersageressource zu erstellen.
    • Sie benötigen den Schlüssel und endpunkt aus den Ressourcen, die Sie erstellen, um Ihre Anwendung mit Custom Vision zu verbinden. Sie fügen Ihren Schlüssel und Endpunkt später in der Schnellstartanleitung in den Code ein.
    • Sie können das kostenlose Preisniveau (F0) verwenden, um den Dienst zu testen und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.
  • PowerShell, Version 6.0+, oder eine ähnliche Befehlszeilenanwendung.

Erstellen eines neuen Benutzerdefinierten Vision-Projekts

Sie verwenden einen Befehl wie den folgenden, 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 die folgenden Änderungen vor:

  • Ersetzen Sie {subscription key} durch Ihren gültigen Schlüssel.
  • 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 der regionalen Endpunkte finden Sie unter benutzerdefinierte Unterdomänennamen für Foundry Tools.

  • Ersetzen Sie {name} durch den Namen Ihres Projekts.
  • Legen Sie optional andere URL-Parameter fest, um zu konfigurieren, welche Art von Modell Ihr Projekt verwendet. Optionen finden Sie unter Create Project API.

Es wird eine JSON-Antwort wie im folgenden Beispiel angezeigt. 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, auf die Sie das Modell trainieren.

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

Wiederholen Sie diesen Vorgang für alle Tags, die Sie in Ihrem Projekt verwenden möchten. Wenn Sie die bereitgestellten Beispielbilder verwenden, fügen Sie die Tags "Hemlock" und "Japanese Cherry".

Es wird eine JSON-Antwort wie im folgenden Beispiel angezeigt. 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 Kategorisieren von Bildern

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

Verwenden Sie den folgenden Befehl, um die Bilder hochzuladen und Tags anzuwenden. einmal für die "Hemlock"-Bilder und separat für die "Japanische Kirsche" Bilder. Weitere Optionen finden Sie in der Daten-API zum Erstellen von Bildern .

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 erneut Ihre eigene Schlüssel- und Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen sie {tagArray} durch die ID eines Tags.
  • Füllen Sie dann den Textkörper der Anforderung mit den Binärdaten der Bilder auf, die Sie kategorisieren möchten.

Projekt trainieren

Diese Methode trainiert das Modell für die hochgeladenen markierten Bilder und gibt eine ID für die aktuelle Projektiteration zurück.

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 erneut Ihre eigene Schlüssel- und Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen sie {tagArray} durch die ID eines Tags.
  • Füllen Sie dann den Textkörper der Anforderung mit den Binärdaten der Bilder auf, die Sie kategorisieren möchten.
  • Verwenden Sie optional andere URL-Parameter. Optionen finden Sie in der API Train Project.

Tipp

Trainieren mit ausgewählten Tags

Sie können optional nur eine Teilmenge Ihrer angewendeten Tags trainieren. Möglicherweise möchten Sie dies tun, wenn Sie noch nicht genug von bestimmten Tags angewendet haben, aber Sie haben genug von anderen. Fügen Sie den optionalen JSON-Inhalt dem Textkörper Ihrer Anforderung hinzu. Füllen Sie das "selectedTags" Array mit den IDs der zu verwendenden Tags auf.

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

Die JSON-Antwort enthält Informationen zu Ihrem trainierten Projekt, einschließlich der 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

Diese Methode stellt die aktuelle Iteration des Modells für die Abfrage zur Verfügung. Sie verwenden den zurückgegebenen Modellnamen als Verweis 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 erneut Ihre eigene Schlüssel- und Endpunkt-URL ein.
  • Ersetzen Sie {projectId} durch Ihre eigene Projekt-ID.
  • Ersetzen Sie {iterationId} durch die im vorherigen Schritt zurückgegebene ID.
  • Ersetzen Sie {publishedName} den Namen, den Sie Ihrem Vorhersagemodell zuweisen möchten.
  • Ersetzen Sie {predictionId} durch Ihre eigene Vorhersageressourcen-ID. Sie finden die Vorhersageressourcen-ID auf dem Tab Properties im Azure-Portal, aufgelistet als Resource ID.
  • Verwenden Sie optional andere URL-Parameter. Siehe die Iteration-API veröffentlichen.

Testen des Vorhersageendpunkts

Verwenden Sie schließlich diesen Befehl, um Ihr trainiertes Modell zu testen, indem Sie ein neues Bild hochladen, um es mit Tags zu klassifizieren. 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 erneut Ihre eigene Schlüssel- und 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.
  • Verwenden Sie optional andere URL-Parameter. Siehe die Bildklassifizierungs-API.

Die zurückgegebene JSON-Antwort listet die einzelnen Tags auf, die das Modell auf Ihr Bild angewendet hat, zusammen mit den Wahrscheinlichkeitsergebnissen für jedes 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"
    }
  ]
}

Wenn Sie ihr eigenes Bildklassifizierungsprojekt implementieren möchten (oder stattdessen ein Objekterkennungsprojekt ausprobieren möchten), können Sie das Strukturidentifikationsprojekt aus diesem Beispiel löschen. Ein kostenloses Abonnement ermöglicht zwei Custom Vision-Projekte.

Navigieren Sie auf der Website Custom Vision zu Projects und wählen Sie den Papierkorb unter "Mein neues Project" aus.

Screenshot eines Bereichs mit der Bezeichnung

Jetzt haben Sie jeden Schritt des Bildklassifizierungsprozesses mithilfe der REST-API abgeschlossen. In diesem Beispiel wird eine einzelne Schulungsiteration ausgeführt. Häufig müssen Sie ihr Modell jedoch mehrmals trainieren und testen, um es genauer zu gestalten.