Szybki start: tworzenie projektu klasyfikacji obrazów przy użyciu biblioteki klienta usługi Custom Vision lub interfejsu API REST

Wprowadzenie do biblioteki klienta usługi Custom Vision dla platformy .NET. Wykonaj następujące kroki, aby zainstalować pakiet i wypróbować przykładowy kod tworzenia modelu klasyfikacji obrazów. Utworzysz projekt, dodasz tagi, wytrenujesz projekt i użyjesz adresu URL punktu końcowego przewidywania projektu, aby przetestować go programowo. Użyj tego przykładu jako szablonu do tworzenia własnej aplikacji do rozpoznawania obrazów.

Uwaga

Jeśli chcesz skompilować i wytrenować model klasyfikacji bez pisania kodu, zobacz zamiast tego wskazówki oparte na przeglądarce.

Dokumentacja referencyjna | Kod źródłowy biblioteki (trenowanie)(przewidywanie) | Package (NuGet) (training)(prediction) | Samples

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Środowisko IDE programu Visual Studio lub bieżąca wersja platformy .NET Core.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Custom Vision w witrynie Azure Portal, aby utworzyć zasób trenowania i przewidywania.
    • Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Tworzenie zmiennych środowiskowych

W tym przykładzie napiszesz poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.

Przejdź do portalu Azure Portal. Jeśli zasoby usługi Custom Vision utworzone w sekcji Wymagania wstępne zostały wdrożone pomyślnie, wybierz przycisk Przejdź do zasobu w obszarze Następne kroki. Klucze i punkty końcowe można znaleźć na stronach kluczy i punktów końcowych zasobów w obszarze zarządzanie zasobami. Musisz pobrać klucze zarówno dla zasobów szkoleniowych, jak i przewidywania, wraz z punktami końcowymi interfejsu API.

Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu przewidywania w witrynie Azure Portal, na liście identyfikatora zasobu.

Napiwek

Możesz również użyć https://www.customvision.ai/ polecenia , aby uzyskać te wartości. Po zalogowaniu wybierz ikonę Ustawienia w prawym górnym rogu. Na stronach Ustawienie można wyświetlić wszystkie klucze, identyfikator zasobu i punkty końcowe.

Uwaga

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak usługa Azure Key Vault, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  1. Aby ustawić zmienną VISION_TRAINING KEY środowiskową, zastąp your-training-key element jednym z kluczy zasobu szkoleniowego.
  2. Aby ustawić zmienną VISION_TRAINING_ENDPOINT środowiskową, zastąp your-training-endpoint element punktem końcowym zasobu szkoleniowego.
  3. Aby ustawić zmienną VISION_PREDICTION_KEY środowiskową, zastąp your-prediction-key element jednym z kluczy zasobu przewidywania.
  4. Aby ustawić zmienną VISION_PREDICTION_ENDPOINT środowiskową, zastąp your-prediction-endpoint element punktem końcowym zasobu przewidywania.
  5. Aby ustawić zmienną VISION_PREDICTION_RESOURCE_ID środowiskową, zastąp your-resource-id wartość identyfikatorem zasobu przewidywania.
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

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą odczytywać zmienne środowiskowe, w tym okno konsoli.

Konfigurowanie

Tworzenie nowej aplikacji w języku C#

Za pomocą programu Visual Studio utwórz nową aplikację .NET Core.

Instalowanie biblioteki klienta

Po utworzeniu nowego projektu zainstaluj bibliotekę klienta, klikając prawym przyciskiem myszy rozwiązanie projektu w Eksplorator rozwiązań i wybierając polecenie Zarządzaj pakietami NuGet. W menedżerze pakietów, który zostanie otwarty, wybierz pozycję Przeglądaj, zaznacz pozycję Uwzględnij wersję wstępną i wyszukaj Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training ciąg i Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. Wybierz najnowszą wersję, a następnie pozycję Zainstaluj.

Napiwek

Czy chcesz wyświetlić cały plik z kodem przewodnika Szybki start od razu? Można go znaleźć w witrynie GitHub, która zawiera przykłady kodu z tego przewodnika Szybki start.

W katalogu projektu otwórz plik program.cs i dodaj następujące using dyrektywy:

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;

W metodzie Main aplikacji utwórz zmienne, które pobierają klucze i punkty końcowe zasobu ze zmiennych środowiskowych. Zadeklarujesz również niektóre podstawowe obiekty, które będą używane później.

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

W metodzie Main aplikacji dodaj wywołania metod używanych w tym przewodniku Szybki start. Zostaną one zaimplementowane później.

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

Uwierzytelnianie użytkownika

W nowej metodzie utwórz wystąpienie klientów trenowania i przewidywania przy użyciu punktu końcowego i kluczy.

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

Tworzenie nowego projektu usługi Custom Vision

Ten następny fragment kodu tworzy projekt klasyfikacji obrazów. Utworzony projekt zostanie wyświetlony w witrynie internetowej usługi Custom Vision. Zobacz metodę CreateProject , aby określić inne opcje podczas tworzenia projektu (objaśnione w przewodniku Tworzenie portalu internetowego klasyfikatora ).

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

Dodawanie tagów do projektu

Ta metoda definiuje tagi, na których będzie trenowany model.

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

Przekazywanie i tagowanie obrazów

Najpierw pobierz przykładowe obrazy dla tego projektu. Zapisz zawartość folderu Sample Images na urządzeniu lokalnym.

Następnie zdefiniuj metodę pomocnika w celu przekazania obrazów w tym katalogu. Może być konieczne edytowanie argumentu GetFiles w celu wskazania lokalizacji, w której są zapisywane obrazy.

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

Następnie zdefiniuj metodę przekazywania obrazów, stosując tagi zgodnie z ich lokalizacją folderu (obrazy są już posortowane). Obrazy można przekazywać i tagować iteracyjnie lub w partii (do 64 na partię). Ten fragment kodu zawiera przykłady obu tych fragmentów kodu.

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

}

Szkolenie projektu

Ta metoda tworzy pierwszą iterację szkoleniową w projekcie. Wysyła zapytanie do usługi do momentu ukończenia trenowania.

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

Napiwek

Trenowanie przy użyciu wybranych tagów

Opcjonalnie możesz trenować tylko w podzestawie zastosowanych tagów. Możesz to zrobić, jeśli nie zastosowano jeszcze wystarczającej liczby niektórych tagów, ale masz wystarczająco dużo innych. W wywołaniu TrainProject użyj parametru trainingParameters . Skonstruuj właściwość TrainingParameters i ustaw jej właściwość SelectedTags na listę identyfikatorów tagów, których chcesz użyć. Model będzie trenował tak, aby rozpoznawał tylko tagi na tej liście.

Publikowanie bieżącej iteracji

Ta metoda udostępnia bieżącą iterację modelu na potrzeby wykonywania zapytań. Możesz użyć nazwy modelu jako odwołania do wysyłania żądań przewidywania. Musisz wprowadzić własną wartość dla predictionResourceId. Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu w witrynie Azure Portal, na liście identyfikatora zasobu.

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
}

Testowanie punktu końcowego przewidywania

Ta część skryptu ładuje obraz testowy, wysyła zapytanie do punktu końcowego modelu oraz przekazuje dane przewidywania do konsoli.

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

Uruchamianie aplikacji

Uruchom aplikację, klikając przycisk Debuguj w górnej części okna IDE.

Po uruchomieniu aplikacja powinna otworzyć okno konsoli i zapisać w nim następujące dane wyjściowe:

Creating new project:
        Uploading images
        Training
Done!

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

Następnie możesz sprawdzić, czy obraz testowy (znajdujący się w folderze Images/Test/) został odpowiednio otagowany. Naciśnij dowolny klawisz, aby zakończyć działanie aplikacji. Możesz też wrócić do witryny internetowej Custom Vision i wyświetlić bieżący stan nowo utworzonego projektu.

Czyszczenie zasobów

Jeśli chcesz wdrożyć swój własny projekt klasyfikacji obrazów (lub zamiast tego projektu wypróbować projekt wykrywania obiektów), możesz usunąć z tego przykładu projekt identyfikacji drzewa. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.

W witrynie internetowej Custom Vision przejdź do obszaru Projects (Projekty) i wybierz ikonę kosza w obszarze My New Project (Mój nowy projekt).

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

Następne kroki

Teraz wykonano każdy krok procesu klasyfikacji obrazów w kodzie. Ten przykład wykonuje pojedynczą iterację trenowania, ale często trzeba będzie trenować i testować model wielokrotnie, aby był bardziej dokładny.

Ten przewodnik zawiera instrukcje i przykładowy kod, który ułatwia rozpoczęcie korzystania z biblioteki klienta usługi Custom Vision dla języka Go w celu utworzenia modelu klasyfikacji obrazów. Utworzysz projekt, dodasz tagi, wytrenujesz projekt i użyjesz adresu URL punktu końcowego przewidywania projektu, aby programowo go przetestować. Użyj tego przykładu jako szablonu do tworzenia własnej aplikacji do rozpoznawania obrazów.

Uwaga

Jeśli chcesz skompilować i wytrenować model klasyfikacji bez pisania kodu, zobacz zamiast tego wskazówki oparte na przeglądarce.

Użyj biblioteki klienta usługi Custom Vision dla języka Go, aby:

  • Tworzenie nowego projektu usługi Custom Vision
  • Dodawanie tagów do projektu
  • Przekazywanie i tagowanie obrazów
  • Szkolenie projektu
  • Publikowanie bieżącej iteracji
  • Testowanie punktu końcowego przewidywania

Dokumentacja referencyjna (szkolenie)(przewidywanie)

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Go 1.8+
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Custom Vision w witrynie Azure Portal, aby utworzyć zasób trenowania i przewidywania.
    • Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Tworzenie zmiennych środowiskowych

W tym przykładzie napiszesz poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.

Przejdź do portalu Azure Portal. Jeśli zasoby usługi Custom Vision utworzone w sekcji Wymagania wstępne zostały wdrożone pomyślnie, wybierz przycisk Przejdź do zasobu w obszarze Następne kroki. Klucze i punkty końcowe można znaleźć na stronach kluczy i punktów końcowych zasobów w obszarze zarządzanie zasobami. Musisz pobrać klucze zarówno dla zasobów szkoleniowych, jak i przewidywania, wraz z punktami końcowymi interfejsu API.

Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu przewidywania w witrynie Azure Portal, na liście identyfikatora zasobu.

Napiwek

Możesz również użyć https://www.customvision.ai/ polecenia , aby uzyskać te wartości. Po zalogowaniu wybierz ikonę Ustawienia w prawym górnym rogu. Na stronach Ustawienie można wyświetlić wszystkie klucze, identyfikator zasobu i punkty końcowe.

Uwaga

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak usługa Azure Key Vault, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  1. Aby ustawić zmienną VISION_TRAINING KEY środowiskową, zastąp your-training-key element jednym z kluczy zasobu szkoleniowego.
  2. Aby ustawić zmienną VISION_TRAINING_ENDPOINT środowiskową, zastąp your-training-endpoint element punktem końcowym zasobu szkoleniowego.
  3. Aby ustawić zmienną VISION_PREDICTION_KEY środowiskową, zastąp your-prediction-key element jednym z kluczy zasobu przewidywania.
  4. Aby ustawić zmienną VISION_PREDICTION_ENDPOINT środowiskową, zastąp your-prediction-endpoint element punktem końcowym zasobu przewidywania.
  5. Aby ustawić zmienną VISION_PREDICTION_RESOURCE_ID środowiskową, zastąp your-resource-id wartość identyfikatorem zasobu przewidywania.
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

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą odczytywać zmienne środowiskowe, w tym okno konsoli.

Konfigurowanie

Instalowanie biblioteki klienta usługi Custom Vision

Aby napisać aplikację do analizy obrazów za pomocą usługi Custom Vision for Go, potrzebujesz biblioteki klienta usługi Custom Vision. Uruchom następujące polecenie w programie PowerShell:

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

lub jeśli używasz polecenia dep, w repozytorium uruchom polecenie:

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

Pobieranie przykładowych obrazów

W tym przykładzie użyto obrazów z repozytorium przykładów zestawu SDK języka Python usług Azure AI w witrynie GitHub. Sklonuj lub pobierz to repozytorium do swojego środowiska projektowego. Zapamiętaj jego lokalizację folderu w późniejszym kroku.

Tworzenie projektu usługi Custom Vision

Utwórz nowy plik o nazwie sample.go w preferowanym katalogu projektu i otwórz go w preferowanym edytorze kodu.

Dodaj następujący kod do skryptu, aby utworzyć nowy projekt Custom Vision Service.

Zobacz metodę CreateProject , aby określić inne opcje podczas tworzenia projektu (objaśnione w przewodniku Tworzenie portalu internetowego klasyfikatora ).

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

Tworzenie tagów w projekcie

Aby utworzyć tagi klasyfikacji dla projektu, dodaj następujący kod na końcu pliku sample.go:

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

Przekazywanie i tagowanie obrazów

Aby dodać przykładowe obrazy do projektu, po utworzeniu tagów wstaw następujący kod. Ten kod przekazuje każdy obraz z odpowiednim tagiem. W jednej partii można przekazać maksymalnie 64 obrazy.

Uwaga

Musisz zmienić ścieżkę do obrazów na podstawie lokalizacji, w której pobrano wcześniej projekt przykładów zestawu SDK języka Go usług Azure AI.

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

Trenowanie i publikowanie projektu

Ten kod tworzy pierwszą iterację modelu przewidywania, a następnie publikuje iterację w punkcie końcowym przewidywania. Nazwa nadana opublikowanej iteracji może służyć do wysyłania żądań przewidywania. Iteracja nie jest dostępna w punkcie końcowym przewidywania, dopóki nie zostanie opublikowana.

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

Używanie punktu końcowego przewidywania

Aby wysłać obraz do punktu końcowego przewidywania i uzyskać przewidywanie, dodaj na końcu pliku następujący kod:

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

Uruchamianie aplikacji

Uruchom plik sample.go.

go run sample.go

Dane wyjściowe aplikacji powinny być podobne do poniższego tekstu:

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%

Następnie możesz sprawdzić, czy obraz testowy (znaleziony w <base_image_url>/Images/Test/) jest odpowiednio oznakowany. Możesz też wrócić do witryny internetowej Custom Vision i wyświetlić bieżący stan nowo utworzonego projektu.

Czyszczenie zasobów

Jeśli chcesz wdrożyć swój własny projekt klasyfikacji obrazów (lub zamiast tego projektu wypróbować projekt wykrywania obiektów), możesz usunąć z tego przykładu projekt identyfikacji drzewa. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.

W witrynie internetowej Custom Vision przejdź do obszaru Projects (Projekty) i wybierz ikonę kosza w obszarze My New Project (Mój nowy projekt).

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

Następne kroki

Teraz wiesz już, jak każdy krok procesu wykrywania obiektów można wykonać w kodzie. Ten przykład wykonuje pojedynczą iterację trenowania, ale często trzeba będzie trenować i testować model wielokrotnie, aby był bardziej dokładny.

Rozpocznij korzystanie z biblioteki klienta usługi Custom Vision dla języka Java w celu utworzenia modelu klasyfikacji obrazów. Wykonaj następujące kroki, aby zainstalować pakiet i wypróbować przykładowy kod dla podstawowych zadań. Użyj tego przykładu jako szablonu do tworzenia własnej aplikacji do rozpoznawania obrazów.

Uwaga

Jeśli chcesz skompilować i wytrenować model klasyfikacji bez pisania kodu, zobacz zamiast tego wskazówki oparte na przeglądarce.

Użyj biblioteki klienta usługi Custom Vision dla języka Java, aby:

  • Tworzenie nowego projektu usługi Custom Vision
  • Dodawanie tagów do projektu
  • Przekazywanie i tagowanie obrazów
  • Szkolenie projektu
  • Publikowanie bieżącej iteracji
  • Testowanie punktu końcowego przewidywania

Dokumentacja referencyjna | Kod źródłowy biblioteki (trenowanie)(przewidywanie)| Artifact (Maven) (training)(prediction)Samples (Artifact (Maven) (training)(prediction)Samples (Artifact (Maven) (training)(prediction) | Samples

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Bieżąca wersja zestawu Java Development Kit (JDK)
  • Narzędzie kompilacji narzędzia Gradle lub inny menedżer zależności.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Custom Vision w witrynie Azure Portal, aby utworzyć zasób trenowania i przewidywania.
    • Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Tworzenie zmiennych środowiskowych

W tym przykładzie napiszesz poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.

Przejdź do portalu Azure Portal. Jeśli zasoby usługi Custom Vision utworzone w sekcji Wymagania wstępne zostały wdrożone pomyślnie, wybierz przycisk Przejdź do zasobu w obszarze Następne kroki. Klucze i punkty końcowe można znaleźć na stronach kluczy i punktów końcowych zasobów w obszarze zarządzanie zasobami. Musisz pobrać klucze zarówno dla zasobów szkoleniowych, jak i przewidywania, wraz z punktami końcowymi interfejsu API.

Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu przewidywania w witrynie Azure Portal, na liście identyfikatora zasobu.

Napiwek

Możesz również użyć https://www.customvision.ai/ polecenia , aby uzyskać te wartości. Po zalogowaniu wybierz ikonę Ustawienia w prawym górnym rogu. Na stronach Ustawienie można wyświetlić wszystkie klucze, identyfikator zasobu i punkty końcowe.

Uwaga

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak usługa Azure Key Vault, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  1. Aby ustawić zmienną VISION_TRAINING KEY środowiskową, zastąp your-training-key element jednym z kluczy zasobu szkoleniowego.
  2. Aby ustawić zmienną VISION_TRAINING_ENDPOINT środowiskową, zastąp your-training-endpoint element punktem końcowym zasobu szkoleniowego.
  3. Aby ustawić zmienną VISION_PREDICTION_KEY środowiskową, zastąp your-prediction-key element jednym z kluczy zasobu przewidywania.
  4. Aby ustawić zmienną VISION_PREDICTION_ENDPOINT środowiskową, zastąp your-prediction-endpoint element punktem końcowym zasobu przewidywania.
  5. Aby ustawić zmienną VISION_PREDICTION_RESOURCE_ID środowiskową, zastąp your-resource-id wartość identyfikatorem zasobu przewidywania.
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

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą odczytywać zmienne środowiskowe, w tym okno konsoli.

Konfigurowanie

Tworzenie nowego projektu narzędzia Gradle

W oknie konsoli (na przykład cmd, PowerShell lub Bash) utwórz nowy katalog dla aplikacji i przejdź do niego.

mkdir myapp && cd myapp

gradle init Uruchom polecenie z katalogu roboczego. To polecenie spowoduje utworzenie podstawowych plików kompilacji dla narzędzia Gradle, w tym pliku build.gradle.kts, który jest używany w czasie wykonywania do tworzenia i konfigurowania aplikacji.

gradle init --type basic

Po wyświetleniu monitu wybierz pozycję Język DSL, a następnie Kotlin.

Instalowanie biblioteki klienta

Znajdź plik build.gradle.kts i otwórz go przy użyciu preferowanego środowiska IDE lub edytora tekstów. Następnie skopiuj poniższą konfigurację kompilacji. Ta konfiguracja definiuje projekt jako aplikację Java, której punktem wejścia jest klasa CustomVisionQuickstart. Importuje biblioteki usługi Custom Vision.

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

Tworzenie pliku języka Java

W katalogu roboczym uruchom następujące polecenie, aby utworzyć folder źródłowy projektu:

mkdir -p src/main/java

Przejdź do nowego folderu i utwórz plik o nazwie CustomVisionQuickstart.java. Otwórz go w preferowanym edytorze lub środowisku IDE i dodaj następujące import instrukcje:

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;

Napiwek

Czy chcesz wyświetlić cały plik z kodem przewodnika Szybki start od razu? Można go znaleźć w witrynie GitHub, która zawiera przykłady kodu z tego przewodnika Szybki start.

W klasie CustomVisionQuickstart aplikacji utwórz zmienne pobierające klucze i punkt końcowy zasobu ze zmiennych środowiskowych.

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

Ważne

Przejdź do portalu Azure Portal. Jeśli zasoby usługi Custom Vision utworzone w sekcji Wymagania wstępne zostały wdrożone pomyślnie, wybierz przycisk Przejdź do zasobu w obszarze Następne kroki. Klucze i punkt końcowy można znaleźć na stronach klucza i punktu końcowego zasobów. Musisz uzyskać klucze zarówno dla zasobów szkoleniowych, jak i zasobów przewidywania, wraz z punktem końcowym interfejsu API dla zasobu szkoleniowego.

Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu w witrynie Azure Portal, na liście identyfikatora zasobu.

Ważne

Pamiętaj, aby usunąć klucze z kodu po zakończeniu i nigdy nie publikować ich publicznie. W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.

W głównej metodzie aplikacji dodaj wywołania metod używanych w tym przewodniku Szybki start. Te elementy zdefiniujesz później.

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

Model obiektów

Następujące klasy i interfejsy obsługują niektóre główne funkcje biblioteki klienta Custom Vision Java.

Nazwa/nazwisko opis
CustomVisionTrainingClient Ta klasa obsługuje tworzenie, trenowanie i publikowanie modeli.
CustomVisionPredictionClient Ta klasa obsługuje wykonywanie zapytań dotyczących modeli na potrzeby prognoz klasyfikacji obrazów.
ImagePrediction Ta klasa definiuje pojedyncze przewidywanie na pojedynczym obrazie. Zawiera właściwości identyfikatora obiektu i nazwy oraz współczynnik ufności.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonać następujące zadania za pomocą biblioteki klienta usługi Custom Vision dla języka Java:

Uwierzytelnianie użytkownika

W metodzie głównej utwórz wystąpienie klientów trenowania i przewidywania przy użyciu punktu końcowego i kluczy.

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

Tworzenie projektu usługi Custom Vision

T## Tworzenie nowego projektu usługi Custom Vision

Ta następna metoda tworzy projekt klasyfikacji obrazów. Utworzony projekt będzie widoczny w odwiedzonej wcześniej witrynie internetowej Custom Vision. Zobacz przeciążenia metody CreateProject, aby określić inne opcje podczas tworzenia projektu (objaśnione w przewodniku Tworzenie portalu internetowego narzędzia do wykrywania).

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

Dodanie tagów do projektu

Ta metoda definiuje tagi, na których będzie trenowany model.

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

Przekazywanie i tagowanie obrazów

Najpierw pobierz przykładowe obrazy dla tego projektu. Zapisz zawartość folderu Sample Images na urządzeniu lokalnym.

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

Poprzedni fragment kodu korzysta z dwóch funkcji pomocnika, które pobierają obrazy jako strumienie zasobów i przekazują je do usługi (można przekazać do 64 obrazów w jednej partii).

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

Szkolenie projektu

Ta metoda tworzy pierwszą iterację szkoleniową w projekcie. Wysyła zapytanie do usługi do momentu ukończenia trenowania.

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

Publikowanie bieżącej iteracji

Ta metoda udostępnia bieżącą iterację modelu na potrzeby wykonywania zapytań. Możesz użyć nazwy modelu jako odwołania do wysyłania żądań przewidywania. Musisz wprowadzić własną wartość dla predictionResourceId. Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu w witrynie Azure Portal, na liście identyfikatora zasobu.

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

Testowanie punktu końcowego przewidywania

Ta metoda ładuje obraz testowy, wysyła zapytanie do punktu końcowego modelu i generuje dane przewidywania do konsoli.

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

Uruchamianie aplikacji

Aplikację można skompilować za pomocą następujących funkcji:

gradle build

Uruchom aplikację za gradle run pomocą polecenia :

gradle run

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję usług Azure AI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.

Jeśli chcesz wdrożyć swój własny projekt klasyfikacji obrazów (lub zamiast tego projektu wypróbować projekt wykrywania obiektów), możesz usunąć z tego przykładu projekt identyfikacji drzewa. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.

W witrynie internetowej Custom Vision przejdź do obszaru Projects (Projekty) i wybierz ikonę kosza w obszarze My New Project (Mój nowy projekt).

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

Następne kroki

Teraz wiesz już, jak każdy krok procesu klasyfikacji obrazów można wykonać w kodzie. Ten przykład wykonuje pojedynczą iterację trenowania, ale często trzeba będzie trenować i testować model wielokrotnie, aby był bardziej dokładny.

Ten przewodnik zawiera instrukcje i przykładowy kod, który ułatwia rozpoczęcie korzystania z biblioteki klienta usługi Custom Vision dla Node.js w celu utworzenia modelu klasyfikacji obrazów. Utworzysz projekt, dodasz tagi, wytrenujesz projekt i użyjesz adresu URL punktu końcowego przewidywania projektu, aby programowo go przetestować. Użyj tego przykładu jako szablonu do tworzenia własnej aplikacji do rozpoznawania obrazów.

Uwaga

Jeśli chcesz skompilować i wytrenować model klasyfikacji bez pisania kodu, zobacz zamiast tego wskazówki oparte na przeglądarce.

Użyj biblioteki klienta usługi Custom Vision dla platformy .NET, aby:

  • Tworzenie nowego projektu usługi Custom Vision
  • Dodawanie tagów do projektu
  • Przekazywanie i tagowanie obrazów
  • Szkolenie projektu
  • Publikowanie bieżącej iteracji
  • Testowanie punktu końcowego przewidywania

Dokumentacja referencyjna (training)(prediction) | Kod źródłowy biblioteki (trenowanie)(przewidywanie) | Package (npm) (training)(prediction) | Samples

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Bieżąca wersja Node.js
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Custom Vision w witrynie Azure Portal, aby utworzyć zasób trenowania i przewidywania.
    • Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Tworzenie zmiennych środowiskowych

W tym przykładzie napiszesz poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.

Przejdź do portalu Azure Portal. Jeśli zasoby usługi Custom Vision utworzone w sekcji Wymagania wstępne zostały wdrożone pomyślnie, wybierz przycisk Przejdź do zasobu w obszarze Następne kroki. Klucze i punkty końcowe można znaleźć na stronach kluczy i punktów końcowych zasobów w obszarze zarządzanie zasobami. Musisz pobrać klucze zarówno dla zasobów szkoleniowych, jak i przewidywania, wraz z punktami końcowymi interfejsu API.

Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu przewidywania w witrynie Azure Portal, na liście identyfikatora zasobu.

Napiwek

Możesz również użyć https://www.customvision.ai/ polecenia , aby uzyskać te wartości. Po zalogowaniu wybierz ikonę Ustawienia w prawym górnym rogu. Na stronach Ustawienie można wyświetlić wszystkie klucze, identyfikator zasobu i punkty końcowe.

Uwaga

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak usługa Azure Key Vault, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  1. Aby ustawić zmienną VISION_TRAINING KEY środowiskową, zastąp your-training-key element jednym z kluczy zasobu szkoleniowego.
  2. Aby ustawić zmienną VISION_TRAINING_ENDPOINT środowiskową, zastąp your-training-endpoint element punktem końcowym zasobu szkoleniowego.
  3. Aby ustawić zmienną VISION_PREDICTION_KEY środowiskową, zastąp your-prediction-key element jednym z kluczy zasobu przewidywania.
  4. Aby ustawić zmienną VISION_PREDICTION_ENDPOINT środowiskową, zastąp your-prediction-endpoint element punktem końcowym zasobu przewidywania.
  5. Aby ustawić zmienną VISION_PREDICTION_RESOURCE_ID środowiskową, zastąp your-resource-id wartość identyfikatorem zasobu przewidywania.
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

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą odczytywać zmienne środowiskowe, w tym okno konsoli.

Konfigurowanie

Tworzenie nowej aplikacji Node.js

W oknie konsoli (na przykład cmd, PowerShell lub Bash) utwórz nowy katalog dla aplikacji i przejdź do niego.

mkdir myapp && cd myapp

Uruchom polecenie npm init, aby utworzyć aplikację Node przy użyciu pliku package.json.

npm init

Instalowanie biblioteki klienta

Aby napisać aplikację do analizy obrazów za pomocą usługi Custom Vision dla Node.js, potrzebne będą pakiety NPM usługi Custom Vision. Aby je zainstalować, uruchom następujące polecenie w programie PowerShell:

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

Plik package.json aplikacji zostanie zaktualizowany przy użyciu zależności.

Utwórz plik o nazwie index.js i zaimportuj następujące biblioteki:

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

Napiwek

Czy chcesz wyświetlić cały plik z kodem przewodnika Szybki start od razu? Można go znaleźć w witrynie GitHub, która zawiera przykłady kodu z tego przewodnika Szybki start.

Utwórz zmienne dla punktu końcowego i kluczy platformy Azure zasobu.

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

Dodaj również pola dla nazwy projektu i parametr limitu czasu dla wywołań asynchronicznych.

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

Model obiektów

Nazwa/nazwisko opis
TrainingAPIClient Ta klasa obsługuje tworzenie, trenowanie i publikowanie modeli.
PredictionAPIClient Ta klasa obsługuje wykonywanie zapytań dotyczących modeli na potrzeby prognoz klasyfikacji obrazów.
Przewidywanie Ten interfejs definiuje pojedyncze przewidywanie na jednym obrazie. Zawiera właściwości identyfikatora obiektu i nazwy oraz współczynnik ufności.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonać następujące zadania za pomocą biblioteki klienta usługi Custom Vision dla języka JavaScript:

Uwierzytelnianie użytkownika

Utwórz wystąpienie obiektów klienta przy użyciu punktu końcowego i klucza. Utwórz obiekt ApiKeyCredentials za pomocą klucza i użyj go z punktem końcowym, aby utworzyć obiekt TrainingAPIClient i PredictionAPIClient.

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

Tworzenie nowego projektu usługi Custom Vision

Uruchom nową funkcję, aby zawierała wszystkie wywołania funkcji Custom Vision. Dodaj następujący kod, aby utworzyć nowy projekt usługi Custom Vision.

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

Dodawanie tagów do projektu

Aby utworzyć tagi klasyfikacji w projekcie, dodaj następujący kod do funkcji:

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

Przekazywanie i tagowanie obrazów

Najpierw pobierz przykładowe obrazy dla tego projektu. Zapisz zawartość folderu Sample Images na urządzeniu lokalnym.

Aby dodać przykładowe obrazy do projektu, po utworzeniu tagów wstaw następujący kod. Ten kod przekazuje każdy obraz z odpowiednim tagiem.

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

Ważne

Musisz zmienić ścieżkę do obrazów (sampleDataRoot) na podstawie lokalizacji, w której pobrano repozytorium przykładów zestawu SDK języka Python dla usług AI platformy Azure.

Szkolenie projektu

Ten kod tworzy pierwszą iterację modelu przewidywania.

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

Publikowanie bieżącej iteracji

Ten kod publikuje wytrenowana iterację do punktu końcowego przewidywania. Nazwa nadana opublikowanej iteracji może służyć do wysyłania żądań przewidywania. Iteracja nie jest dostępna w punkcie końcowym przewidywania, dopóki nie zostanie opublikowana.

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

Testowanie punktu końcowego przewidywania

Aby wysłać obraz do punktu końcowego przewidywania i pobrać przewidywanie, dodaj następujący kod do funkcji.

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

Następnie zamknij funkcję Custom Vision i wywołaj ją.

})()

Uruchamianie aplikacji

Uruchom aplikację, wykonując polecenie node dla pliku szybkiego startu.

node index.js

Dane wyjściowe aplikacji powinny być podobne do poniższego tekstu:

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%

Następnie możesz sprawdzić, czy obraz testowy (znaleziony w <folderze sampleDataRoot>/Test/) został odpowiednio otagowany. Możesz też wrócić do witryny internetowej Custom Vision i wyświetlić bieżący stan nowo utworzonego projektu.

Jeśli chcesz wdrożyć swój własny projekt klasyfikacji obrazów (lub zamiast tego projektu wypróbować projekt wykrywania obiektów), możesz usunąć z tego przykładu projekt identyfikacji drzewa. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.

W witrynie internetowej Custom Vision przejdź do obszaru Projects (Projekty) i wybierz ikonę kosza w obszarze My New Project (Mój nowy projekt).

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

Następne kroki

Teraz wiesz już, jak każdy krok procesu wykrywania obiektów można wykonać w kodzie. Ten przykład wykonuje pojedynczą iterację trenowania, ale często trzeba będzie trenować i testować model wielokrotnie, aby był bardziej dokładny.

Wprowadzenie do biblioteki klienta usługi Custom Vision dla języka Python. Wykonaj następujące kroki, aby zainstalować pakiet i wypróbować przykładowy kod tworzenia modelu klasyfikacji obrazów. Utworzysz projekt, dodasz tagi, wytrenujesz projekt i użyjesz adresu URL punktu końcowego przewidywania projektu, aby programowo go przetestować. Użyj tego przykładu jako szablonu do tworzenia własnej aplikacji do rozpoznawania obrazów.

Uwaga

Jeśli chcesz skompilować i wytrenować model klasyfikacji bez pisania kodu, zobacz zamiast tego wskazówki oparte na przeglądarce.

Użyj biblioteki klienta usługi Custom Vision dla języka Python, aby:

  • Tworzenie nowego projektu usługi Custom Vision
  • Dodawanie tagów do projektu
  • Przekazywanie i tagowanie obrazów
  • Szkolenie projektu
  • Publikowanie bieżącej iteracji
  • Testowanie punktu końcowego przewidywania

Dokumentacja referencyjna — przykłady | pakietu kodu | źródłowego biblioteki źródłowej (PyPI) |

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Python 3.x
    • Instalacja języka Python powinna zawierać narzędzie pip. Możesz sprawdzić, czy masz zainstalowane narzędzie pip, uruchamiając polecenie pip --version w wierszu polecenia. Pobierz narzędzie pip, instalując najnowszą wersję języka Python.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Custom Vision w witrynie Azure Portal, aby utworzyć zasób trenowania i przewidywania.
    • Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Tworzenie zmiennych środowiskowych

W tym przykładzie napiszesz poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.

Przejdź do portalu Azure Portal. Jeśli zasoby usługi Custom Vision utworzone w sekcji Wymagania wstępne zostały wdrożone pomyślnie, wybierz przycisk Przejdź do zasobu w obszarze Następne kroki. Klucze i punkty końcowe można znaleźć na stronach kluczy i punktów końcowych zasobów w obszarze zarządzanie zasobami. Musisz pobrać klucze zarówno dla zasobów szkoleniowych, jak i przewidywania, wraz z punktami końcowymi interfejsu API.

Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu przewidywania w witrynie Azure Portal, na liście identyfikatora zasobu.

Napiwek

Możesz również użyć https://www.customvision.ai/ polecenia , aby uzyskać te wartości. Po zalogowaniu wybierz ikonę Ustawienia w prawym górnym rogu. Na stronach Ustawienie można wyświetlić wszystkie klucze, identyfikator zasobu i punkty końcowe.

Uwaga

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak usługa Azure Key Vault, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  1. Aby ustawić zmienną VISION_TRAINING KEY środowiskową, zastąp your-training-key element jednym z kluczy zasobu szkoleniowego.
  2. Aby ustawić zmienną VISION_TRAINING_ENDPOINT środowiskową, zastąp your-training-endpoint element punktem końcowym zasobu szkoleniowego.
  3. Aby ustawić zmienną VISION_PREDICTION_KEY środowiskową, zastąp your-prediction-key element jednym z kluczy zasobu przewidywania.
  4. Aby ustawić zmienną VISION_PREDICTION_ENDPOINT środowiskową, zastąp your-prediction-endpoint element punktem końcowym zasobu przewidywania.
  5. Aby ustawić zmienną VISION_PREDICTION_RESOURCE_ID środowiskową, zastąp your-resource-id wartość identyfikatorem zasobu przewidywania.
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

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą odczytywać zmienne środowiskowe, w tym okno konsoli.

Konfigurowanie

Instalowanie biblioteki klienta

Aby napisać aplikację do analizy obrazów za pomocą usługi Custom Vision dla języka Python, potrzebujesz biblioteki klienta usługi Custom Vision. Po zainstalowaniu języka Python uruchom następujące polecenie w programie PowerShell lub w oknie konsoli:

pip install azure-cognitiveservices-vision-customvision

Tworzenie nowej aplikacji w języku Python

Utwórz nowy plik języka Python i zaimportuj następujące biblioteki.

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

Napiwek

Czy chcesz wyświetlić cały plik z kodem przewodnika Szybki start od razu? Można go znaleźć w witrynie GitHub, która zawiera przykłady kodu z tego przewodnika Szybki start.

