Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozpocznij pracę z biblioteką klienta usługi Custom Vision dla .NET. Wykonaj następujące kroki, aby zainstalować pakiet i wypróbować przykładowy kod tworzenia modelu klasyfikacji obrazów. Możesz utworzyć projekt, dodać tagi, wytrenować projekt i użyć 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 wskazówki oparte na przeglądarce.
Dokumentacja referencyjna | Kod źródłowy biblioteki dla trenowania i przewidywania | Pakiet (NuGet) dla trenowania i przewidywania Przykłady
Wymagania wstępne
- Subskrypcja Azure. Możesz utworzyć go bezpłatnie.
- Visual Studio IDE lub bieżąca wersja .NET Core.
- Po utworzeniu subskrypcji Azure utwórz zasób Custom Vision w portalu Azure w celu utworzenia zasobu szkoleniowego i zasobu 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.
- Możesz użyć warstwy cenowej bezpłatna (
Tworzenie zmiennych środowiskowych
W tym przykładzie wstawisz swoje poświadczenia do zmiennych środowiskowych na lokalnej maszynie uruchamiającej aplikację.
Przejdź do portalu Azure. 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 Klucze i punkty końcowe zasobów w obszarze Zarządzanie zasobami. Musisz uzyskać klucze zarówno do zasobu szkoleniowego, jak i zasobu predykcyjnego, wraz z punktami końcowymi API.
Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości na karcie portalu Azure, na liście Resource ID.
Wskazówka
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.
Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
VISION_TRAINING KEYśrodowiskową, zastąp<your-training-key>jednym z kluczy zasobu szkoleniowego. - Aby ustawić zmienną środowiska
VISION_TRAINING_ENDPOINT, zastąp<your-training-endpoint>punktem końcowym swojego zasobu szkoleniowego. - Aby ustawić zmienną
VISION_PREDICTION_KEYśrodowiskową, zamień<your-prediction-key>jednym z kluczy zasobu przewidywania. - Aby ustawić zmienną
VISION_PREDICTION_ENDPOINTśrodowiskową, zastąp<your-prediction-endpoint>punktem końcowym zasobu prognozowania. - Aby ustawić zmienną
VISION_PREDICTION_RESOURCE_IDśrodowiskową, zastąp<your-resource-id>wartość identyfikatorem zasobu przewidywania.
Ważne
Zalecamy uwierzytelnianie przy użyciu Microsoft Entra ID i zarządzanych tożsamości dla zasobów Azure aby uniknąć przechowywania poświadczeń w aplikacjach działających w chmurze.
Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.
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 odczytują zmienne środowiskowe, w tym okno konsoli.
Konfigurowanie
Tworzenie nowej aplikacji w języku C#
Za pomocą 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 pozycję Zarządzanie pakietami NuGet. Wybierz Browse w wyświetlonym menedżerze pakietów, a następnie sprawdź Include prerelease i wyszukaj Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training i Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. Wybierz najnowszą wersję, a następnie wybierz pozycję Zainstaluj.
Wskazówka
Chcesz wyświetlić cały plik kodu Szybkiego startu jednocześnie? Można go znaleźć w GitHub który zawiera przykłady kodu w tym przewodniku 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 aplikacji main 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 szybkim starcie. Te rozwiązania należy zaimplementować 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 klienta
W nowej metodzie utwórz instancję przy użyciu punktu końcowego i kluczy dla klientów trenowania i przewidywania.
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 jest wyświetlany w witrynie internetowej usługi Custom Vision. Zobacz metodę CreateProject, aby określić inne opcje podczas tworzenia projektu (wyjaśniono to w przewodniku po portalu internetowym Tworzenie 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 trenujesz 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ę pomocniczą do przesyłania 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 aż do zakończenia szkolenia.
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);
}
}
Wskazówka
Szkolenie z użyciem wybranych tagów
Możesz opcjonalnie trenować tylko na części 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 . Utwórz obiekt TrainingParameters i ustaw jego 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 w portalu Azure wyświetlonym jako 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
}
Testowanie punktu końcowego przewidywania
Ta część skryptu ładuje obraz testowy, wysyła zapytanie do punktu końcowego modelu i generuje 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 aplikacji powinno zostać otwarte okno konsoli i zapisać 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 (znaleziony w obszarze Images/Test/) został odpowiednio otagowany. Naciśnij dowolny klawisz, aby zamknąć aplikację. Możesz również wrócić do witryny internetowej usługi Custom Vision i zobaczyć bieżący stan nowo utworzonego projektu.
Czyszczenie zasobów
Jeśli chcesz zaimplementować własny projekt klasyfikacji obrazów (lub zamiast tego wypróbować projekt wykrywania obiektów ), możesz usunąć projekt identyfikacji drzewa z tego przykładu. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.
W witrynie internetowej Custom Vision przejdź do Projects i wybierz kosz w obszarze Mój nowy Project.
Powiązana zawartość
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.
- Co to jest usługa Custom Vision?
- Kod źródłowy dla tego przykładu można znaleźć w witrynie GitHub
- Dokumentacja referencyjna zestawu SDK
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 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 (uczenie) i (przewidywanie)
Wymagania wstępne
- Subskrypcja Azure. Możesz utworzyć go bezpłatnie.
- Przejdź do wersji 1.8 lub nowszej.
- Po utworzeniu subskrypcji Azure utwórz zasób Custom Vision w portalu Azure w celu utworzenia zasobu szkoleniowego 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.
- Możesz użyć warstwy cenowej bezpłatna (
Tworzenie zmiennych środowiskowych
W tym przykładzie wstawisz swoje poświadczenia do zmiennych środowiskowych na lokalnej maszynie uruchamiającej aplikację.
Przejdź do portalu Azure. 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 Klucze i punkty końcowe zasobów w obszarze Zarządzanie zasobami. Musisz uzyskać klucze zarówno do zasobu szkoleniowego, jak i zasobu predykcyjnego, wraz z punktami końcowymi API.
Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości na karcie portalu Azure, na liście Resource ID.
Wskazówka
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.
Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
VISION_TRAINING KEYśrodowiskową, zastąp<your-training-key>jednym z kluczy zasobu szkoleniowego. - Aby ustawić zmienną środowiska
VISION_TRAINING_ENDPOINT, zastąp<your-training-endpoint>punktem końcowym swojego zasobu szkoleniowego. - Aby ustawić zmienną
VISION_PREDICTION_KEYśrodowiskową, zamień<your-prediction-key>jednym z kluczy zasobu przewidywania. - Aby ustawić zmienną
VISION_PREDICTION_ENDPOINTśrodowiskową, zastąp<your-prediction-endpoint>punktem końcowym zasobu prognozowania. - Aby ustawić zmienną
VISION_PREDICTION_RESOURCE_IDśrodowiskową, zastąp<your-resource-id>wartość identyfikatorem zasobu przewidywania.
Ważne
Zalecamy uwierzytelnianie przy użyciu Microsoft Entra ID i zarządzanych tożsamości dla zasobów Azure aby uniknąć przechowywania poświadczeń w aplikacjach działających w chmurze.
Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.
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 odczytują 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 dep, uruchom w repozytorium:
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 Foundry Tools Python SDK Samples w GitHub. Sklonuj lub pobierz to repozytorium do środowiska deweloperskiego. 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 usługi Custom Vision.
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 w projekcie, 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, wstaw następujący kod po utworzeniu tagu. Ten kod ładuje każde zdjęcie z odpowiednim tagiem. Za jednym razem można wgrać maksymalnie 64 obrazy.
Uwaga
Musisz zmienić ścieżkę do obrazów w oparciu o miejsce, w którym wcześniej pobrałeś projekt przykładów SDK Go Foundry Tools.
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 predykcyjnego, a następnie publikuje ją w punkcie końcowym predykcyjnym. 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))
Korzystanie z punktu końcowego przewidywania
Aby wysłać obraz do punktu końcowego przewidywania i pobrać przewidywanie, dodaj następujący kod na końcu pliku:
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 aplikację przy użyciu następującego polecenia:
go run sample.go
Dane wyjściowe aplikacji powinny być podobne do następującego 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/) został odpowiednio otagowany. Możesz również wrócić do witryny internetowej usługi Custom Vision i zobaczyć bieżący stan nowo utworzonego projektu.
Czyszczenie zasobów
Jeśli chcesz zaimplementować własny projekt klasyfikacji obrazów (lub zamiast tego wypróbować projekt wykrywania obiektów ), możesz usunąć projekt identyfikacji drzewa z tego przykładu. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.
W witrynie internetowej Custom Vision przejdź do Projects i wybierz kosz w obszarze Mój nowy Project.
Powiązana zawartość
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.
- Co to jest usługa Custom Vision?
- dokumentacja referencyjna SDK (szkolenie)
- dokumentacja referencyjna SDK (predykcja)
Rozpocznij korzystanie z biblioteki klienta usługi Custom Vision dla 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 wskazówki oparte na przeglądarce.
Użyj biblioteki klienta Custom Vision dla Javy, 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 (Reference) | Kod źródłowy biblioteki dla (szkolenia) i (prognozowania)| Artefakt (Maven) dla (szkolenia) i (prognozowania) | Przykłady
Wymagania wstępne
- Subskrypcja Azure. Możesz utworzyć go bezpłatnie.
- Bieżąca wersja zestawu Java Development Kit(JDK).
- Narzędzie budujące Gradle lub inny menedżer zależności.
- Po utworzeniu subskrypcji Azure utwórz zasób Custom Vision w portalu Azure w celu utworzenia zasobu szkoleniowego 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.
- Możesz użyć warstwy cenowej bezpłatna (
Tworzenie zmiennych środowiskowych
W tym przykładzie wstawisz swoje poświadczenia do zmiennych środowiskowych na lokalnej maszynie uruchamiającej aplikację.
Przejdź do portalu Azure. 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 Klucze i punkty końcowe zasobów w obszarze Zarządzanie zasobami. Musisz uzyskać klucze zarówno do zasobu szkoleniowego, jak i zasobu predykcyjnego, wraz z punktami końcowymi API.
Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości na karcie portalu Azure, na liście Resource ID.
Wskazówka
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.
Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
VISION_TRAINING KEYśrodowiskową, zastąp<your-training-key>jednym z kluczy zasobu szkoleniowego. - Aby ustawić zmienną środowiska
VISION_TRAINING_ENDPOINT, zastąp<your-training-endpoint>punktem końcowym swojego zasobu szkoleniowego. - Aby ustawić zmienną
VISION_PREDICTION_KEYśrodowiskową, zamień<your-prediction-key>jednym z kluczy zasobu przewidywania. - Aby ustawić zmienną
VISION_PREDICTION_ENDPOINTśrodowiskową, zastąp<your-prediction-endpoint>punktem końcowym zasobu prognozowania. - Aby ustawić zmienną
VISION_PREDICTION_RESOURCE_IDśrodowiskową, zastąp<your-resource-id>wartość identyfikatorem zasobu przewidywania.
Ważne
Zalecamy uwierzytelnianie przy użyciu Microsoft Entra ID i zarządzanych tożsamości dla zasobów Azure aby uniknąć przechowywania poświadczeń w aplikacjach działających w chmurze.
Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.
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 odczytują zmienne środowiskowe, w tym okno konsoli.
Konfigurowanie
Tworzenie nowego projektu narzędzia Gradle
W oknie konsoli (takim jak cmd, PowerShell lub Bash) utwórz nowy katalog dla aplikacji i przejdź do niego.
mkdir myapp && cd myapp
Uruchom polecenie gradle init z katalogu roboczego. To polecenie tworzy podstawowe pliki kompilacji dla narzędzia Gradle, w tym build.gradle.kts, które są używane w czasie wykonywania do tworzenia i konfigurowania aplikacji.
gradle init --type basic
Kiedy zostaniesz poproszony o wybranie języka DSL, wybierz 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 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 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;
Wskazówka
Chcesz wyświetlić cały plik kodu Szybkiego startu jednocześnie? Można go znaleźć w GitHub który zawiera przykłady kodu w tym przewodniku Szybki start.
W klasie aplikacji CustomVisionQuickstart utwórz zmienne, które pobierają 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
Pamiętaj, aby usunąć klucze z kodu po zakończeniu i nigdy nie publikować ich publicznie. W środowisku produkcyjnym użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak Azure Key Vault. Aby uzyskać więcej informacji, zobacz artykuł Dotyczący zabezpieczeń narzędzi Foundry.
W metodzie main aplikacji dodaj wywołania metod używanych w tym szybkim starcie. 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 usługi Custom Vision Java.
| Nazwa | 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 Java:
- Uwierzytelnianie klienta
- Tworzenie nowego projektu usługi Custom Vision
- Dodawanie tagów do projektu
- Przekazywanie i tagowanie obrazów
- Trenuj projekt
- Publikowanie bieżącej iteracji
- Testowanie punktu końcowego przewidywania
Uwierzytelnianie klienta
W metodzie main utwórz wystąpienie klientów do trenowania i przewidywania z wykorzystaniem 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
Ta następna metoda tworzy projekt klasyfikacji obrazów. Utworzony projekt zostanie wyświetlony na stronie Custom Vision, którą odwiedziłeś wcześniej. Zobacz wersje przeciążone metody CreateProject, aby określić inne opcje podczas tworzenia projektu (objaśnione w przewodniku portalu internetowego 'Budowanie detektora').
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;
}
Dodawanie 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 aż do zakończenia szkolenia.
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 w portalu Azure wyświetlonym jako 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);
}
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 pomocą polecenia gradle run.
gradle run
Czyszczenie zasobów
Jeśli chcesz wyczyścić i usunąć subskrypcję Azure AI services, 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 zaimplementować własny projekt klasyfikacji obrazów (lub zamiast tego wypróbować projekt wykrywania obiektów ), możesz usunąć projekt identyfikacji drzewa z tego przykładu. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.
W witrynie internetowej Custom Vision przejdź do Projects i wybierz kosz w obszarze Mój nowy Project.
Powiązana zawartość
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.
- Co to jest usługa Custom Vision?
- Kod źródłowy dla tego przykładu można znaleźć w witrynie GitHub
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. Możesz utworzyć projekt, dodać tagi, wytrenować projekt i użyć 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 wskazówki oparte na przeglądarce.
Użyj biblioteki klienta usługi Custom Vision dla Node.js, 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 dotycząca (trenowania) i (przewidywania) | Pakiet (npm) do (trenowania) i (przewidywania) | Przykłady
Wymagania wstępne
- Subskrypcja Azure. Możesz utworzyć go bezpłatnie.
- Bieżąca wersja Node.js.
- Po utworzeniu subskrypcji Azure utwórz zasób Custom Vision w portalu Azure w celu utworzenia zasobu szkoleniowego 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.
- Możesz użyć warstwy cenowej bezpłatna (
Tworzenie zmiennych środowiskowych
W tym przykładzie wstawisz swoje poświadczenia do zmiennych środowiskowych na lokalnej maszynie uruchamiającej aplikację.
Przejdź do portalu Azure. 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 Klucze i punkty końcowe zasobów w obszarze Zarządzanie zasobami. Musisz uzyskać klucze zarówno do zasobu szkoleniowego, jak i zasobu predykcyjnego, wraz z punktami końcowymi API.
Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości na karcie portalu Azure, na liście Resource ID.
Wskazówka
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.
Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
VISION_TRAINING KEYśrodowiskową, zastąp<your-training-key>jednym z kluczy zasobu szkoleniowego. - Aby ustawić zmienną środowiska
VISION_TRAINING_ENDPOINT, zastąp<your-training-endpoint>punktem końcowym swojego zasobu szkoleniowego. - Aby ustawić zmienną
VISION_PREDICTION_KEYśrodowiskową, zamień<your-prediction-key>jednym z kluczy zasobu przewidywania. - Aby ustawić zmienną
VISION_PREDICTION_ENDPOINTśrodowiskową, zastąp<your-prediction-endpoint>punktem końcowym zasobu prognozowania. - Aby ustawić zmienną
VISION_PREDICTION_RESOURCE_IDśrodowiskową, zastąp<your-resource-id>wartość identyfikatorem zasobu przewidywania.
Ważne
Zalecamy uwierzytelnianie przy użyciu Microsoft Entra ID i zarządzanych tożsamości dla zasobów Azure aby uniknąć przechowywania poświadczeń w aplikacjach działających w chmurze.
Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.
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 odczytują zmienne środowiskowe, w tym okno konsoli.
Konfigurowanie
Tworzenie nowej aplikacji Node.js
W oknie konsoli (takim jak 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.js z plikiem package.json. Naciśnij klawisz ENTER wiele razy, aby ukończyć proces.
npm init
Instalowanie biblioteki klienta
Aby napisać aplikację do analizy obrazów za pomocą usługi Custom Vision dla Node.js, potrzebne są 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 aplikacji package.json jest aktualizowany 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");
Wskazówka
Chcesz wyświetlić cały plik kodu Szybkiego startu jednocześnie? Można go znaleźć w GitHub który zawiera przykłady kodu w tym przewodniku Szybki start.
Utwórz zmienne dla punktu końcowego Azure i kluczy 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 | 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. |
| Przewidywania | 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 klienta
- Tworzenie nowego projektu usługi Custom Vision
- Dodawanie tagów do projektu
- Przekazywanie i tagowanie obrazów
- Trenuj projekt
- Publikowanie bieżącej iteracji
- Testowanie punktu końcowego przewidywania
Uwierzytelnianie klienta
Utwórz wystąpienie obiektu klienta przy użyciu Twojego punktu końcowego i Twojego klucza. Utwórz obiekt ApiKeyCredentials używając klucza, a następnie użyj go z punktem końcowym, aby utworzyć obiekty 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, wstaw następujący kod po utworzeniu tagu. Ten kod ładuje każde zdjęcie 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łady zestawu SDK Python Foundry Tools.
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ę za pomocą node polecenia w pliku Szybki start.
node index.js
Dane wyjściowe aplikacji powinny być podobne do następującego 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 również wrócić do witryny internetowej usługi Custom Vision i zobaczyć bieżący stan nowo utworzonego projektu.
Jeśli chcesz zaimplementować własny projekt klasyfikacji obrazów (lub zamiast tego wypróbować projekt wykrywania obiektów ), możesz usunąć projekt identyfikacji drzewa z tego przykładu. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.
W witrynie internetowej Custom Vision przejdź do Projects i wybierz kosz w obszarze Mój nowy Project.
Powiązana zawartość
W tym przewodniku pokazano, jak można wykonać każdy krok procesu wykrywania obiektó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.
- Co to jest usługa Custom Vision?
- Kod źródłowy dla tego przykładu można znaleźć w witrynie GitHub
- dokumentacja referencyjna SDK (szkolenie)
- dokumentacja referencyjna SDK (predykcja)
Rozpocznij pracę z biblioteką klienta usługi Custom Vision dla 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 wskazówki oparte na przeglądarce.
Użyj biblioteki klienta Custom Vision w Pythonie, 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 | Package (PyPI) | Przykłady
Wymagania wstępne
- Subskrypcja Azure. Możesz utworzyć go bezpłatnie.
-
Python 3.x.
- Instalacja Python powinna obejmować pip. Możesz sprawdzić, czy masz zainstalowane narzędzie pip, uruchamiając polecenie
pip --versionw wierszu polecenia. Pobierz narzędzie pip, instalując najnowszą wersję Python.
- Instalacja Python powinna obejmować pip. Możesz sprawdzić, czy masz zainstalowane narzędzie pip, uruchamiając polecenie
- Po utworzeniu subskrypcji Azure utwórz zasób Custom Vision w portalu Azure w celu utworzenia zasobu szkoleniowego 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.
- Możesz użyć warstwy cenowej bezpłatna (
Tworzenie zmiennych środowiskowych
W tym przykładzie wstawisz swoje poświadczenia do zmiennych środowiskowych na lokalnej maszynie uruchamiającej aplikację.
Przejdź do portalu Azure. 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 Klucze i punkty końcowe zasobów w obszarze Zarządzanie zasobami. Musisz uzyskać klucze zarówno do zasobu szkoleniowego, jak i zasobu predykcyjnego, wraz z punktami końcowymi API.
Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości na karcie portalu Azure, na liście Resource ID.
Wskazówka
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.
Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
VISION_TRAINING KEYśrodowiskową, zastąp<your-training-key>jednym z kluczy zasobu szkoleniowego. - Aby ustawić zmienną środowiska
VISION_TRAINING_ENDPOINT, zastąp<your-training-endpoint>punktem końcowym swojego zasobu szkoleniowego. - Aby ustawić zmienną
VISION_PREDICTION_KEYśrodowiskową, zamień<your-prediction-key>jednym z kluczy zasobu przewidywania. - Aby ustawić zmienną
VISION_PREDICTION_ENDPOINTśrodowiskową, zastąp<your-prediction-endpoint>punktem końcowym zasobu prognozowania. - Aby ustawić zmienną
VISION_PREDICTION_RESOURCE_IDśrodowiskową, zastąp<your-resource-id>wartość identyfikatorem zasobu przewidywania.
Ważne
Zalecamy uwierzytelnianie przy użyciu Microsoft Entra ID i zarządzanych tożsamości dla zasobów Azure aby uniknąć przechowywania poświadczeń w aplikacjach działających w chmurze.
Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.
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 odczytują zmienne środowiskowe, w tym okno konsoli.
Konfigurowanie
Instalowanie biblioteki klienta
Aby napisać aplikację do analizy obrazów za pomocą usługi Custom Vision dla Python, potrzebujesz biblioteki klienta usługi Custom Vision. Po zainstalowaniu Python uruchom następujące polecenie w programie PowerShell lub oknie konsoli:
pip install azure-cognitiveservices-vision-customvision
Tworzenie nowej aplikacji Python
Utwórz nowy plik 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
Wskazówka
Chcesz wyświetlić cały plik kodu Szybkiego startu jednocześnie? Można go znaleźć w GitHub który zawiera przykłady kodu w tym przewodniku Szybki start.
Utwórz zmienne dla punktu końcowego Azure i kluczy zasobu.
# 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"]
Model obiektów
| Nazwa | 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 ID obiektu oraz jego nazwy, lokalizację ramki ograniczającej obiektu oraz współczynnik pewności. |
Przykłady kodu
Te fragmenty kodu pokazują, jak wykonać następujące czynności za pomocą biblioteki klienta usługi Custom Vision dla Python:
- Uwierzytelnianie klienta
- Tworzenie nowego projektu usługi Custom Vision
- Dodawanie tagów do projektu
- Przekazywanie i tagowanie obrazów
- Trenuj projekt
- Publikowanie bieżącej iteracji
- Testowanie punktu końcowego przewidywania
Uwierzytelnianie klienta
Utwórz wystąpienie klienta szkoleniowego i predykcyjnego, używając punktu końcowego i kluczy. Utwórz ApiKeyServiceClientCredentials obiekty za pomocą swoich kluczy, a następnie użyj ich z punktem końcowym, aby utworzyć obiekt CustomVisionTrainingClient oraz CustomVisionPredictionClient.
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)
Tworzenie nowego projektu usługi Custom Vision
Dodaj następujący kod do skryptu, aby utworzyć nowy projekt usługi Custom Vision.
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, wstaw następujący kod po utworzeniu tagu. Ten kod ładuje każde zdjęcie z odpowiednim tagiem. Za jednym razem można wgrać 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 w zależności od miejsca, w którym pobrano repozytorium Foundry Tools Python SDK Samples.
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)
Wskazówka
Szkolenie z użyciem wybranych tagów
Możesz opcjonalnie trenować tylko na części 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 pobrać przewidywanie, dodaj następujący kod na końcu pliku:
# 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))
Uruchamianie aplikacji
Uruchom aplikację przy użyciu następującego polecenia:
python CustomVisionQuickstart.py
Dane wyjściowe aplikacji powinny być podobne do następującego 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 również wrócić do witryny internetowej usługi Custom Vision i zobaczyć bieżący stan nowo utworzonego projektu.
Czyszczenie zasobów
Jeśli chcesz zaimplementować własny projekt klasyfikacji obrazów (lub zamiast tego wypróbować projekt wykrywania obiektów ), możesz usunąć projekt identyfikacji drzewa z tego przykładu. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.
W witrynie internetowej Custom Vision przejdź do Projects i wybierz kosz w obszarze Mój nowy Project.
Powiązana zawartość
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.
- Co to jest usługa Custom Vision?
- Kod źródłowy dla tego przykładu można znaleźć w witrynie GitHub
- Dokumentacja referencyjna zestawu SDK
Zacznij korzystać z 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 interfejsu API REST, 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 Azure. Możesz utworzyć go bezpłatnie.
- Po utworzeniu subskrypcji Azure utwórz zasób Custom Vision w portalu Azure w celu utworzenia zasobu szkoleniowego i przewidywania.
- Potrzebujesz klucza i punktu końcowego z utworzonych zasobów, aby połączyć aplikację z usługą Custom Vision. Później, w dalszej części szybkiego startu, wkleisz klucz i punkt końcowy do 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 podobna aplikacja 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:
- Zamień
{subscription key}na swój prawidłowy klucz. - Zastąp
{endpoint}punktem końcowym odpowiadającym Twojemu 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 narzędzi Foundry Tools.
- Zastąp
{name}nazwą swojego projektu. - Opcjonalnie ustaw inne parametry adresu URL, aby skonfigurować typ modelu używanego przez projekt. Aby uzyskać opcje, zobacz Tworzenie interfejsu API Project.
Zostanie wyświetlona odpowiedź JSON podobna do poniższego przykładu.
"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}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".
Zostanie wyświetlona odpowiedź JSON podobna do poniższego przykładu.
"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 API Tworzenie Obrazów z 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 trenuje model na oznakowanych obrazach, które przesłałeś, 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 interfejs API Train Project.
Wskazówka
Szkolenie z użyciem wybranych tagów
Możesz opcjonalnie trenować tylko na części 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}identyfikatorem zwróconym w poprzednim kroku. - Zamień
{publishedName}na nazwę, którą chcesz przypisać dla modelu przewidywania. - Zastąp
{predictionId}element własnym identyfikatorem zasobu predykcji. Identyfikator zasobu przewidywania można znaleźć na karcie Właściwości w portalu Azure wyświetlonym jako Resource ID. - Opcjonalnie użyj innych parametrów adresu URL. Zobacz Publikuj Iterację API.
Testowanie punktu końcowego przewidywania
Na koniec użyj tego polecenia, aby przetestować wytrenowany model, przesyłając nowy obraz do sklasyfikowania i przypisania tagów. Obraz można użyć 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}nazwą używaną 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 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 zaimplementować własny projekt klasyfikacji obrazów (lub zamiast tego wypróbować projekt wykrywania obiektów ), możesz usunąć projekt identyfikacji drzewa z tego przykładu. Bezpłatna subskrypcja umożliwia korzystanie z dwóch projektów usługi Custom Vision.
W witrynie internetowej Custom Vision przejdź do Projects i wybierz kosz w obszarze Mój nowy Project.
Powiązana zawartość
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.