Inicio rápido: Reconocimiento de la entrada de lápiz digital con la API REST Ink Recognizer y C#
Nota
La API Ink Recognizer ha finalizado su versión preliminar el 26 de agosto de 2020. Si tiene recursos existentes de Ink Recognizer, puede seguir utilizándolos hasta que el servicio se retire completamente, el 31 de enero de 2021.
Use este inicio rápido para comenzar a enviar trazos de entrada de lápiz digital a la API Ink Recognizer. Esta aplicación de C# envía una solicitud de API que contiene datos del trazo de entrada de lápiz con formato JSON y muestra la respuesta.
Si bien esta aplicación está escrita en C#, la API es un servicio web RESTful compatible con la mayoría de los lenguajes de programación.
Normalmente se llamaría a la API desde una aplicación de entrada de lápiz digital. En este inicio rápido se envían los datos del trazo de entrada de lápiz digital para la siguiente muestra escrita a mano desde un archivo JSON.
El código fuente de este inicio rápido está disponible en GitHub.
Prerrequisitos
Cualquier edición de Visual Studio 2017.
-
- Para instalar Newtonsoft.Json como un paquete NuGet en Visual Studio, siga estos pasos:
- Haga clic con el botón derecho en el Administrador de soluciones.
- Haga clic en Administrar paquetes de NuGet...
- Busque
Newtonsoft.Json
e instale el paquete.
- Para instalar Newtonsoft.Json como un paquete NuGet en Visual Studio, siga estos pasos:
Si usa Linux o MacOS, esta aplicación puede ejecutarse con Mono.
Los datos de trazo de entrada de lápiz para este inicio rápido se pueden encontrar en GitHub.
Creación de un recurso de Ink Recognizer
Nota
Los puntos de conexión de los recursos creados después del 1 de julio de 2019 usan el formato de subdominio personalizado que se muestra a continuación. Para más información y para obtener una lista completa de los puntos de conexión regionales, consulte Nombres de subdominios personalizados para Cognitive Services.
Los servicios de Azure Cognitive Services se representan por medio de recursos de Azure a los que se suscribe. Cree un recurso para Ink Recognizer mediante Azure Portal.
Después de crear un recurso, obtenga el punto de conexión y la clave; para ello, abra el recurso en Azure Portal y haga clic en Inicio rápido.
Cree dos variables de entorno:
INK_RECOGNITION_SUBSCRIPTION_KEY
: la clave de suscripción para autenticar las solicitudes.INK_RECOGNITION_ENDPOINT
: el punto de conexión del recurso. Tendrá el siguiente aspecto:
https://<your-custom-subdomain>.api.cognitive.microsoft.com
Creación de una aplicación
En Visual Studio, cree una solución de consola y agregue los siguientes paquetes.
using System; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq;
Cree variables para la clave de suscripción y el punto de conexión, y el archivo JSON de ejemplo. El punto de conexión se combinará más adelante con
inkRecognitionUrl
para acceder a la API.// Add your Ink Recognizer subscription key to your environment variables. static readonly string subscriptionKey = Environment.GetEnvironmentVariable("INK_RECOGNIZER_SUBSCRIPTION_KEY"); // Add your Ink Recognizer endpoint to your environment variables. // For example: <your-custom-subdomain>.cognitiveservices.azure.com static readonly string endpoint = Environment.GetEnvironmentVariable("INK_RECOGNIZER_ENDPOINT"); static readonly string inkRecognitionUrl = "/inkrecognizer/v1.0-preview/recognize"; // Replace the dataPath string with a path to the JSON formatted ink stroke data. // Optionally, use the example-ink-strokes.json file of this sample. Add to your bin\Debug\netcoreapp3.0 project folder. static readonly string dataPath = @"PATH_TO_INK_STROKE_DATA";
Creación de una función para enviar solicitudes
Cree una función asincrónica llamada
Request
que adopte las variables creadas anteriormente.Establezca el protocolo de seguridad del cliente y la información de encabezado con un objeto
HttpClient
. No olvide agregar la clave de suscripción al encabezadoOcp-Apim-Subscription-Key
. A continuación, cree un objetoStringContent
para la solicitud.Envíe la solicitud con
PutAsync()
. Si la solicitud es correcta, devuelva la respuesta.static async Task<string> Request(string apiAddress, string endpoint, string subscriptionKey, string requestData) { using (HttpClient client = new HttpClient { BaseAddress = new Uri(apiAddress) }) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey); var content = new StringContent(requestData, Encoding.UTF8, "application/json"); var res = await client.PutAsync(endpoint, content); if (res.IsSuccessStatusCode) { return await res.Content.ReadAsStringAsync(); } else { return $"ErrorCode: {res.StatusCode}"; } } }
Envío de una solicitud de reconocimiento de entada de lápiz
Cree una nueva función llamada
recognizeInk()
. Construya la solicitud y envíela mediante una llamada a la funciónRequest()
con el punto de conexión, la clave de suscripción, la dirección URL de la API y los datos de trazo de entrada de lápiz digital.Deserialice el objeto JSON y escríbalo en la consola.
static void recognizeInk(string requestData) { //construct the request var result = Request( endpoint, inkRecognitionUrl, subscriptionKey, requestData).Result; dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result); System.Console.WriteLine(jsonObj); }
Carga de los datos de entrada de lápiz digital
Cree una función llamada LoadJson()
para cargar el archivo JSON de datos de entrada de lápiz. Use StreamReader
y JsonTextReader
para crear un objeto JObject
y devolverlo.
public static JObject LoadJson(string fileLocation)
{
var jsonObj = new JObject();
using (StreamReader file = File.OpenText(fileLocation))
using (JsonTextReader reader = new JsonTextReader(file))
{
jsonObj = (JObject)JToken.ReadFrom(reader);
}
return jsonObj;
}
Envío de la solicitud de API
En el método main de la aplicación, cargue los datos JSON con la función creada anteriormente.
Llame a la función
recognizeInk()
creada anteriormente. UseSystem.Console.ReadKey()
para mantener abierta la ventana de consola después de ejecutar la aplicación.static void Main(string[] args) { var requestData = LoadJson(dataPath); string requestString = requestData.ToString(Newtonsoft.Json.Formatting.None); recognizeInk(requestString); System.Console.WriteLine("\nPress any key to exit "); System.Console.ReadKey(); }
Ejecución de la aplicación y visualización de la respuesta
Ejecute la aplicación. Se devuelve una respuesta correcta en formato JSON. También puede encontrar la respuesta JSON en GitHub.
Pasos siguientes
Para ver el funcionamiento de la API Ink Recognition en una aplicación de entrada de lápiz digital, eche un vistazo a las siguientes aplicaciones de ejemplo en GitHub: