Szybki start: rozpoznawanie cyfrowego pisma odręcznego przy użyciu interfejsu API REST rozpoznawania pisma odręcznego i języka C #

Uwaga

Interfejs API rozpoznawania pisma odręcznego zakończył swoją wersję zapoznawcza 26 sierpnia 2020 r. Jeśli masz istniejące zasoby rozpoznawania pisma odręcznego, możesz nadal z nich korzystać, dopóki usługa nie zostanie w pełni wycofana 31 stycznia 2021 r.

Skorzystaj z tego przewodnika Szybki start, aby rozpocząć wysyłanie cyfrowych pociągnięć pisma odręcznego do interfejsu API rozpoznawania pisma odręcznego. Ta aplikacja w języku C# wysyła żądanie interfejsu API zawierające dane pociągnięcia pisma odkowego w formacie JSON i pobiera odpowiedź.

Chociaż ta aplikacja jest napisana w języku C#, interfejs API jest usługą internetową zgodną z wzorcem REST i większością języków programowania.

Zazwyczaj interfejs API jest wywoływany z cyfrowej aplikacji pisma odręcznego. Ten przewodnik Szybki start wysyła dane pociągnięcia pisma odręcznego dla następującego przykładu odręcznego z pliku JSON.

obraz tekstu odręcznego

Kod źródłowy tego przewodnika Szybki start można znaleźć w witrynie GitHub.

Wymagania wstępne

  • Dowolna wersja programu Visual Studio 2017.

  • Newtonsoft.Json

    • Aby zainstalować pakiet Newtonsoft.Json jako pakiet NuGet w programie Visual Studio:
      1. Kliknij prawym przyciskiem myszy Menedżera rozwiązań
      2. Kliknij pozycję Zarządzaj pakietami NuGet...
      3. Newtonsoft.Json Wyszukiwanie i instalowanie pakietu
  • Jeśli używasz systemu Linux/MacOS, tę aplikację można użyć platformy Mono.

  • Przykładowe dane pociągnięcia pisma oddyskowego dla tego przewodnika Szybki start można znaleźć w witrynie GitHub.

Tworzenie zasobu rozpoznawania pisma odręcznego

Uwaga

Punkty końcowe dla zasobów utworzonych po 1 lipca 2019 r. używają niestandardowego formatu poddomeny pokazanego poniżej. Aby uzyskać więcej informacji i pełną listę regionalnych punktów końcowych, zobacz Niestandardowe nazwy poddomeny dla usług Cognitive Services.

Usługi Azure Cognitive Services są reprezentowane przez subskrybowane zasoby platformy Azure. Utwórz zasób rozpoznawania pisma odręcznego przy użyciu Azure Portal.

Po utworzeniu zasobu pobierz punkt końcowy i klucz, otwierając zasób na Azure Portal i klikając pozycję Szybki start.

Utwórz dwie zmienne środowiskowe:

  • INK_RECOGNITION_SUBSCRIPTION_KEY — Klucz subskrypcji do uwierzytelniania żądań.

  • INK_RECOGNITION_ENDPOINT — Punkt końcowy zasobu. Będzie to wyglądać następująco:
    https://<your-custom-subdomain>.api.cognitive.microsoft.com

Tworzenie nowej aplikacji

  1. W programie Visual Studio utwórz nowe rozwiązanie konsoli i dodaj następujące pakiety.

    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. Utwórz zmienne dla klucza subskrypcji i punktu końcowego oraz przykładowy plik JSON. Punkt końcowy zostanie później połączony z elementem w inkRecognitionUrl celu uzyskania dostępu do interfejsu 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";
    

Tworzenie funkcji do wysyłania żądań

  1. Utwórz nową funkcję asynchroniową o nazwie Request , która przyjmuje utworzone powyżej zmienne.

  2. Ustaw protokół zabezpieczeń klienta i informacje nagłówka HttpClient przy użyciu obiektu. Pamiętaj, aby dodać klucz subskrypcji do nagłówka Ocp-Apim-Subscription-Key . Następnie utwórz StringContent obiekt dla żądania.

  3. Wyślij żądanie za pomocą polecenia PutAsync(). Jeśli żądanie zakończy się pomyślnie, zwróć odpowiedź.

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

Wysyłanie żądania rozpoznawania pisma oddyskowego

  1. Utwórz nową funkcję o nazwie recognizeInk(). Skonstruuj żądanie i wyślij je, wywołując Request() funkcję za pomocą punktu końcowego, klucza subskrypcji, adresu URL interfejsu API i cyfrowych danych pociągnięcia pisma odkowego.

  2. Deserializuj obiekt JSON i zapisz go w konsoli.

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

Ładowanie cyfrowych danych pisma oddyskowego

Utwórz funkcję o nazwie LoadJson() w celu załadowania pliku JSON danych pisma odkowego. Użyj elementu i StreamReaderJsonTextReader , aby utworzyć element JObject i zwrócić go.

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

Wysyłanie żądania interfejsu API

  1. W metodzie głównej aplikacji załaduj dane JSON za pomocą funkcji utworzonej powyżej.

  2. Wywołaj funkcję utworzoną recognizeInk() powyżej. Użyj polecenia System.Console.ReadKey() , aby okno konsoli było otwarte po uruchomieniu aplikacji.

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

Uruchom aplikację i wyświetl odpowiedź

Uruchom aplikację. Pomyślna odpowiedź jest zwracana w formacie JSON. Odpowiedź JSON można również znaleźć w witrynie GitHub.

Następne kroki

Aby zobaczyć, jak działa interfejs API rozpoznawania pisma odręcznego w cyfrowej aplikacji odręcznej, zapoznaj się z następującymi przykładowymi aplikacjami w usłudze GitHub: