Поделиться через


Распознавание рукописного ввода

Не все приложения требуют использования распознавания, но поскольку большинство приложений были разработаны с текстом в качестве основного типа данных, возможность преобразования рукописного ввода в текст очень важна. Функции распознавания API платформы планшетных компьютеров можно использовать для запроса сведений о доступных механизмах распознавания, например о языках, которые они распознают. Затем можно отправить коллекцию Strokes из объекта Ink в подсистему распознавания и вернуть объект RecognitionResult .

Объект RecognizerContext

Объект RecognizerContext — это создание экземпляра данного распознавателя. Объект RecognizerContext позволяет распознавать определенную коллекцию штрихов синхронно или асинхронно. При асинхронном распознавании объект RecognizerContext возвращает объект RecognitionResult в обратном вызове события в приложение.

Распознаватели и объекты распознавателя

На одном планшетном компьютере может быть доступен один или несколько распознавителей. Вы можете запросить коллекцию распознавателя, чтобы определить, какой распознаватель следует использовать. Распознаватель предоставляет конкретные сведения о своих возможностях, такие как язык, который он может распознать, и изготовитель.

Чтобы определить, установлен ли хотя бы один распознаватель, создайте экземпляр объекта InkRecognizerContext , как показано в следующих примерах кода C++ и C#. Если распознаватель отсутствует, вызов CoCreateInstance завершается ошибкой .

CComPtr<IInkRecognizerContext> g_pIInkRecoContext;
hr = CoCreateInstance(CLSID_InkRecognizerContext, 
      NULL, CLSCTX_INPROC_SERVER,
      IID_IInkRecognizerContext, 
(void **) &g_pIInkRecoContext);
if (FAILED(hr)) 
{
      ::MessageBox(NULL, TEXT("No recognizers installed.\nExiting."), 
      gc_szAppName, MB_ICONERROR);
      return -1;
}
try
{
  Recognizers recos = new Recognizers();//Check for recognizer.
  Recognizer defReco = recos.GetDefaultRecognizer();
  recoContext = defReco.CreateRecognizerContext();
}
catch
{
  MessageBox.Show("No recognizers installed.");
}

Объекты RecognitionResult и RecognitionAlternate

Результаты распознавания возвращаются в объекте RecognitionResult . Результаты содержат строку наилучшего результата в свойстве TopString , а также коллекцию альтернативных результатов в коллекции RecognitionAlternates . Объект RecognitionResult можно сохранить с помощью исходной коллекции Strokes , из которой он был создан.

Структура RecognizerGuide

Направляющая распознавателя может состоять из строк и столбцов и предоставляет распознаватель лучший контекст для выполнения распознавания. Например, на экране пользователя можно рисовать горизонтальные линии, почти как на листе бумаги, которые показывают, где должен происходить рукописный ввод (этот тип направляющей будет состоять только из строк и без столбцов). Если пользователь записывает строки вместо произвольного пространства, точность распознавания повышается.

На следующем рисунке показана структура RecognizerGuide с двумя строками для входных данных.

Иллюстрация, показывающая двухстрочный справочник по распознавателям

На следующем рисунке показана структура RecognizerGuide с четырьмя столбцами и тремя строками.

Иллюстрация, показывающая руководство по распознавателям с тремя на четыре

Дополнительные сведения об использовании структуры RecognizerGuide см. в справочном разделе RecognizerGuide .