Chamar a API de previsão

Depois de treinar seu modelo, você pode testá-lo programaticamente enviando imagens para o ponto de extremidade da API de previsão. Neste guia, você aprenderá a chamar a API de previsão para marcar uma imagem. Você aprenderá as diferentes maneiras de configurar o comportamento dessa API para atender às suas necessidades.

Nota

Este documento demonstra o uso da biblioteca de cliente .NET para C# para enviar uma imagem para a API de previsão. Para obter mais informações e exemplos, consulte a referência da API de previsão.

Configurar

Publique sua iteração treinada

Na página Web do Serviço de Visão Personalizada, selecione o seu projeto e, em seguida, selecione o separador Performance (Desempenho).

Para enviar imagens para a API de previsão, primeiro você precisará publicar sua iteração para previsão, o que pode ser feito selecionando Publicar e especificando um nome para a iteração publicada. Isso tornará seu modelo acessível à API de Previsão do seu recurso Visão Personalizada do Azure.

The performance tab is shown, with a red rectangle surrounding the Publish button.

Depois que o modelo for publicado com sucesso, você verá um rótulo "Publicado" ao lado da iteração na barra lateral esquerda e seu nome aparecerá na descrição da iteração.

The performance tab is shown, with a red rectangle surrounding the Published label and the name of the published iteration.

Obter o URL e a chave de predição

Depois que o modelo for publicado, você poderá recuperar as informações necessárias selecionando URL de previsão. Isso abrirá uma caixa de diálogo com informações para usar a API de Previsão, incluindo a URL de Previsão e a Chave de Previsão.

The performance tab is shown with a red rectangle surrounding the Prediction URL button.

The performance tab is shown with a red rectangle surrounding the Prediction URL value for using an image file and the Prediction-Key value.

Enviar dados ao serviço

Este guia pressupõe que você já construiu um objeto CustomVisionPredictionClient , chamado predictionClient, com sua chave de previsão de Visão Personalizada e URL do ponto de extremidade. Para obter instruções sobre como configurar esse recurso, siga um dos inícios rápidos.

Neste guia, você usará uma imagem local, portanto, faça o download de uma imagem que gostaria de enviar para seu modelo treinado. O código a seguir solicita que o usuário especifique um caminho local e obtém o fluxo de bytes do arquivo nesse caminho.

Console.Write("Enter image file path: ");
string imageFilePath = Console.ReadLine();
byte[] byteData = GetImageAsByteArray(imageFilePath);

Inclua o seguinte método auxiliar:

private static byte[] GetImageAsByteArray(string imageFilePath)
{
    FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read);
    BinaryReader binaryReader = new BinaryReader(fileStream);
    return binaryReader.ReadBytes((int)fileStream.Length);
}

O método ClassifyImageAsync usa a ID do projeto e a imagem armazenada localmente e pontua a imagem em relação ao modelo fornecido.

// Make a prediction against the new project
Console.WriteLine("Making a prediction:");
var result = predictionApi.ClassifyImageAsync(project.Id, publishedModelName, byteData);

Determinar como processar os dados

Opcionalmente, você pode configurar como o serviço faz a operação de pontuação escolhendo métodos alternativos (consulte os métodos da classe CustomVisionPredictionClient).

Você pode usar uma versão não assíncrona do método acima para simplificar, mas isso pode fazer com que o programa trave por um período de tempo percetível.

Os métodos -WithNoStore exigem que o serviço não retenha a imagem de previsão após a conclusão da previsão. Normalmente, o serviço retém essas imagens para que você tenha a opção de adicioná-las como dados de treinamento para futuras iterações do seu modelo.

Os métodos -WithHttpMessages retornam a resposta HTTP bruta da chamada de API.

Obter resultados do serviço

O serviço retorna resultados na forma de um objeto ImagePrediction . A propriedade Predictions contém uma lista de objetos PredictionModel, cada um representando uma única previsão de objeto. Eles incluem o nome do rótulo e as coordenadas da caixa delimitadora onde o objeto foi detetado na imagem. Seu aplicativo pode analisar esses dados para, por exemplo, exibir a imagem com campos de objeto rotulados em uma tela.

Próximos passos

Neste guia, você aprendeu como enviar imagens para seu classificador/detetor de imagens personalizado e receber uma resposta programaticamente com o SDK do C#. Em seguida, saiba como concluir cenários de ponta a ponta com C# ou comece a usar um SDK de linguagem diferente.