Chamar a API de previsão

Depois de ter treinado um modelo, é possível 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 pontuar uma imagem. Você aprenderá as diversas maneiras de configurar o comportamento dessa API para atender às suas necessidades.

Observação

Este documento demonstra o uso da biblioteca de clientes do .NET para C# para enviar uma imagem à API de Previsão. Veja mais informações e exemplos na referência da API de Previsão.

Instalação

Publicar uma iteração treinada

Na página da Web Visão Personalizada, selecione o projeto e então selecione a guia Desempenho.

Para enviar imagens à API de Previsão, você precisa publicar a iteração para previsão. Para isso, selecione Publicar e especifique um nome para a iteração publicada. O modelo ficará acessível à API de Previsão do seu recurso do Azure de Visão Personalizada.

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

Depois da publicação do modelo, a etiqueta "Publicado" aparece ao lado da iteração, na barra lateral esquerda, e o nome do modelo aparece 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 a chave de URL e previsão

Depois da publicação do modelo, você pode selecionar URL de Previsão para recuperar as informações necessárias. Será aberta 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 da Visão Personalizada e uma URL de ponto de extremidade. Para obter instruções sobre como configurar esse recurso, siga um dos guias de início rápido.

Neste guia, você usará uma imagem local, portanto, baixe uma imagem que você 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 ClassifyImageAsync usa a ID do projeto e a imagem armazenada localmente e pontua a imagem em relação ao modelo determinado.

// 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 (confira 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 fique travado por um período de tempo perceptível.

Os métodos -WithNoStore exigem que o serviço não mantenha 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 iterações futuras do seu modelo.

Os métodos -WithHttpMessages retornam a resposta HTTP bruta da chamada à 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 dos quais representa uma previsão de objeto único. Eles incluem o nome do rótulo e as coordenadas da caixa delimitadora em que o objeto foi detectado na imagem. Seu aplicativo pode analisar esses dados para, por exemplo, exibir a imagem com campos de objeto rotulados em uma tela.

Próximas etapas

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