Snabbstart: Identifiera digitala pennanteckningar med REST API för handskriftsigenkänning och C #

Anteckning

API:et för handskriftsigenkänning har avslutat förhandsversionen den 26 augusti 2020. Om du har befintliga resurser för handskriftsigenkänning kan du fortsätta att använda dem tills tjänsten har dragits tillbaka helt den 31 januari 2021.

Använd den här snabbstarten för att börja skicka digitala pennstreck till API:et för handskriftsigenkänning. Det här C#-programmet skickar en API-begäran som innehåller JSON-formaterade pennstrecksdata och hämtar svaret.

Även om det här programmet är skrivet i C#, är API:et en RESTful-webbtjänst som är kompatibel med de flesta programmeringsspråk.

Vanligtvis anropar du API:et från en digital pennanteckningsapp. Den här snabbstarten skickar pennstrecksdata för följande handskrivna exempel från en JSON-fil.

en bild av handskriven text

Källkoden för den här snabbstarten finns på GitHub.

Förutsättningar

  • Valfri version av Visual Studio 2017.

  • Newtonsoft.Json

    • Så här installerar du Newtonsoft.Json som ett NuGet-paket i Visual Studio:
      1. Högerklicka på Solution Manager
      2. Klicka på Hantera NuGet-paket...
      3. Sök Newtonsoft.Json efter och installera paketet
  • Om du använder Linux/MacOS kan det här programmet köras med Mono.

  • Exempeldata för pennstreck för den här snabbstarten finns på GitHub.

Skapa en resurs för handskriftsigenkänning

Anteckning

Slutpunkter för resurser som skapats efter den 1 juli 2019 använder det anpassade underdomänformatet som visas nedan. Mer information och en fullständig lista över regionala slutpunkter finns i Anpassade underdomännamn för Cognitive Services.

Azure Cognitive Services representeras av Azure-resurser som du prenumererar på. Skapa en resurs för handskriftsigenkänning med hjälp av Azure Portal.

När du har skapat en resurs hämtar du slutpunkten och nyckeln genom att öppna resursen på Azure Portal och klicka på Snabbstart.

Skapa två miljövariabler:

  • INK_RECOGNITION_SUBSCRIPTION_KEY – Prenumerationsnyckeln för att autentisera dina begäranden.

  • INK_RECOGNITION_ENDPOINT – Slutpunkten för resursen. Resultatet ser ut så här:
    https://<your-custom-subdomain>.api.cognitive.microsoft.com

Skapa ett nytt program

  1. Skapa en ny konsollösning i Visual Studio och lägg till följande paket.

    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. Skapa variabler för din prenumerationsnyckel och slutpunkt och JSON-exempelfilen. Slutpunkten kombineras senare med inkRecognitionUrl för att få åtkomst till API:et.

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

Skapa en funktion för att skicka begäranden

  1. Skapa en ny asynkron funktion med namnet Request som tar variablerna som skapades ovan.

  2. Ange klientens säkerhetsprotokoll och rubrikinformation med hjälp av ett HttpClient -objekt. Se till att lägga till din prenumerationsnyckel i Ocp-Apim-Subscription-Key rubriken. Skapa sedan ett StringContent -objekt för begäran.

  3. Skicka begäran med PutAsync(). Om begäran lyckas returnerar du svaret.

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

Skicka en begäran om pennanteckningsigenkänning

  1. Skapa en ny funktion med namnet recognizeInk(). Skapa begäran och skicka den Request() genom att anropa funktionen med din slutpunkt, prenumerationsnyckel, URL:en för API:et och data för digitala pennstreck.

  2. Deserialisera JSON-objektet och skriv det till konsolen.

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

Läs in dina digitala pennanteckningar

Skapa en funktion med namnet LoadJson() för att läsa in ink-data-JSON-filen. Använd och StreamReaderJsonTextReader för att skapa en JObject och returnera den.

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

Skicka API-begäran

  1. I huvudmetoden för ditt program läser du in dina JSON-data med funktionen som skapades ovan.

  2. Anropa funktionen som recognizeInk() skapades ovan. Använd System.Console.ReadKey() för att hålla konsolfönstret öppet när du har kört programmet.

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

Kör programmet och visa svaret

Kör appen. Ett lyckat svar returneras i JSON-format. Du kan också hitta JSON-svaret på GitHub.

Nästa steg

Om du vill se hur API:et för pennanteckning fungerar i en digital pennanteckningsapp kan du ta en titt på följande exempelprogram på GitHub: