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


Пример расширенного распознавания

В примере расширенного распознавания показаны расширенные возможности интерфейса программирования приложений службы автоматизации ПК Microsoft Tablet (API), используемого для распознавания рукописного ввода.

Он включает следующие функции:

  • Перечисление установленного распознавателя
  • Создание контекста распознавателя с определенным языком
  • Использование объекта распознавателя
  • Настройка фактоидов распознавания и списков слов
  • Использование руководств для улучшения качества распознавания
  • Динамическое распознавание фона
  • Распознавание жестов

Используемые интерфейсы: IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokesи IInkStroke.

Чернила и заголовки проекта

Во-первых, включите заголовки для интерфейсов автоматизации планшетного ПК. Они установлены с пакетом SDK для платформы планшетного пк. Файл TpcError.h содержит определения кода ошибки API планшетного ПК.

#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>

Файл EventSinks.h определяет интерфейсы IInkEventsImpl и IInkRecognitionEventsImpl, а также настраивает события RecognitionWithAlternates, Strokeи Gesture.

#include "EventSinks.h"

Файл ChildWnds.h содержит определения классов CInkInputWnd и CRecoOutputWnd, производных от CWindowImpl ATL и используемых для создания дочерних окон примера.

#include "ChildWnds.h"

Файл AdvReco.h объявляет класс CAdvRecoApp, который является классом окна приложения для этого примера.

#include "AdvReco.h"

Инициализация окна приложения

Метод Run окна настраивает объект CAdvRecoApp, загружает меню и значок окна, создает объект InkRecognizerContext для распознавателя по умолчанию и запускает цикл сообщений окна.

Метод OnCreate окна обрабатывает событие WM_CREATE и создает дочерние окна. Объект InkCollector подключается к источнику событий сборщика рукописного ввода и включает рукописный ввод в окне ввода. Затем он создает объект InkRecognizerGuide и использует свойство отрисовщика рукописного ввода для преобразования прямоугольников направляющего распознавания в рукописное пространство. Наконец, метод OnCreate создает объект InkWordList.

Обработка событий сборщика рукописного ввода

Метод окна OnStroke обрабатывает событие штриха , связанное со сборщиком чернил (инк-коллектором). Новый объект IInkStrokeDisp добавляется в InkStrokes свойства коллекции чернил Ink.

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

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

Метод OnRecognitionWithAlternates окна обрабатывает событие RecognitionWithAlternates контекста распознавателя. Метод OnRecognitionWithAlternates отображает результаты распознавания в окне результатов.

Обработка команд меню

Метод OnRecognizer окна обрабатывает команды в меню Распознавателя. Если выбрана команда по умолчанию по умолчанию, метод GetDefaultRecognizer inkRecognizers используется для получения распознавателя по умолчанию; в противном случае извлекается выбранный распознаватель. Затем создается и используется контекст распознавателя, а меню и строка состояния обновляются.

Метод OnFactoidWordlist окна обрабатывает команду использовать список слов в меню Factoid. Значение свойства Strokes в контексте распознавателя установлено на NULL , чтобы сбросить контекст распознавателя. Если параметр Use Wordlist отключен, для свойства WordList контекст распознавателя задано значение NULL; в противном случае свойство контекста распознавателя WordList имеет значение InkWordList, созданной в методе OnCreate. Наконец, InkStrokes сборщика рукописного ввода повторно подключены к контексту распознавателя, вызывается метод BackgroundRecognizeWithAlternates контекста распознавателя, а меню обновляется.

Метод OnFactoid окна обрабатывает команды factoid в меню Factoid. Сначала он задает свойству контекста распознавателя росчерки значение NULL, задает свойству контекста распознавателя Factoid выбранному фактоиду и переназначает InkStrokes сборщика рукописного ввода контексту распознавателя. Если объект Factoid поддерживается контекстом распознавателя, метод BackgroundRecognizeWithAlternates этого контекста вызывается; в противном случае отображается сообщение об ошибке. Наконец, обновляется меню и строка состояния.

Метод OnGuide окна обрабатывает команды в меню Guide. Если контекст распознавателя поддерживает параметры руководства, метод OnGuide задает свойству контекста распознавателя Росчерки значение NULL, задает свойство контекста распознавателя Guide для выбранного параметра руководства. переназначает InkStrokes сборщика рукописного ввода контексту распознавателя и вызывает метод BackgroundRecognizeWithAlternates. В противном случае отображается сообщение об ошибке. Наконец, обновляется окно ввода, меню и строка состояния.

Метод OnMode окна обрабатывает команды в меню режима. Он отключает сборщик чернил, обновляет свойство CollectionMode сборщика чернил, обновляет меню и отображает или скрывает списки жестов. Наконец, сборщик чернил включен.

Метод OnRecognize окна обрабатывает команду Распознать в меню Ink. Он вызывает метод контекста распознавателя EndInkInput, чтобы предотвратить добавление рукописного ввода в контекст распознавателя. Иногда это необходимо, так как не все распознаватели поддерживают частичное распознавание. Затем он вызывает метод контекста распознавателя Распознает и передает результаты в метод OnRecognitionWithAlternates. Наконец, InkStrokes коллектора чернил переназначены в контекст распознавателя.

Метод OnClear окна обрабатывает команду Clear в меню Ink. Он удаляет штрихи из свойства коллектора чернил, освобождает старую коллекцию штрихов, создаёт новую коллекцию для свойства Ink и присоединяет её к контексту распознавания.

Метод OnExit окна обрабатывает команду Exit в меню Ink и вызывает событие WM_CLOSE.

Вспомогательные методы

Метод LoadMenu окна вызывается из метода Run окна и добавляет список поддерживаемых распознавателей и список поддерживаемых фактоидов в меню окна. Сначала извлекает InkRecognizers. Затем он выполняет итерацию по доступным распознавателям и выбирает только те, которые имеют список языков в свойстве "Языки", которое добавляется в меню Распознавателя. Наконец, он заполняет меню Factoid списком фактоидов, определенных как глобальная константа.

Метод окна UseRecognizer вызывается из метода окна OnRecognizer, когда пользователь выбирает новый распознаватель. Он создает контекст распознавателя, отсоединяет старый контекст от приемника событий распознавателя, очищает и освобождает старый контекст и присоединяет новый контекст к приемнику событий распознавателя.

Затем метод UseRecognizer проверяет свойство Capabilities распознавателя, которое возвращает значение InkRecognizerCapabilities. Если распознаватель поддерживает строкированный ввод, в меню Руководство доступна команда Строки. Если распознаватель поддерживает прямоугольные входные данные, команда Boxes включена. Если распознаватель не поддерживает бесплатные входные данные, команда None отключена. Если текущий выбор руководства не поддерживается, обновляются как свойство Guide контекста распознавателя, так и меню.

Затем метод UseRecognizer пытается задать свойства WordList и Factoid контекста распознавателя. Если любой параметр не поддерживается распознавательом, используется значение по умолчанию, а меню обновляется.

Наконец, метод UseRecognizer присоединяет свойство Strokes объекта InkDisp к контексту распознавателя, изменяет шрифт на один из поддерживаемых языком распознавателя, сбрасывает окно вывода и обновляет результаты распознавания, вызывая метод BackgroundRecognizeWithAlternates.

Метод GetGestureName окна вызывается из метода OnGesture этого же окна. Он выполняет поиск жеста и возвращает индекс имени жеста, который хранится в строковой таблице в файле AdvReco.rc.