Utwórz zmienne dla punktu końcowego i kluczy platformy Azure zasobu.

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

Model obiektów

Nazwa/nazwisko opis
CustomVisionTrainingClient Ta klasa obsługuje tworzenie, trenowanie i publikowanie modeli.
CustomVisionPredictionClient Ta klasa obsługuje wykonywanie zapytań dotyczących modeli na potrzeby prognoz klasyfikacji obrazów.
ImagePrediction Ta klasa definiuje pojedyncze przewidywanie obiektu na jednym obrazie. Zawiera właściwości identyfikatora obiektu i nazwy, lokalizację pola ograniczenia obiektu i współczynnik ufności.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonać następujące czynności za pomocą biblioteki klienta usługi Custom Vision dla języka Python:

Uwierzytelnianie użytkownika

Utworzenie wystąpienia klienta szkolenia i przewidywania przy użyciu punktu końcowego i kluczy. Utwórz obiekty ApiKeyServiceClientCredentials przy użyciu kluczy i użyj ich z punktem końcowym, aby utworzyć obiekt CustomVisionTrainingClient i CustomVisionPredictionClient .

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

Tworzenie nowego projektu usługi Custom Vision

Dodaj następujący kod do skryptu, aby utworzyć nowy projekt Custom Vision Service.

Zobacz metodę create_project , aby określić inne opcje podczas tworzenia projektu (wyjaśniono w przewodniku Tworzenie portalu internetowego klasyfikatora ).

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)

Dodawanie tagów do projektu

Aby dodać tagi klasyfikacji do projektu, dodaj następujący kod:

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

Przekazywanie i tagowanie obrazów

Najpierw pobierz przykładowe obrazy dla tego projektu. Zapisz zawartość folderu Sample Images na urządzeniu lokalnym.

Aby dodać przykładowe obrazy do projektu, po utworzeniu tagów wstaw następujący kod. Ten kod przekazuje każdy obraz z odpowiednim tagiem. W jednej partii można przekazać maksymalnie 64 obrazy.

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)

Uwaga

Musisz zmienić ścieżkę do obrazów na podstawie lokalizacji, w której pobrano repozytorium przykładów zestawu SDK dla języka Python usług Azure AI.

Szkolenie projektu

Ten kod tworzy pierwszą iterację modelu przewidywania.

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)

Napiwek

Trenowanie przy użyciu wybranych tagów

Opcjonalnie możesz trenować tylko w podzestawie zastosowanych tagów. Możesz to zrobić, jeśli nie zastosowano jeszcze wystarczającej liczby niektórych tagów, ale masz wystarczająco dużo innych. W wywołaniu train_project ustaw opcjonalny parametr selected_tags na listę ciągów identyfikatorów tagów, których chcesz użyć. Model będzie trenował tak, aby rozpoznawał tylko tagi na tej liście.

Publikowanie bieżącej iteracji

Iteracja nie jest dostępna w punkcie końcowym przewidywania, dopóki nie zostanie opublikowana. Poniższy kod udostępnia bieżącą iterację modelu na potrzeby wykonywania zapytań.

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

Testowanie punktu końcowego przewidywania

Aby wysłać obraz do punktu końcowego przewidywania i uzyskać przewidywanie, dodaj na końcu pliku następujący kod:

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

Uruchamianie aplikacji

Uruchom CustomVisionQuickstart.py.

python CustomVisionQuickstart.py

Dane wyjściowe aplikacji powinny być podobne do poniższego tekstu:

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

Następnie możesz sprawdzić, czy obraz testowy (znaleziony w <base_image_location>/images/Test/) jest odpowiednio oznakowany. Możesz też wrócić do witryny internetowej Custom Vision i wyświetlić bieżący stan nowo utworzonego projektu.

Czyszczenie zasobów

Jeśli chcesz wdrożyć swój własny projekt klasyfikacji obrazów (lub zamiast tego projektu wypróbować projekt wykrywania obiektów), możesz usunąć z tego przykładu projekt identyfikacji drzewa. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.

W witrynie internetowej Custom Vision przejdź do obszaru Projects (Projekty) i wybierz ikonę kosza w obszarze My New Project (Mój nowy projekt).

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

Następne kroki

Teraz wiesz już, jak każdy krok procesu klasyfikacji obrazów można wykonać w kodzie. Ten przykład wykonuje pojedynczą iterację trenowania, ale często trzeba będzie trenować i testować model wielokrotnie, aby był bardziej dokładny.

Wprowadzenie do interfejsu API REST usługi Custom Vision. Wykonaj następujące kroki, aby wywołać interfejs API i utworzyć model klasyfikacji obrazów. Utworzysz projekt, dodasz tagi, wytrenujesz projekt i użyjesz adresu URL punktu końcowego przewidywania projektu, aby programowo go przetestować. Użyj tego przykładu jako szablonu do tworzenia własnej aplikacji do rozpoznawania obrazów.

Uwaga

Usługa Custom Vision jest najczęściej używana za pośrednictwem zestawu SDK biblioteki klienta lub wskazówek opartych na przeglądarce.

Użyj biblioteki klienta usługi Custom Vision dla platformy .NET, aby:

  • Tworzenie nowego projektu usługi Custom Vision
  • Dodawanie tagów do projektu
  • Przekazywanie i tagowanie obrazów
  • Szkolenie projektu
  • Publikowanie bieżącej iteracji
  • Testowanie punktu końcowego przewidywania

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób usługi Custom Vision w witrynie Azure Portal, aby utworzyć zasób trenowania i przewidywania oraz uzyskać klucze i punkt końcowy. Poczekaj na wdrożenie i kliknij przycisk Przejdź do zasobu .
    • Będziesz potrzebować klucza i punktu końcowego z utworzonych zasobów, aby połączyć aplikację z usługą Custom Vision. W dalszej części przewodnika Szybki start wklejesz klucz i punkt końcowy do poniższego kodu.
    • Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.
  • PowerShell w wersji 6.0 lub podobnej aplikacji wiersza polecenia.

Tworzenie nowego projektu usługi Custom Vision

Użyjesz polecenia podobnego do poniższego, aby utworzyć projekt klasyfikacji obrazów. Utworzony projekt zostanie wyświetlony w witrynie internetowej usługi Custom Vision.

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

