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 pontuar 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
No site Visão Personalizada, selecione seu projeto e, em seguida, selecione a guia Desempenho.
Para enviar imagens para a API de previsão, primeiro você precisa publicar sua iteração para previsão, o que pode ser feito selecionando Publicar e especificando um nome para a iteração publicada. Isso torna seu modelo acessível à API de Previsão do seu recurso Visão Personalizada do Azure.
Quando o modelo for publicado com êxito, o rótulo Publicado aparecerá ao lado da iteração na barra lateral esquerda e seu nome aparecerá na descrição da iteração.
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. Uma caixa de diálogo é aberta com informações para usar a API de Previsão, incluindo a URL de Previsão e a Chave de Previsão.
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ê usa 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. Para obter detalhes, consulte o método CustomVisionPredictionClient.
Você pode usar uma versão não assíncrona do método anterior para simplificar, mas isso pode fazer com que o programa trave por um período de tempo percetível.
Os -WithNoStore
métodos 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 -WithHttpMessages
métodos 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 Predictions
propriedade 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óximo passo
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.