Início Rápido: criar um projeto de classificação de imagem com o SDK do .NET de Visão PersonalizadaQuickstart: Create an image classification project with the Custom Vision .NET SDK

Este artigo fornece informações e código de exemplo para ajudar você a começar a usar o SDK da Visão Personalizada com C# para criar um modelo de classificação de imagem.This article provides information and sample code to help you get started using the Custom Vision SDK with C# to build an image classification model. Depois de criada, você poderá adicionar marcas, carregar imagens, treinar o projeto, obter a URL de ponto de extremidade de previsão do projeto padrão e usar o ponto de extremidade para testar programaticamente uma imagem.After it's created, you can add tags, upload images, train the project, obtain the project's default prediction endpoint URL, and use the endpoint to programmatically test an image. Use este exemplo como um modelo para criar seu próprio aplicativo .NET.Use this example as a template for building your own .NET application. Se você quiser passar pelo processo de criar e usar um modelo de classificação sem código, confira as diretrizes baseadas em navegador.If you wish to go through the process of building and using a classification model without code, see the browser-based guidance instead.

Pré-requisitosPrerequisites

Obter o SDK de Visão Personalizada e um exemplo de códigoGet the Custom Vision SDK and sample code

Para escrever um aplicativo .NET que usa a Visão Personalizada, você precisará dos pacotes NuGet da Visão Personalizada.To write a .NET app that uses Custom Vision, you'll need the Custom Vision NuGet packages. Esses pacotes estão incluídos no projeto de exemplo que você baixará, mas é possível acessá-los individualmente aqui.These packages are included in the sample project you will download, but you can access them individually here.

Clone ou baixe o projeto Exemplos de .NET dos Serviços Cognitivos.Clone or download the Cognitive Services .NET Samples project. Navegue até a pasta CustomVision/ImageClassification e abra ImageClassification.csproj no Visual Studio.Navigate to the CustomVision/ImageClassification folder and open ImageClassification.csproj in Visual Studio.

Este projeto do Visual Studio cria um novo projeto de Visão Personalizada denominado My New Project, que pode ser acessado pelo site da Visão Personalizada.This Visual Studio project creates a new Custom Vision project named My New Project, which can be accessed through the Custom Vision website. Ele então carrega as imagens para treinar e testar um classificador.It then uploads images to train and test a classifier. Neste projeto, o classificador serve para determinar se uma árvore é uma Cicuta ou uma Cerejeira.In this project, the classifier is intended to determine whether a tree is a Hemlock or a Japanese Cherry.

Obter as chaves de treinamento e previsãoGet the training and prediction keys

O projeto precisa de um conjunto de chaves de assinatura válido para interagir com o serviço.The project needs a valid set of subscription keys in order to interact with the service. Para obter um conjunto de chaves de avaliação gratuita, vá para o site do Serviço de Visão Personalizada e entre com uma conta da Microsoft.To get a set of free trial keys, go to the Custom Vision website and sign in with a Microsoft account. Selecione o ícone de engrenagem no canto superior direito.Select the gear icon in the upper right. Na seção Contas, veja os valores dos campos Chave de Treinamento, Chave de Previsão e ID do Recurso de Previsão.In the Accounts section, see the values in the Training Key, Prediction Key and Prediction Resource Id fields. Você precisará delas mais tarde.You will need these later.

Imagem da interface do usuário de chaves

Compreender o códigoUnderstand the code

Abra o arquivo Program.cs e inspecione o código.Open the Program.cs file and inspect the code. Insira suas chaves de assinatura nas definições pertinentes no método Main.Insert your subscription keys in the appropriate definitions in the Main method.

// <snippet_endpoint>
string ENDPOINT = Environment.GetEnvironmentVariable("CUSTOM_VISION_ENDPOINT");
// </snippet_endpoint>

// <snippet_keys>
// Add your training & prediction key from the settings page of the portal
string trainingKey = Environment.GetEnvironmentVariable("CUSTOM_VISION_TRAINING_KEY");
string predictionKey = Environment.GetEnvironmentVariable("CUSTOM_VISION_PREDICTION_KEY");
// </snippet_keys>

O parâmetro de ponto de extremidade deve apontar para a região em que o grupo de recursos do Azure que contém os recursos de Visão Personalizada foi criado.The Endpoint parameter should point to the region where the Azure resource group containing the Custom Vision resources was created in. Para este exemplo, consideramos a região Centro-Sul dos EUA e usaremos:For this example, we assume the South Central US region and use:

private static List<string> hemlockImages;

As linhas de código a seguir executam a funcionalidade principal do projeto.The following lines of code execute the primary functionality of the project.

Criar um novo projeto do Serviço de Visão PersonalizadaCreate a new Custom Vision service project

O projeto criado será exibido no site da Visão Personalizada visitado anteriormente.The created project will show up on the Custom Vision website that you visited earlier. Confira o método CreateProject para especificar outras opções ao criar seu projeto (explicado no guia do portal da Web Criar um classificador).See the CreateProject method to specify other options when you create your project (explained in the Build a classifier web portal guide).

// Create the Api, passing in the training key
CustomVisionTrainingClient trainingApi = new CustomVisionTrainingClient()
{

Criar marcas no projetoCreate tags in the project

    Endpoint = ENDPOINT
};

Carregar e marcar imagensUpload and tag images

As imagens para este projeto estão incluídas.The images for this project are included. Elas são referenciadas no método LoadImagesFromDisk em Program.cs.They are referenced in the LoadImagesFromDisk method in Program.cs. Você pode carregar até 64 imagens em um único lote.You can upload up to 64 images in a single batch.

Console.WriteLine("Creating new project:");
var project = trainingApi.CreateProject("My New Project");
// </snippet_create>

// <snippet_tags>
// Make two tags in the new project
var hemlockTag = trainingApi.CreateTag(project.Id, "Hemlock");
var japaneseCherryTag = trainingApi.CreateTag(project.Id, "Japanese Cherry");
// </snippet_tags>

// <snippet_upload>
// Add some images to the tags
Console.WriteLine("\tUploading images");
LoadImagesFromDisk();

// Images can be uploaded one at a time

Treinar o classificador e publicarTrain the classifier and publish

Este código cria a primeira iteração no projeto e, em seguida, a publica no ponto de extremidade de previsão.This code creates the first iteration in the project and then publishes that iteration to the prediction endpoint. O nome dado à iteração publicada pode ser usado para enviar solicitações de previsão.The name given to the published iteration can be used to send prediction requests. Uma iteração não fica disponível no ponto de extremidade de previsão até ser publicada.An iteration is not available in the prediction endpoint until it is published.

var 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")
{
        Thread.Sleep(1000);

        // Re-query the iteration to get it's updated status
        iteration = trainingApi.GetIteration(project.Id, iteration.Id);
}

// The iteration is now trained. Publish it to the prediction end point.
var publishedModelName = "treeClassModel";
var predictionResourceId = "<target prediction resource ID>";
trainingApi.PublishIteration(project.Id, iteration.Id, publishedModelName, predictionResourceId);
Console.WriteLine("Done!\n");

Definir o ponto de extremidade de previsãoSet the prediction endpoint

O ponto de extremidade de previsão é a referência que você pode usar para enviar uma imagem para o modelo atual e obter uma previsão de classificação.The prediction endpoint is the reference that you can use to submit an image to the current model and get a classification prediction.

// Create a prediction endpoint, passing in obtained prediction key
CustomVisionPredictionClient endpoint = new CustomVisionPredictionClient()
{
        ApiKey = predictionKey,
        Endpoint = SouthCentralUsEndpoint
};

Enviar uma imagem ao ponto de extremidade de previsão padrãoSubmit an image to the default prediction endpoint

Nesse script, a imagem de teste é carregada no método LoadImagesFromDisk e a saída de previsão do modelo é exibida no console.In this script, the test image is loaded in the LoadImagesFromDisk method, and the model's prediction output is to be displayed in the console. O valor da variável publishedModelName deve corresponder ao valor "Publicado como" encontrado na guia Desempenho do portal de Visão Personalizada.The value of the publishedModelName variable should correspond to the "Published as" value found on the Custom Vision portal's Performance tab.

// Make a prediction against the new project
Console.WriteLine("Making a prediction:");
var result = endpoint.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}");
}

Executar o aplicativoRun the application

Enquanto o aplicativo é executado, ele deve abrir uma janela do console e gravar a seguinte saída:As the application runs, it should open a console window and write the following output:

Creating new project:
        Uploading images
        Training
Done!

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

Em seguida, você pode verificar se a imagem de teste (encontrada em imagens/teste/ ) foi marcada apropriadamente.You can then verify that the test image (found in Images/Test/) is tagged appropriately. Pressione qualquer tecla para sair do aplicativo.Press any key to exit the application. Você pode também voltar para o site da Visão Personalizada e ver o estado atual do projeto recém-criado.You can also go back to the Custom Vision website and see the current state of your newly created project.

Limpar recursosClean up resources

Se você deseja implementar seu próprio projeto de classificação de imagens (ou experimentar um projeto de detecção de objeto em vez disso), você talvez queira excluir o projeto de identificação de árvore deste exemplo.If you wish to implement your own image classification project (or try an object detection project instead), you may want to delete the tree identification project from this example. Uma avaliação gratuita permite dois projetos de Visão Personalizada.A free trial allows for two Custom Vision projects.

No site de Visão Personalizada, navegue até Projetos e selecione a Lixeira em Meu novo projeto.On the Custom Vision website, navigate to Projects and select the trash can under My New Project.

Captura de tela de um painel rotulado Meu novo projeto, rotulada com um ícone de Lixeira

Próximas etapasNext steps

Agora você viu como cada etapa do processo de classificação de imagem pode ser executada em código.Now you have seen how every step of the image classification process can be done in code. Este exemplo executa uma iteração de treinamento única, mas muitas vezes você precisará treinar e testar o modelo várias vezes para torná-lo mais preciso.This sample executes a single training iteration, but often you will need to train and test your model multiple times in order to make it more accurate.