Skopiuj polecenie do edytora tekstów i wprowadź następujące zmiany:

  • Zastąp {subscription key} ciąg prawidłowym kluczem twarzy.
  • Zastąp {endpoint} element punktem końcowym odpowiadającym kluczowi.

    Uwaga

    Nowe zasoby utworzone po 1 lipca 2019 r. będą używać niestandardowych nazw domen podrzędnych. Aby uzyskać więcej informacji i pełną listę regionalnych punktów końcowych, zobacz Niestandardowe nazwy poddomeny dla usług Azure AI.

  • Zastąp {name} ciąg nazwą projektu.
  • Opcjonalnie ustaw inne parametry adresu URL, aby skonfigurować typ modelu, który będzie używany przez projekt. Aby uzyskać opcje, zobacz interfejs API CreatProject.

Otrzymasz odpowiedź JSON podobną do poniższej. "id" Zapisz wartość projektu w lokalizacji tymczasowej.

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

Dodawanie tagów do projektu

Użyj następującego polecenia, aby zdefiniować tagi, na których będzie trenowany model.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/tags?name={name}"
  • Ponownie wstaw własny klucz i adres URL punktu końcowego.
  • Zastąp {projectId} element własnym identyfikatorem projektu.
  • Zastąp {name} ciąg nazwą tagu, którego chcesz użyć.

Powtórz ten proces dla wszystkich tagów, których chcesz użyć w projekcie. Jeśli używasz podanych przykładowych obrazów, dodaj tagi "Hemlock" i "Japanese Cherry".

Otrzymasz odpowiedź w formacie JSON podobną do poniższej. "id" Zapisz wartość każdego tagu w lokalizacji tymczasowej.

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

Przekazywanie i tagowanie obrazów

Następnie pobierz przykładowe obrazy dla tego projektu. Zapisz zawartość folderu Sample Images na urządzeniu lokalnym.

Użyj następującego polecenia, aby przekazać obrazy i zastosować tagi; raz dla obrazów "Hemlock" i oddzielnie dla obrazów "Japanese Cherry". Aby uzyskać więcej opcji, zobacz tworzenie obrazów na podstawie interfejsu API danych .

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}"
  • Ponownie wstaw własny klucz i adres URL punktu końcowego.
  • Zastąp {projectId} element własnym identyfikatorem projektu.
  • Zastąp {tagArray} element identyfikatorem tagu.
  • Następnie wypełnij treść żądania danymi binarnymi obrazów, które chcesz oznaczyć.

Szkolenie projektu

Ta metoda szkoli model na przekazanych obrazach oznakowanych i zwraca identyfikator dla bieżącej iteracji projektu.

curl -v -X POST -H "Content-Type: application/json" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/train"
  • Ponownie wstaw własny klucz i adres URL punktu końcowego.
  • Zastąp {projectId} element własnym identyfikatorem projektu.
  • Zastąp {tagArray} element identyfikatorem tagu.
  • Następnie wypełnij treść żądania danymi binarnymi obrazów, które chcesz oznaczyć.
  • Opcjonalnie użyj innych parametrów adresu URL. Aby uzyskać opcje, zobacz Train Project API (Trenowanie interfejsu API projektu ).

Napiwek

Trenowanie przy użyciu wybranych tagów

Opcjonalnie możesz trenować tylko w podzestawie zastosowanych tagów. Możesz to zrobić, jeśli nie zastosowano jeszcze wystarczającej liczby niektórych tagów, ale masz wystarczająco dużo innych. Dodaj opcjonalną zawartość JSON do treści żądania. Wypełnij tablicę "selectedTags" identyfikatorami tagów, których chcesz użyć.

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

Odpowiedź JSON zawiera informacje o wytrenowanym projekcie, w tym identyfikator iteracji ("id"). Zapisz tę wartość dla następnego kroku.

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

Publikowanie bieżącej iteracji

Ta metoda udostępnia bieżącą iterację modelu na potrzeby wykonywania zapytań. Zwracana nazwa modelu jest używana jako odwołanie do wysyłania żądań przewidywania.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Ponownie wstaw własny klucz i adres URL punktu końcowego.
  • Zastąp {projectId} element własnym identyfikatorem projektu.
  • Zastąp {iterationId} element identyfikatorem zwróconym w poprzednim kroku.
  • Zastąp {publishedName} ciąg nazwą, którą chcesz przypisać do modelu przewidywania.
  • Zastąp {predictionId} element własnym identyfikatorem zasobu przewidywania. Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości zasobu w witrynie Azure Portal, na liście identyfikatora zasobu.
  • Opcjonalnie użyj innych parametrów adresu URL. Zobacz interfejs API publikowania iteracji.

Testowanie punktu końcowego przewidywania

Na koniec użyj tego polecenia, aby przetestować wytrenowany model, przekazując nowy obraz do klasyfikowania za pomocą tagów. Możesz użyć obrazu w folderze "Test" pobranych wcześniej plików przykładowych.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Ponownie wstaw własny klucz i adres URL punktu końcowego.
  • Zastąp {projectId} element własnym identyfikatorem projektu.
  • Zastąp {publishedName} ciąg nazwą użytą w poprzednim kroku.
  • Dodaj dane binarne obrazu lokalnego do treści żądania.
  • Opcjonalnie użyj innych parametrów adresu URL. Zobacz interfejs API klasyfikowania obrazów.

Zwrócona odpowiedź JSON będzie zawierać listę wszystkich tagów zastosowanych do obrazu przez model wraz z wynikami prawdopodobieństwa dla każdego tagu.

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

Jeśli chcesz wdrożyć swój własny projekt klasyfikacji obrazów (lub zamiast tego projektu wypróbować projekt wykrywania obiektów), możesz usunąć z tego przykładu projekt identyfikacji drzewa. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.

W witrynie internetowej Custom Vision przejdź do obszaru Projects (Projekty) i wybierz ikonę kosza w obszarze My New Project (Mój nowy projekt).

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

Następne kroki

Teraz wykonano każdy krok procesu klasyfikacji obrazów przy użyciu interfejsu API REST. Ten przykład wykonuje pojedynczą iterację trenowania, ale często trzeba będzie trenować i testować model wielokrotnie, aby był bardziej dokładny.