Avvio rapido: Riconoscere l'input penna con l'API REST Riconoscimento input penna e C#

Nota

L'anteprima dell'API riconoscimento input penna è terminata il 26 agosto 2020. Se esistono risorse di riconoscimento input penna, è possibile continuare a usarle fino a quando il servizio non verrà ritirato completamente il 31 gennaio 2021.

Usare questo avvio rapido per iniziare a inviare tratti input penna all'API Riconoscimento input penna. Questa applicazione C# invia una richiesta API contenenti i dati del tratto input penna in formato JSON e riceve la risposta.

L'applicazione è scritta in C#, ma l'API è un servizio Web RESTful compatibile con la maggior parte dei linguaggi di programmazione.

In genere è necessario chiamare l'API da un'app di input penna. Questa guida di avvio rapido invia i dati del tratto input penna per l'esempio scritto a mano seguente da un file JSON.

immagine di testo scritto a mano

Il codice sorgente per questo avvio rapido è disponibile su GitHub.

Prerequisiti

  • Qualsiasi edizione di Visual Studio 2017.

  • Newtonsoft.Json

    • Per installare Newtonsoft.Json come pacchetto NuGet in Visual Studio:
      1. Fare clic con il pulsante destro del mouse su Solution Manager
      2. Scegliere Gestisci pacchetti NuGet...
      3. Cercare Newtonsoft.Json e installare il pacchetto
  • Se si usa Linux/MacOS, questa applicazione può essere eseguita tramite Mono.

  • I dati di esempio del tratto input penna per questo avvio rapido sono disponibili in GitHub.

Creare una risorsa di riconoscimento input penna

Nota

Gli endpoint per le risorse create dopo il 1° luglio 2019 usano il formato di sottodominio personalizzato riportato di seguito. Per altre informazioni e per un elenco completo degli endpoint a livello di area, vedere Nomi di sottodomini personalizzati per Servizi cognitivi.

I Servizi cognitivi di Azure sono rappresentati dalle risorse di Azure a cui si effettua la sottoscrizione. Creare una risorsa per il riconoscimento input penna usando il portale Azure.

Dopo aver creato una risorsa, ottenere l'endpoint e il codice aprendo la risorsa nel portale di Azure e facendo clic su Avvio rapido.

Creare due variabili di ambiente:

  • INK_RECOGNITION_SUBSCRIPTION_KEY: la chiave di sottoscrizione per l'autenticazione delle richieste.

  • INK_RECOGNITION_ENDPOINT: l'endpoint per la risorsa. L'aspetto sarà simile al seguente:
    https://<your-custom-subdomain>.api.cognitive.microsoft.com

Creare una nuova applicazione

  1. In Visual Studio creare una nuova soluzione console e aggiungere i pacchetti seguenti.

    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;
    
  2. Creare le variabili per l'endpoint e la chiave di sottoscrizione e il file JSON di esempio. L'endpoint verrà poi combinato con inkRecognitionUrl per accedere all'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";
    

Creare una funzione per inviare richieste

  1. Creare una nuova funzione asincrona denominata Request che accetta le variabili create in precedenza.

  2. Impostare il protocollo di sicurezza del client e le informazioni di intestazione con l'oggetto HttpClient. Assicurarsi di aggiungere la chiave di sottoscrizione all'intestazione Ocp-Apim-Subscription-Key. Creare quindi un oggetto StringContent per la richiesta.

  3. Inviare la richiesta con PutAsync(). Se la richiesta ha esito positivo, viene restituita la risposta.

    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}";
            }
        }
    }
    

Inviare una richiesta di riconoscimento input penna

  1. Creare una nuova funzione denominata recognizeInk(). Creare la richiesta e inviarla chiamando la funzione Request() con l'endpoint, la chiave di sottoscrizione, l'URL per l'API e i dati del tratto input penna.

  2. Deserializzare l'oggetto JSON e visualizzarlo nella console.

    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);
    }
    

Caricare i dati dell'input penna

Creare una funzione denominata LoadJson() per caricare il file JSON con i dati dell'input penna. Usare StreamReader e JsonTextReader per creare JObject e restituirlo.

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;
}

Inviare la richiesta API

  1. Nel metodo main dell'applicazione caricare i dati JSON con la funzione creata in precedenza.

  2. Chiamare la funzione recognizeInk() creata in precedenza. Usare System.Console.ReadKey() per mantenere aperta la finestra della console dopo l'esecuzione dell'applicazione.

    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();
    }
    

Eseguire l'applicazione e visualizzare la risposta

Eseguire l'applicazione. Viene restituita una risposta con esito positivo in formato JSON. È anche possibile trovare la risposta JSON in GitHub.

Passaggi successivi

Per vedere come funziona l'API Riconoscimento input penna in un'app di input penna, esaminare le applicazioni di esempio seguenti in GitHub: