Краткое руководство. Создание проекта классификации изображений с помощью клиентской библиотеки Пользовательское визуальное распознавание или REST API

Начало работы с клиентской библиотекой "Пользовательское визуальное распознавание" для .NET. Выполните следующие действия, чтобы установить пакет и протестировать пример кода для построения модели по классификации изображений. Вы создадите проект, добавьте теги, обучите проект и используйте URL-адрес конечной точки прогнозирования проекта для программного тестирования. Этот пример можно использовать как шаблон при создании собственного приложения для распознавания изображений.

Примечание.

Если вы хотите создать и обучить модель классификации без написания кода, см. руководство по работе со средствами на основе браузера.

Справочная документация | Исходный код библиотеки (обучение)(прогноз) | Пакет (NuGet) (обучение)(прогноз) | Примеры

Необходимые компоненты

  • Подписка Azure — создайте бесплатную учетную запись.
  • IDE Visual Studio или текущая версия .NET Core.
  • После получения подписки Azure создайте ресурс Пользовательское визуальное распознавание в портал Azure, чтобы создать обучающий и прогнозирующий ресурс.
    • Используйте бесплатную ценовую категорию (F0), чтобы опробовать службу, а затем выполните обновление до платного уровня для рабочей среды.

Создание переменной среды

В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.

Переход на портал Azure. Если Пользовательское визуальное распознавание ресурсы, созданные в разделе предварительных требований, развернуты успешно, нажмите кнопку "Перейти к ресурсу" в разделе "Дальнейшие действия". Ключи и конечные точки можно найти на страницах ключей и конечных точек ресурсов в разделе управления ресурсами. Вам потребуется получить ключи для ресурсов обучения и прогнозирования, а также конечных точек API.

Идентификатор ресурса прогнозирования можно найти на вкладке "Свойства" ресурса прогнозирования в портал Azure, указанном в качестве идентификатора ресурса.

Совет

Вы также используете https://www.customvision.ai/ для получения этих значений. После входа щелкните значок Параметры в правом верхнем углу. На страницах параметров можно просмотреть все ключи, идентификатор ресурса и конечные точки.

Внимание

Не включайте ключ непосредственно в код и никогда не публикуйте его. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье по безопасности служб ИИ Azure.

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  1. Чтобы задать VISION_TRAINING KEY переменную среды, замените your-training-key одним из ключей для учебного ресурса.
  2. Чтобы задать переменную среды, замените your-training-endpoint конечной VISION_TRAINING_ENDPOINT точкой для ресурса обучения.
  3. Чтобы задать VISION_PREDICTION_KEY переменную среды, замените your-prediction-key одним из ключей для ресурса прогнозирования.
  4. Чтобы задать переменную среды, замените your-prediction-endpoint конечной VISION_PREDICTION_ENDPOINT точкой для ресурса прогнозирования.
  5. Чтобы задать VISION_PREDICTION_RESOURCE_ID переменную среды, замените your-resource-id идентификатор ресурса для ресурса прогнозирования.
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

После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые будут считывать переменные среды, включая окно консоли.

Установка

Создание нового приложения C#

С помощью Visual Studio создайте приложение .NET Core.

Установка клиентской библиотеки

После создания проекта установите клиентскую библиотеку, щелкнув правой кнопкой мыши решение проекта в Обозревателе решений и выбрав пункт Управление пакетами NuGet. В открывшемся диспетчере пакетов выберите Просмотр, установите флажок Включить предварительные версии и выполните поиск по запросу Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training и Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. Выберите последнюю версию и затем нажмите Установка.

Совет

Хотите просмотреть готовый файл с кодом для этого краткого руководства? Его можно найти на сайте GitHub, где размещены примеры кода для этого краткого руководства.

В каталоге проекта откройте файл program.cs и с помощью using добавьте следующие директивы:

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;

В основном методе приложения создайте переменные, которые извлекают ключи и конечные точки ресурса из переменных среды. Вы также назначите некоторые основные объекты, которые будут использоваться позже.

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

В методе Main приложения добавьте вызовы методов, используемых в этом кратком руководстве. Вы реализуете их позже.

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

аутентификация клиента;

Создайте в новом методе экземпляры клиентов для обучения и прогноза с помощью ключей и конечной точки.

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

Создание проекта службы "Пользовательское визуальное распознавание"

Следующий фрагмент кода создает проект классификации изображений. Созданный проект будет отображаться на веб-сайте Пользовательской службы визуального распознавания. Ознакомьтесь с методом CreateProject, чтобы указать другие параметры при создании проекта (см. пояснения в руководстве по созданию классификатора с помощью веб-портала).

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

Добавление тегов в проект

Этот метод определяет теги, по которым вы будете обучать модель.

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

Отправка и снабжение тегами изображений

Сначала загрузите примеры изображений для этого проекта. Сохраните содержимое папки примеров изображений на локальном устройстве.

Затем определите вспомогательный метод для загрузки изображений в этот каталог. Возможно, чтобы указать путь папки, в которой сохранены изображения, потребуется изменить аргумент GetFiles.

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

Затем определите метод для загрузки изображений, используя теги, соответствующие расположению папки (изображения уже упорядочены). Вы можете загружать изображения, а также создавать для них метки итеративно или партиями (до 64 в одном пакете). Этот фрагмент кода содержит примеры обоих типов.

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

}

Обучение проекта

Этот метод создает первую обучающую итерацию в проекте. Он отправляет запрос в службу до завершения обучения.

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

Совет

Обучение с использованием выбранных тегов

При необходимости вы можете выполнить обучение с использованием только некоторых из примененных тегов. Это может потребоваться, если вы еще не применили достаточное количество определенных тегов, но у вас достаточно других. В вызове TrainProject используйте параметр trainingParameters. Создайте TrainingParameters и задайте для свойства SelectedTags список идентификаторов тегов, которые хотите использовать. Модель будет обучаться с распознаванием только тегов в этом списке.

Публикация текущей итерации

С помощью этого метода текущая итерация модели становится доступной для запросов. Вы можете использовать имя модели в качестве ссылки для отправки запросов на прогнозирование. Введите собственное значение для predictionResourceId. Идентификатор ресурса прогнозирования можно найти на вкладке Свойства ресурса на портале Azure в поле Идентификатор ресурса.

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
}

Тестирование конечной точки прогнозирования

Эта часть скрипта загружает тестовое изображение, запрашивает конечную точку модели и выводит данные прогнозирования на консоль.

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

Выполнение приложения

Запустите приложение, нажав кнопку Отладка в верхней части окна интегрированной среды разработки.

По мере запуска приложения он должен открыть консольное окно и записать следующие данные вывода:

Creating new project:
        Uploading images
        Training
Done!

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

Вы можете убедиться, что тестовое изображение (в Images/Test/) помечено соответствующим образом. Нажмите любую клавишу для выхода из приложения. Вы также можете вернуться к веб-сайту Пользовательской службы визуального распознавания и просмотреть текущее состояние созданного проекта.

Очистка ресурсов

Если нужно реализовать собственный проект классификации изображений (или использовать вместо него проект обнаружения объектов), вы можете удалить проект определения видов деревьев из этого примера. При работе в бесплатной подписке на Пользовательское визуальное распознавание можно создать два проекта.

На веб-сайте Пользовательской службы визуального распознавания перейдите в раздел проектов и щелкните значок корзины под заголовком "My New Project" (Мой новый проект).

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

Следующие шаги

Вы выполнили в коде все этапы процесса классификатора изображений. В этом примере выполняется одна итерация обучения, но часто нужно несколько раз обучать и тестировать модель, чтобы сделать ее более точной.

Это руководство содержит инструкции и пример кода, которые помогут вам приступить к работе с клиентской библиотекой службы "Пользовательское визуальное распознавание" для Go и создать модель классификации изображений. Здесь объясняется, как создать проект, добавить теги, обучить проект и использовать URL-адрес конечной точки прогнозирования проекта для программного тестирования. Этот пример можно использовать как шаблон при создании собственного приложения для распознавания изображений.

Примечание.

Если вы хотите создать и обучить модель классификации без написания кода, см. руководство по работе со средствами на основе браузера.

Используйте клиентскую библиотеку службы "Пользовательское визуальное распознавание" для Go, чтобы выполнять такие действия:

  • Создание проекта службы "Пользовательское визуальное распознавание"
  • Добавление тегов в проект
  • Отправка и снабжение тегами изображений
  • Обучение проекта
  • Публикация текущей итерации
  • Тестирование конечной точки прогнозирования

Справочная документация (обучение)(прогнозирование)

Необходимые компоненты

Создание переменной среды

В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.

Переход на портал Azure. Если Пользовательское визуальное распознавание ресурсы, созданные в разделе предварительных требований, развернуты успешно, нажмите кнопку "Перейти к ресурсу" в разделе "Дальнейшие действия". Ключи и конечные точки можно найти на страницах ключей и конечных точек ресурсов в разделе управления ресурсами. Вам потребуется получить ключи для ресурсов обучения и прогнозирования, а также конечных точек API.

Идентификатор ресурса прогнозирования можно найти на вкладке "Свойства" ресурса прогнозирования в портал Azure, указанном в качестве идентификатора ресурса.

Совет

Вы также используете https://www.customvision.ai/ для получения этих значений. После входа щелкните значок Параметры в правом верхнем углу. На страницах параметров можно просмотреть все ключи, идентификатор ресурса и конечные точки.

Внимание

Не включайте ключ непосредственно в код и никогда не публикуйте его. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье по безопасности служб ИИ Azure.

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  1. Чтобы задать VISION_TRAINING KEY переменную среды, замените your-training-key одним из ключей для учебного ресурса.
  2. Чтобы задать переменную среды, замените your-training-endpoint конечной VISION_TRAINING_ENDPOINT точкой для ресурса обучения.
  3. Чтобы задать VISION_PREDICTION_KEY переменную среды, замените your-prediction-key одним из ключей для ресурса прогнозирования.
  4. Чтобы задать переменную среды, замените your-prediction-endpoint конечной VISION_PREDICTION_ENDPOINT точкой для ресурса прогнозирования.
  5. Чтобы задать VISION_PREDICTION_RESOURCE_ID переменную среды, замените your-resource-id идентификатор ресурса для ресурса прогнозирования.
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

После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые будут считывать переменные среды, включая окно консоли.

Установка

Установка клиентской библиотеки Пользовательского визуального распознавания

Чтобы написать приложение для анализа изображений с помощью службы "Пользовательское визуальное распознавание" для Go, вам потребуется клиентская библиотека этой службы. Выполните следующую команду в PowerShell:

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

Или, если вы используете dep, выполните в репозитории следующую команду:

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

Получение примеров изображений

В этом примере используются образы из репозитория примеров пакета SDK для Python служб ИИ Azure на GitHub. Клонируйте или скачайте этот репозиторий в свою среду разработки. Запомните расположение папки. Оно потребуется в дальнейшем.

Создание проекта в службе "Пользовательское визуальное распознавание"

Создайте файл с именем sample.go в предпочтительном каталоге проекта и откройте его в редакторе кода.

Добавьте в скрипт следующий код, чтобы создать проект Пользовательской службы визуального распознавания.

Ознакомьтесь с методом CreateProject, чтобы указать другие параметры при создании проекта (см. пояснения в руководстве по созданию классификатора с помощью веб-портала).

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

Создание тегов в проекте

Чтобы создать теги классификации в проекте, добавьте в конец 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))

Отправка и снабжение тегами изображений

Чтобы добавить примеры изображений в проект, вставьте следующий код после создания тегов. Этот код загружает каждое изображение с соответствующим тегом. В одном пакете можно передать до 64 изображений.

Примечание.

Вам потребуется изменить путь к изображениям на основе того, где вы скачали проект azure AI Services Go SDK Samples.

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

Обучение и публикация проекта

Этот код создает первую итерацию модели прогнозирования и публикует итерацию в конечной точке прогнозирования. Имя, присвоенное опубликованной итерации, можно использовать для отправки запросов на прогнозирование. Итерация недоступна в конечной точке прогнозирования, пока она не будет опубликована.

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

Использование конечной точки прогнозирования

Чтобы отправить изображение в конечную точку прогнозирования и извлечь прогнозирование, добавьте в конец файла следующий код:

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

Выполнение приложения

Выполните sample.go.

go run sample.go

Выходные данные приложения должны выглядеть приблизительно так:

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%

Вы можете убедиться, что тестовое изображение (в <URL-адрес базового изображения>/images/Test/) отмечено соответствующим образом. Вы также можете вернуться к веб-сайту Пользовательской службы визуального распознавания и просмотреть текущее состояние созданного проекта.

Очистка ресурсов

Если нужно реализовать собственный проект классификации изображений (или использовать вместо него проект обнаружения объектов), вы можете удалить проект определения видов деревьев из этого примера. При работе в бесплатной подписке на Пользовательское визуальное распознавание можно создать два проекта.

На веб-сайте Пользовательской службы визуального распознавания перейдите в раздел проектов и щелкните значок корзины под заголовком "My New Project" (Мой новый проект).

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

Следующие шаги

Теперь вы узнали, как выполнять в коде каждый шаг процесса обнаружения объектов. В этом примере выполняется одна итерация обучения, но часто нужно несколько раз обучать и тестировать модель, чтобы сделать ее более точной.

Приступайте к работе с клиентской библиотекой Пользовательского визуального распознавания для Java и создайте модель классификации изображений. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач. Этот пример можно использовать как шаблон при создании собственного приложения для распознавания изображений.

Примечание.

Если вы хотите создать и обучить модель классификации без написания кода, см. руководство по работе со средствами на основе браузера.

Используйте клиентскую библиотеку Пользовательского визуального распознавания для Java, чтобы выполнять такие задачи:

  • Создание проекта службы "Пользовательское визуальное распознавание"
  • Добавление тегов в проект
  • Отправка и снабжение тегами изображений
  • Обучение проекта
  • Публикация текущей итерации
  • Тестирование конечной точки прогнозирования

Справочная документация | Исходный код библиотеки (обучение)(прогноз) | Артефакт (Maven) (обучение)(прогноз) | Примеры

Необходимые компоненты

Создание переменной среды

В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.

Переход на портал Azure. Если Пользовательское визуальное распознавание ресурсы, созданные в разделе предварительных требований, развернуты успешно, нажмите кнопку "Перейти к ресурсу" в разделе "Дальнейшие действия". Ключи и конечные точки можно найти на страницах ключей и конечных точек ресурсов в разделе управления ресурсами. Вам потребуется получить ключи для ресурсов обучения и прогнозирования, а также конечных точек API.

Идентификатор ресурса прогнозирования можно найти на вкладке "Свойства" ресурса прогнозирования в портал Azure, указанном в качестве идентификатора ресурса.

Совет

Вы также используете https://www.customvision.ai/ для получения этих значений. После входа щелкните значок Параметры в правом верхнем углу. На страницах параметров можно просмотреть все ключи, идентификатор ресурса и конечные точки.

Внимание

Не включайте ключ непосредственно в код и никогда не публикуйте его. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье по безопасности служб ИИ Azure.

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  1. Чтобы задать VISION_TRAINING KEY переменную среды, замените your-training-key одним из ключей для учебного ресурса.
  2. Чтобы задать переменную среды, замените your-training-endpoint конечной VISION_TRAINING_ENDPOINT точкой для ресурса обучения.
  3. Чтобы задать VISION_PREDICTION_KEY переменную среды, замените your-prediction-key одним из ключей для ресурса прогнозирования.
  4. Чтобы задать переменную среды, замените your-prediction-endpoint конечной VISION_PREDICTION_ENDPOINT точкой для ресурса прогнозирования.
  5. Чтобы задать VISION_PREDICTION_RESOURCE_ID переменную среды, замените your-resource-id идентификатор ресурса для ресурса прогнозирования.
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

После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые будут считывать переменные среды, включая окно консоли.

Установка

Создание проекта Gradle

В окне консоли (например, cmd, PowerShell или Bash) создайте новый каталог для приложения и перейдите в него.

mkdir myapp && cd myapp

Выполните команду gradle init из рабочей папки. Эта команда создает необходимые файлы сборки для Gradle, включая build.gradle.kts, который используется во время выполнения для создания и настройки приложения.

gradle init --type basic

Когда появится запрос на выбор предметно-ориентированного языка, выберите Kotlin.

Установка клиентской библиотеки

Найдите файл build.gradle.kts и откройте его в предпочитаемой интегрированной среде разработки или текстовом редакторе. Затем скопируйте и вставьте в файл приведенную ниже конфигурацию сборки. Эта конфигурация определяет проект как приложение Java, точкой входа которого является класс CustomVisionQuickstart. Он импортирует библиотеки Пользовательского визуального распознавания.

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

Создание файла Java

В рабочей папке выполните следующую команду, чтобы создать исходную папку проекта.

mkdir -p src/main/java

Перейдите в новую папку и создайте файл с именем CustomVisionQuickstart.java. Откройте его в предпочитаемом редакторе или интегрированной среде разработки и добавьте следующие операторы import:

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;

Совет

Хотите просмотреть готовый файл с кодом для этого краткого руководства? Его можно найти на сайте GitHub, где размещены примеры кода для этого краткого руководства.

В классе CustomVisionQuickstart приложения создайте переменные, которые извлекают ключи и конечную точку ресурса из переменных среды.

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

Важно!

Переход на портал Azure. Если Пользовательское визуальное распознавание ресурсы, созданные в разделе предварительных требований, развернуты успешно, нажмите кнопку "Перейти к ресурсу" в разделе "Дальнейшие действия". Ключи и конечную точку можно найти на страницах ключа и конечной точки ресурсов. Вам будет нужно получить ключи для учебных ресурсов и ресурсов прогнозирования, а также конечную точку API для учебного ресурса.

Идентификатор ресурса прогнозирования можно найти на вкладке Свойства ресурса на портале Azure в поле Идентификатор ресурса.

Важно!

Не забудьте удалить ключ из кода, когда закончите, и никогда не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.

В методе main приложения добавьте вызовы методов, используемых в этом кратком руководстве. Они будут определены позже.

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

Объектная модель

Следующие классы и интерфейсы воплощают некоторые основные функции клиентской библиотеки Пользовательского визуального распознавания для Java.

Имя Описание
CustomVisionTrainingClient Этот класс обрабатывает создание, обучение и публикацию ваших моделей.
CustomVisionPredictionClient Этот класс обрабатывает запросы ваших моделей для прогноза классификаций изображений.
ImagePrediction Этот класс определяет один прогноз для одного изображения. Он содержит свойства идентификатора и имени объекта, а также оценку доверительного уровня.

Примеры кода

Эти фрагменты кода показывают, как выполнить следующие действия с помощью клиентской библиотеки службы "Пользовательское визуальное распознавание" для Java:

аутентификация клиента;

Создайте в своем методе main экземпляры клиентов для обучения и прогноза с помощью ключей и конечной точки.

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

Создание проекта в службе "Пользовательское визуальное распознавание"

T## Создание проекта в службе "Пользовательское визуальное распознавание"

Приведенный ниже метод создает проект классификации изображений. Созданный проект будет отображаться на веб-сайте Пользовательской службы визуального распознавания, который вы посещали ранее. Ознакомьтесь с перегрузками метода CreateProject, чтобы указать другие параметры при создании проекта (см. пояснения в руководстве по созданию средства обнаружения объектов с помощью веб-портала).

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

Добавление тегов в проект

Этот метод определяет теги, по которым вы будете обучать модель.

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

Отправка и снабжение тегами изображений

Сначала загрузите примеры изображений для этого проекта. Сохраните содержимое папки примеров изображений на локальном устройстве.

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

Предыдущий фрагмент кода применяет две вспомогательные функции, которые извлекают изображения как потоки данных и загружают их в службу (можно передать до 64 изображений в одном пакете).

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

Обучение проекта

Этот метод создает первую обучающую итерацию в проекте. Он отправляет запрос в службу до завершения обучения.

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

Публикация текущей итерации

С помощью этого метода текущая итерация модели становится доступной для запросов. Вы можете использовать имя модели в качестве ссылки для отправки запросов на прогнозирование. Введите собственное значение для predictionResourceId. Идентификатор ресурса прогнозирования можно найти на вкладке Свойства ресурса на портале Azure в поле Идентификатор ресурса.

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

Тестирование конечной точки прогнозирования

Этот метод загружает тестовое изображение, запрашивает конечную точку модели и выводит данные прогнозирования на консоль.

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

Выполнение приложения

Чтобы создать приложение, выполните следующую команду:

gradle build

Запустите приложение, выполнив команду gradle run:

gradle run

Очистка ресурсов

Если вы хотите очистить и удалить подписку на службы искусственного интеллекта Azure, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы.

Если нужно реализовать собственный проект классификации изображений (или использовать вместо него проект обнаружения объектов), вы можете удалить проект определения видов деревьев из этого примера. При работе в бесплатной подписке на Пользовательское визуальное распознавание можно создать два проекта.

На веб-сайте Пользовательской службы визуального распознавания перейдите в раздел проектов и щелкните значок корзины под заголовком "My New Project" (Мой новый проект).

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

Следующие шаги

Теперь вы узнали, как выполнять в коде каждый этап классификации изображений. В этом примере выполняется одна итерация обучения, но часто нужно несколько раз обучать и тестировать модель, чтобы сделать ее более точной.

Это руководство содержит инструкции и пример кода, которые помогут вам начать работу с клиентской библиотекой Пользовательского визуального распознавания для Node.js и создать модель классификации изображений. Здесь объясняется, как создать проект, добавить теги, обучить проект и использовать URL-адрес конечной точки прогнозирования проекта для программного тестирования. Этот пример можно использовать как шаблон при создании собственного приложения для распознавания изображений.

Примечание.

Если вы хотите создать и обучить модель классификации без написания кода, см. руководство по работе со средствами на основе браузера.

Используйте клиентскую библиотеку "Пользовательское визуальное распознавание" для .NET, чтобы выполнять такие действия:

  • Создание проекта службы "Пользовательское визуальное распознавание"
  • Добавление тегов в проект
  • Отправка и снабжение тегами изображений
  • Обучение проекта
  • Публикация текущей итерации
  • Тестирование конечной точки прогнозирования

Справочная документация (обучение)(прогноз) | Исходный код библиотеки (обучение)(прогноз) | Пакет (npm) (обучение)(прогноз) | Примеры

Необходимые компоненты

  • Подписка Azure — создайте бесплатную учетную запись.
  • Текущая версия Node.js
  • После получения подписки Azure создайте ресурс Пользовательское визуальное распознавание в портал Azure, чтобы создать обучающий и прогнозирующий ресурс.
    • Используйте бесплатную ценовую категорию (F0), чтобы опробовать службу, а затем выполните обновление до платного уровня для рабочей среды.

Создание переменной среды

В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.

Переход на портал Azure. Если Пользовательское визуальное распознавание ресурсы, созданные в разделе предварительных требований, развернуты успешно, нажмите кнопку "Перейти к ресурсу" в разделе "Дальнейшие действия". Ключи и конечные точки можно найти на страницах ключей и конечных точек ресурсов в разделе управления ресурсами. Вам потребуется получить ключи для ресурсов обучения и прогнозирования, а также конечных точек API.

Идентификатор ресурса прогнозирования можно найти на вкладке "Свойства" ресурса прогнозирования в портал Azure, указанном в качестве идентификатора ресурса.

Совет

Вы также используете https://www.customvision.ai/ для получения этих значений. После входа щелкните значок Параметры в правом верхнем углу. На страницах параметров можно просмотреть все ключи, идентификатор ресурса и конечные точки.

Внимание

Не включайте ключ непосредственно в код и никогда не публикуйте его. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье по безопасности служб ИИ Azure.

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  1. Чтобы задать VISION_TRAINING KEY переменную среды, замените your-training-key одним из ключей для учебного ресурса.
  2. Чтобы задать переменную среды, замените your-training-endpoint конечной VISION_TRAINING_ENDPOINT точкой для ресурса обучения.
  3. Чтобы задать VISION_PREDICTION_KEY переменную среды, замените your-prediction-key одним из ключей для ресурса прогнозирования.
  4. Чтобы задать переменную среды, замените your-prediction-endpoint конечной VISION_PREDICTION_ENDPOINT точкой для ресурса прогнозирования.
  5. Чтобы задать VISION_PREDICTION_RESOURCE_ID переменную среды, замените your-resource-id идентификатор ресурса для ресурса прогнозирования.
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

После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые будут считывать переменные среды, включая окно консоли.

Установка

Создание нового приложения Node.js

В окне консоли (например, cmd, PowerShell или Bash) создайте новый каталог для приложения и перейдите в него.

mkdir myapp && cd myapp

Выполните команду npm init, чтобы создать приложение узла с помощью файла package.json.

npm init

Установка клиентской библиотеки

Чтобы написать приложение для анализа изображений с помощью Пользовательского визуального распознавания для Node.js, вам потребуются пакеты NPM этой службы. Чтобы установить их, выполните в PowerShell следующую команду:

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

Файл package.json этого приложения будет дополнен зависимостями.

Создайте файл с именем index.js и импортируйте следующие библиотеки:

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

Совет

Хотите просмотреть готовый файл с кодом для этого краткого руководства? Его можно найти на сайте GitHub, где размещены примеры кода для этого краткого руководства.

Создайте переменные для конечной точки Azure и ключей ресурса.

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

Кроме того, добавьте поля имени проекта и параметра времени ожидания для асинхронных вызовов.

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

Объектная модель

Имя Описание
TrainingAPIClient Этот класс обрабатывает создание, обучение и публикацию ваших моделей.
PredictionAPIClient Этот класс обрабатывает запросы ваших моделей для прогноза классификаций изображений.
Прогноз Этот интерфейс определяет один прогноз для одного изображения. Он содержит свойства идентификатора и имени объекта, а также оценку доверительного уровня.

Примеры кода

В этих фрагментах кода показано, как выполнить следующие действия с помощью клиентской библиотеки службы "Пользовательское визуальное распознавание" для JavaScript:

аутентификация клиента;

Создайте экземпляры клиентских объектов с использованием конечной точки и ключа. Создайте объект ApiKeyCredentials с ключом и используйте его с конечной точкой, чтобы создать объект TrainingAPIClient и 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);

Создание проекта службы "Пользовательское визуальное распознавание"

Запустите новую функцию, чтобы она содержала все вызовы функций службы "Пользовательское визуальное распознавание". Добавьте следующий код, чтобы создать проект Пользовательской службы визуального распознавания.

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

Добавление тегов в проект

Чтобы создать теги классификации в проекте, добавьте в функцию следующий код:

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

Отправка и снабжение тегами изображений

Сначала загрузите примеры изображений для этого проекта. Сохраните содержимое папки примеров изображений на локальном устройстве.

Чтобы добавить примеры изображений в проект, вставьте следующий код после создания тегов. Этот код загружает каждое изображение с соответствующим тегом.

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

Важно!

Вам потребуется изменить путь к изображениям (sampleDataRootна основе того, где вы скачали репозиторий sdk для Python служб ИИ Azure).

Обучение проекта

Этот код создает первую итерацию модели прогнозирования.

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

Публикация текущей итерации

Этот код позволяет опубликовать обученную итерацию в конечной точке прогнозирования. Имя, присвоенное опубликованной итерации, можно использовать для отправки запросов на прогнозирование. Итерация недоступна в конечной точке прогнозирования, пока она не будет опубликована.

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

Тестирование конечной точки прогнозирования

Чтобы отправить изображение в конечную точку прогнозирования и получить результат прогнозирования, добавьте в функцию указанный ниже код.

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

Затем добавьте в конец функции службы "Пользовательское визуальное распознавание" закрывающую фигурную скобку и вызовите функцию.

})()

Выполнение приложения

Запустите приложение, выполнив команду node для файла quickstart.

node index.js

Выходные данные приложения должны выглядеть приблизительно так:

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%

Вы можете убедиться, что тестовое изображение (в <sampleDataRoot>/Test/) помечено соответствующим образом. Вы также можете вернуться к веб-сайту Пользовательской службы визуального распознавания и просмотреть текущее состояние созданного проекта.

Если нужно реализовать собственный проект классификации изображений (или использовать вместо него проект обнаружения объектов), вы можете удалить проект определения видов деревьев из этого примера. При работе в бесплатной подписке на Пользовательское визуальное распознавание можно создать два проекта.

На веб-сайте Пользовательской службы визуального распознавания перейдите в раздел проектов и щелкните значок корзины под заголовком "My New Project" (Мой новый проект).

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

Следующие шаги

Теперь вы узнали, как выполнять в коде каждый шаг процесса обнаружения объектов. В этом примере выполняется одна итерация обучения, но часто нужно несколько раз обучать и тестировать модель, чтобы сделать ее более точной.

Начало работы с клиентской библиотекой службы "Пользовательское визуальное распознавание" для Python. Выполните следующие действия, чтобы установить пакет и протестировать пример кода для построения модели по классификации изображений. Здесь объясняется, как создать проект, добавить теги, обучить проект и использовать URL-адрес конечной точки прогнозирования проекта для программного тестирования. Этот пример можно использовать как шаблон при создании собственного приложения для распознавания изображений.

Примечание.

Если вы хотите создать и обучить модель классификации без написания кода, см. руководство по работе со средствами на основе браузера.

Используйте клиентскую библиотеку службы "Пользовательское визуальное распознавание" для Python, чтобы выполнять такие действия:

  • Создание проекта службы "Пользовательское визуальное распознавание"
  • Добавление тегов в проект
  • Отправка и снабжение тегами изображений
  • Обучение проекта
  • Публикация текущей итерации
  • Тестирование конечной точки прогнозирования

Справочная документация | Исходный код библиотеки | Пакет (PyPI) | Примеры

Необходимые компоненты

  • Подписка Azure — создайте бесплатную учетную запись.
  • Python 3.x
    • Установка Python должна включать pip. Чтобы проверить, установлен ли pip, выполните команду pip --version в командной строке. Чтобы использовать pip, установите последнюю версию Python.
  • После получения подписки Azure создайте ресурс Пользовательское визуальное распознавание в портал Azure для создания учебного и прогнозирующего ресурса.
    • Используйте бесплатную ценовую категорию (F0), чтобы опробовать службу, а затем выполните обновление до платного уровня для рабочей среды.

Создание переменной среды

В этом примере учетные данные записываются в переменные среды на локальном компьютере, на котором запущено приложение.

Переход на портал Azure. Если Пользовательское визуальное распознавание ресурсы, созданные в разделе предварительных требований, развернуты успешно, нажмите кнопку "Перейти к ресурсу" в разделе "Дальнейшие действия". Ключи и конечные точки можно найти на страницах ключей и конечных точек ресурсов в разделе управления ресурсами. Вам потребуется получить ключи для ресурсов обучения и прогнозирования, а также конечных точек API.

Идентификатор ресурса прогнозирования можно найти на вкладке "Свойства" ресурса прогнозирования в портал Azure, указанном в качестве идентификатора ресурса.

Совет

Вы также используете https://www.customvision.ai/ для получения этих значений. После входа щелкните значок Параметры в правом верхнем углу. На страницах параметров можно просмотреть все ключи, идентификатор ресурса и конечные точки.

Внимание

Не включайте ключ непосредственно в код и никогда не публикуйте его. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье по безопасности служб ИИ Azure.

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  1. Чтобы задать VISION_TRAINING KEY переменную среды, замените your-training-key одним из ключей для учебного ресурса.
  2. Чтобы задать переменную среды, замените your-training-endpoint конечной VISION_TRAINING_ENDPOINT точкой для ресурса обучения.
  3. Чтобы задать VISION_PREDICTION_KEY переменную среды, замените your-prediction-key одним из ключей для ресурса прогнозирования.
  4. Чтобы задать переменную среды, замените your-prediction-endpoint конечной VISION_PREDICTION_ENDPOINT точкой для ресурса прогнозирования.
  5. Чтобы задать VISION_PREDICTION_RESOURCE_ID переменную среды, замените your-resource-id идентификатор ресурса для ресурса прогнозирования.
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

После добавления переменных среды может потребоваться перезапустить все запущенные программы, которые будут считывать переменные среды, включая окно консоли.

Установка

Установка клиентской библиотеки

Чтобы написать приложение для анализа изображений с помощью службы "Пользовательское визуальное распознавание" для Python, вам потребуется клиентская библиотека этой службы. После установки Python выполните следующую команду в PowerShell или в окне консоли:

pip install azure-cognitiveservices-vision-customvision

Создание приложения Python

Создайте файл Python и импортируйте следующие библиотеки.

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

Совет

Хотите просмотреть готовый файл с кодом для этого краткого руководства? Его можно найти на сайте GitHub, где размещены примеры кода для этого краткого руководства.

Создайте переменные для конечной точки Azure и ключей ресурса.

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

Объектная модель

Имя Описание
CustomVisionTrainingClient Этот класс обрабатывает создание, обучение и публикацию ваших моделей.
CustomVisionPredictionClient Этот класс обрабатывает запросы ваших моделей для прогноза классификаций изображений.
ImagePrediction Этот класс определяет прогнозирование одного объекта на одном изображении. Он содержит свойства для идентификатора объекта и его имени, расположение ограничивающего прямоугольника объекта и оценку достоверности.

Примеры кода

В этих фрагментах кода показано, как выполнить следующие действия с помощью клиентской библиотеки службы "Пользовательское визуальное распознавание" для Python:

аутентификация клиента;

Создайте экземпляр клиента для обучения и прогноза, используя ключи и конечную точку. Создайте объекты ApiKeyServiceClientCredentials со своими ключами и используйте их с конечной точкой для создания объекта CustomVisionTrainingClient и 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)

Создание проекта службы "Пользовательское визуальное распознавание"

Добавьте в скрипт следующий код, чтобы создать проект Пользовательской службы визуального распознавания.

Ознакомьтесь с методом create_project, чтобы указать другие параметры при создании проекта (см. пояснения в руководстве по созданию классификатора с помощью веб-портала).

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)

Добавление тегов в проект

Чтобы добавить теги классификации в проект, добавьте следующий код:

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

Отправка и снабжение тегами изображений

Сначала загрузите примеры изображений для этого проекта. Сохраните содержимое папки примеров изображений на локальном устройстве.

Чтобы добавить примеры изображений в проект, вставьте следующий код после создания тегов. Этот код загружает каждое изображение с соответствующим тегом. В одном пакете можно передать до 64 изображений.

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)

Примечание.

Вам потребуется изменить путь к изображениям на основе того, где вы скачали репозиторий sdk для Python служб ИИ Azure.

Обучение проекта

Этот код создает первую итерацию модели прогнозирования.

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)

Совет

Обучение с использованием выбранных тегов

При необходимости вы можете выполнить обучение с использованием только некоторых из примененных тегов. Это может потребоваться, если вы еще не применили достаточное количество определенных тегов, но у вас достаточно других. В вызове train_project задайте для необязательного параметра selected_tags список строк с идентификаторами тегов, которые хотите использовать. Модель будет обучаться с распознаванием только тегов в этом списке.

Публикация текущей итерации

Итерация недоступна в конечной точке прогнозирования, пока она не будет опубликована. С помощью следующего кода текущая итерация модели становится доступной для запросов.

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

Тестирование конечной точки прогнозирования

Чтобы отправить изображение в конечную точку прогнозирования и извлечь прогнозирование, добавьте в конец файла следующий код:

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

Выполнение приложения

Запустите CustomVisionQuickstart.py.

python CustomVisionQuickstart.py

Выходные данные приложения должны выглядеть приблизительно так:

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

Вы можете убедиться, что тестовое изображение (в <расположение базового изображения>/images/Test/) отмечено соответствующим образом. Вы также можете вернуться к веб-сайту Пользовательской службы визуального распознавания и просмотреть текущее состояние созданного проекта.

Очистка ресурсов

Если нужно реализовать собственный проект классификации изображений (или использовать вместо него проект обнаружения объектов), вы можете удалить проект определения видов деревьев из этого примера. При работе в бесплатной подписке на Пользовательское визуальное распознавание можно создать два проекта.

На веб-сайте Пользовательской службы визуального распознавания перейдите в раздел проектов и щелкните значок корзины под заголовком "My New Project" (Мой новый проект).

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

Следующие шаги

Теперь вы узнали, как выполнять в коде каждый этап классификации изображений. В этом примере выполняется одна итерация обучения, но часто нужно несколько раз обучать и тестировать модель, чтобы сделать ее более точной.

Начало работы с REST API Пользовательского визуального распознавания Выполните описанные ниже действия, чтобы вызвать API и создать модель классификации изображений. Здесь объясняется, как создать проект, добавить теги, обучить проект и использовать URL-адрес конечной точки прогнозирования проекта для программного тестирования. Этот пример можно использовать как шаблон при создании собственного приложения для распознавания изображений.

Примечание.

Пользовательское визуальное распознавание проще всего использовать с помощью пакета SDK клиентской библиотеки. Также можно воспользоваться руководством по работе со средствами на основе браузера.

Используйте клиентскую библиотеку "Пользовательское визуальное распознавание" для .NET, чтобы выполнять такие действия:

  • Создание проекта службы "Пользовательское визуальное распознавание"
  • Добавление тегов в проект
  • Отправка и снабжение тегами изображений
  • Обучение проекта
  • Публикация текущей итерации
  • Тестирование конечной точки прогнозирования

Необходимые компоненты

  • Подписка Azure — создайте бесплатную учетную запись.
  • После получения подписки Azure создайте ресурс Пользовательское визуальное распознавание в портал Azure, чтобы создать обучающий и прогнозирующий ресурс, а также получить ключи и конечную точку. Дождитесь, пока закончится развертывание, и нажмите кнопку Перейти к ресурсу.
    • Вам понадобится ключ и конечная точка из ресурсов, которые вы создаете, чтобы подключить ваше приложение к службе "Пользовательское визуальное распознавание". Ключ и конечная точка будут вставлены в приведенный ниже код в кратком руководстве.
    • Используйте бесплатную ценовую категорию (F0), чтобы опробовать службу, а затем выполните обновление до платного уровня для рабочей среды.
  • PowerShell версии 6.0 и выше или аналогичное приложение командной строки.

