Llamada a la API de predicción

Después de entrenar el modelo, puede probarlo mediante programación si envía imágenes al punto de conexión de Prediction API. En esta guía, aprenderá a llamar a la API de predicción para puntuar una imagen. Conocerá las distintas maneras en que puede configurar el comportamiento de esta API para satisfacer sus necesidades.

Nota

En este documento, se muestra el uso de la biblioteca cliente de .NET para C# para enviar una imagen a la API de predicción. Para más información y ejemplos, consulte la referencia de Prediction API.

Configurar

Publicación de la iteración entrenada

En la página web de Custom Vision, seleccione el proyecto y luego seleccione la pestaña Rendimiento.

Para enviar imágenes a la API de predicción, primero debe publicar la iteración para la predicción; para ello, seleccione Publish (Publicar) y especifique un nombre para la iteración publicada. Esto hará que el modelo sea accesible a la instancia de Prediction API del recurso de Azure de Custom Vision.

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

Una vez que el modelo se ha publicado correctamente, verá que aparece una etiqueta "Published" (Publicado) junto a la iteración en la barra lateral izquierda y que su nombre aparece en la descripción de la iteración.

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

Obtención de una clave de predicción y dirección URL

Una vez que se ha publicado el modelo, puede recuperar la información necesaria mediante la selección de Prediction URL (Dirección URL de predicción). Se abre un cuadro de diálogo con información sobre el uso de Prediction API, incluidas las opciones Prediction URL (Dirección URL de predicción) y Prediction-Key (Clave de predicción).

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.

Envío de datos al servicio

En esta guía, se da por supuesto que ya ha construido un objeto CustomVisionPredictionClient , llamado predictionClient, con la clave de predicción y la dirección URL del punto de conexión de Custom Vision. Para obtener instrucciones sobre cómo configurar esta característica, siga uno de los inicios rápidos.

En esta guía, usará una imagen local, por lo que debe descargar una imagen que quiera enviar al modelo entrenado. El código siguiente solicita al usuario que especifique una ruta de acceso local y obtiene la secuencia de bytes del archivo en esa ruta de acceso.

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

Incluya el siguiente 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);
}

El método ClassifyImageAsync toma el identificador del proyecto y la imagen almacenada localmente, y puntúa la imagen según el modelo especificado.

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

Determinación de cómo se procesan los datos

Opcionalmente, puede configurar cómo realiza el servicio la operación de puntuación eligiendo métodos alternativos (consulte los métodos de la clase CustomVisionPredictionClient ).

Puede usar una versión no asincrónica del método anterior para simplificar, pero esto puede hacer que el programa se bloquee durante un período de tiempo apreciable.

Los métodos -WithNoStore requieren que el servicio no conserve la imagen de predicción una vez completada la predicción. Normalmente, el servicio conserva estas imágenes, por lo que tiene la opción de agregarlas como datos de entrenamiento para futuras iteraciones del modelo.

Los métodos -WithHttpMessages devuelven la respuesta HTTP sin procesar de la llamada API.

Obtención de resultados a partir del servicio

El servicio devuelve los resultados en forma de un objeto ImagePrediction . La propiedad Predictions contiene una lista de objetos PredictionModel , cada uno de los cuales representa la predicción de un solo objeto. Incluyen el nombre de la etiqueta y las coordenadas del rectángulo delimitador donde se detectó el objeto en la imagen. A continuación, la aplicación puede analizar estos datos para, por ejemplo, mostrar la imagen con los campos de objeto etiquetados en una pantalla.

Pasos siguientes

En esta guía, ha aprendido a enviar imágenes a su clasificador o detector de imágenes personalizado y a recibir una respuesta mediante programación con el SDK de C#. A continuación, aprenda a realizar escenarios de un extremo a otro con C# o comience a usar un SDK de un lenguaje diferente.