Создание проекта службы "Пользовательское визуальное распознавание"

Для создания проекта классификации изображений используйте команду, которая похожа на приведенную ниже. Созданный проект будет отображаться на веб-сайте Пользовательской службы визуального распознавания.

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

Скопируйте команду в текстовый редактор и внесите следующие изменения:

  • Замените {subscription key} действительным ключом API распознавания лиц.
  • Замените {endpoint} конечной точкой, соответствующей ключу.

    Примечание.

    Новые ресурсы, созданные после 1 июля 2019 г., будут использовать пользовательские имена поддоменов. Дополнительные сведения и полный список региональных конечных точек см. в разделе "Пользовательские имена поддомена" для служб ИИ Azure.

  • Замените {name} именем проекта.
  • При необходимости задайте другие параметры URL-адреса, чтобы указать, какой тип модели будет использоваться в проекте. Варианты см. на странице, посвященной API CreatProject.

Вы получите примерно такой ответ JSON. Сохраните значение "id" проекта во временном расположении.

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

Добавление тегов в проект

Используйте следующую команду, чтобы определить теги, по которым будет проводиться обучение модели.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/tags?name={name}"
  • Еще раз вставьте собственный ключ и URL-адрес конечной точки.
  • Замените {projectId} собственным идентификатором проекта.
  • Замените {name} именем необходимого тега.

Повторите эту процедуру для всех тегов, которые нужно использовать в проекте. Если вы используете предоставленные примеры изображений, добавьте теги "Hemlock" и "Japanese Cherry".

Вы получите примерно такой ответ JSON. Сохраните значение "id" для каждого тега во временном расположении.

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

Отправка и снабжение тегами изображений

Теперь скачайте примеры изображений для этого проекта. Сохраните содержимое папки примеров изображений на локальном устройстве.

С помощью следующей команды отправьте изображения и примените теги: один раз используйте команду для изображений с тегом Hemlock, а другой — для изображений с тегом Japanese Cherry. Дополнительные варианты см. на странице, посвященной API CreateImagesFromData.

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}"
  • Еще раз вставьте собственный ключ и URL-адрес конечной точки.
  • Замените {projectId} собственным идентификатором проекта.
  • Замените {tagArray} идентификатором тега.
  • Затем укажите в тексте запроса двоичные данные изображений, которые нужно пометить тегами.

Обучение проекта

Этот метод обучает модель, используя отправленные изображения с тегами, и возвращает идентификатор для текущей итерации проекта.

curl -v -X POST -H "Content-Type: application/json" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/train"
  • Еще раз вставьте собственный ключ и URL-адрес конечной точки.
  • Замените {projectId} собственным идентификатором проекта.
  • Замените {tagArray} идентификатором тега.
  • Затем укажите в тексте запроса двоичные данные изображений, которые нужно пометить тегами.
  • При необходимости можно использовать другие параметры URL-адреса. Варианты см. на странице, посвященной API TrainProject.

Совет

Обучение с использованием выбранных тегов

При необходимости вы можете выполнить обучение с использованием только некоторых из примененных тегов. Это может потребоваться, если вы еще не применили достаточное количество определенных тегов, но у вас достаточно других. Добавьте необязательное содержимое JSON в текст запроса. Заполните массив "selectedTags" идентификаторами необходимых тегов.

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

Ответ JSON содержит сведения о вашем обученном проекте, включая идентификатор итерации ("id"). Сохраните это значение для следующего шага.

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

Публикация текущей итерации

С помощью этого метода текущая итерация модели становится доступной для запросов. Используйте полученное имя модели в качестве ссылки для отправки запросов на прогнозирование.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Еще раз вставьте собственный ключ и URL-адрес конечной точки.
  • Замените {projectId} собственным идентификатором проекта.
  • Замените {iterationId} идентификатором, возвращенным на предыдущем шаге.
  • Замените {publishedName} именем, которое вы хотите присвоить модели прогнозирования.
  • Замените {predictionId} своим идентификатором ресурса прогнозирования. Идентификатор ресурса прогнозирования можно найти на вкладке Свойства ресурса на портале Azure в поле Идентификатор ресурса.
  • При необходимости можно использовать другие параметры URL-адреса. См. статью, посвященную API PublishIteration.

Тестирование конечной точки прогнозирования

Теперь с помощью приведенной ниже команды протестируйте обученную модель, отправив новое изображение для классификации с использованием тегов. Можно использовать изображение из папки Test с примерами файлов, скачанных ранее.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • Еще раз вставьте собственный ключ и URL-адрес конечной точки.
  • Замените {projectId} собственным идентификатором проекта.
  • Замените {publishedName} значением, которое вы использовали на предыдущем шаге.
  • Добавьте двоичные данные локального изображения в текст запроса.
  • При необходимости можно использовать другие параметры URL-адреса. См. статью, посвященную API ClassifyImage.

В полученном ответе JSON будут перечислены все теги, которые модель применила к изображению, а также оценки вероятности для каждого тега.

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

Если нужно реализовать собственный проект классификации изображений (или использовать вместо него проект обнаружения объектов), вы можете удалить проект определения видов деревьев из этого примера. При работе в бесплатной подписке на Пользовательское визуальное распознавание можно создать два проекта.

На веб-сайте Пользовательской службы визуального распознавания перейдите в раздел проектов и щелкните значок корзины под заголовком "My New Project" (Мой новый проект).

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

Следующие шаги

Вы выполнили все этапы процесса классификации изображений с помощью REST API. В этом примере выполняется одна итерация обучения, но часто нужно несколько раз обучать и тестировать модель, чтобы сделать ее более точной.