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


Общие сведения об анализе рукописного ввода

API InkAnalysis предоставляют разработчикам планшетных компьютеров мощные средства для программной проверки рукописного ввода. API классифицирует рукописный ввод по значимым категориям, таким как слова, строки, абзацы и рисунки.

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

Основы анализа рукописного ввода

В этом разделе описывается технология анализа рукописного ввода платформы планшетного ПК, а также объясняется, когда и как ее использовать.

API InkAnalysis эффективно сочетают две различные, но бесплатные технологии: распознавание рукописного ввода и классификацию макета. Объединение этих двух технологий дает окончательно больше результатов, чем части, взятые в одиночку.

Распознавание рукописного ввода — это вычислительный анализ рукописного цифрового рукописного ввода для возврата интерпретации на основе символов на данном языке. То есть распознавание рукописного ввода — это то, как компьютер "считывает" почерк человека.

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

Распознавание

Одним из примеров того, как сочетание распознавания с анализом рукописного ввода в API InkAnalysis помогает разработчику, является улучшение результатов распознавания. Подсистемы распознавания рукописного ввода планшетного пк в основном предназначены для распознавания одной горизонтальной линии рукописного ввода. Тем не менее, люди, как правило, пишут несколько строк при создании заметок, и эти строки не гарантированно будут горизонтальными по отношению к странице. С помощью API InkAnalysis рукописный ввод предварительно обрабатывается анализатором рукописного ввода перед отправкой в распознаватель. Перед распознаванием проанализированный рукописный фрагмент преобразуется в горизонтальный, что улучшает результаты распознавания.

Другие преимущества распознавания получаются за счет исправления анализатора рукописного ввода неправильной информации о порядке росчерка перед отправкой рукописного ввода в распознаватель. Кроме того, результаты распознавания теперь доступны выборочно. То есть разработчик может быстро получить результаты распознавания для одного слова, строки или абзаца в одном вызове.

Классификация рукописного ввода

Конечно, существуют различные сценарии, в которых можно сохранить данные рукописного ввода без изменений, а не сразу преобразовать их в текст. Анализ рукописного ввода также предоставляет преимущества. В частности, API InkAnalysis предоставляют возможность разделения росчерков пера в зависимости от того, являются ли они надписями или рисунками. Росчерки пера, которые классифицируются как письменное, — это росчерки, которые составляют слово или символы. Все остальные штрихи являются рисунками. Это обеспечивает новый способ доступа к данным рукописного ввода, позволяя создавать новые пользовательские сценарии. Например, можно реализовать выбор таким образом, чтобы он отличался в зависимости от типа штриха, на который нажимает пользователь; Если пользователь касается росчерка, приложение выбирает весь набор штрихов, составляющих слово. Если пользователь касается жеста рисования, приложение выбирает только этот штрих.

Анализ макета

Полезный анализ макета на самом деле выходит далеко за рамки относительно простого разложения рукописного ввода на компоненты письма и рисования.

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

две простые строки рукописного ввода

После анализа этих штрихов платформа возвращает представление этих штрихов в виде дерева, как показано на следующем рисунке. В этом простом случае дерево содержит только сведения о абзацах, строках и словах, но богатство этого дерева увеличивается по мере увеличения сложности рукописного документа.

представление корня, абзаца, строк и слов в виде дерева

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

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

  • Упорядоченные и неупорядоченные списки
  • Фигуры
  • Заметки, написанные в тексте

Типы функций зависят от приложения к приложению и зависят от требований и доступных модулей анализа рукописного ввода и распознавания.

Функции анализа рукописного ввода ключей

Основные возможности API InkAnalysis включают следующие функции:

  • Добавочный анализ
  • Сохраняемость
  • Прокси-сервер данных
  • Примирения
  • Расширение среды

Добавочный анализ

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

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

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

Сохраняемость

Добавочный анализ хорошо работает в рамках заданного сеанса или экземпляра объекта InkAnalyzer . Однако API платформы планшетов первого поколения не могут выполнять добавочный анализ после сохранения рукописного ввода на диске. API InkAnalysis позволяет сохранять рукописный ввод на диск вместе с сохраняемой формой результатов анализа. Результаты анализа могут быть загружены при загрузке рукописного ввода и могут быть внедрены в новый экземпляр InkAnalyzer. Затем новый экземпляр объекта InkAnalyzer имеет то же состояние результатов, что и ранее, и теперь может принимать любые изменения как добавочные изменения существующего состояния, а не анализировать все снова.

Прокси-сервер данных

Многие приложения уже имеют определенную структуру документов в своих приложениях; например, граф или база данных. InkAnalyzer также представляет результаты в структурированной форме в дереве объектов ContextNode. Структура InkAnalyzer и существующая структура приложения должны взаимодействовать в двух направлениях: результаты извлекаются из InkAnalyzer в приложение, а состояние передается из приложения в InkAnalyzer.

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

Чтобы выполнить это требование, InkAnalyzer содержит ряд событий, которые он вызывает в соответствующее время во время операции анализа, чтобы приложения могли прокси-сервер запроса данных обратно в свои существующие структуры. Эти события вызываются только для объектов ContextNode , необходимых для добавочной операции.

Примирения

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

Чтобы помочь приложениям, InkAnalyzer согласовывает различия в состоянии документа между началом и окончанием операции анализа. Изменения, внесенные пользователем или приложением во время анализа в фоновом режиме, всегда переопределяют результаты, вычисленные в фоновом режиме. После выверки отображаются только те части структуры результатов, которые не конфликтуют с изменениями документа, а конфликтующие штрихи помечаются для дальнейшего анализа. При следующем выполнении фоновой операции анализа результаты пересчитываются на основе нового состояния.

Этот процесс показан на схеме ниже. Время выражается линейно сверху вниз на схеме.

процесс выверки изменений состояния документа во время операции анализа

  1. Во время 1 (t1) приложение собирает рукописные фрагменты от конечного пользователя, включая любые изменения рукописного ввода, такие как добавление, удаление или изменение.
  2. В t2 приложение вызывает операцию фонового анализа. InkAnalyzer определяет, какие рукописные фрагменты не имеют результатов и какие рукописные фрагменты необходимо перепроверить. Он копирует необходимые данные рукописного ввода, чтобы обеспечить независимое выполнение фонового потока.
  3. В t3 InkAnalyzer возвращает приложению выполнение потока пользовательского интерфейса. InkAnalyzer создает второй поток, поток фонового анализа, а механизмы анализа и распознавания рукописного ввода анализируют скопированные данные рукописного ввода.
  4. Пока операция анализа выполняется во втором фоновом потоке, конечный пользователь продолжает редактировать документ, добавляя и удаляя данные росчерка в t4 и t5. Эти изменения могут конфликтовать с работой, которая обрабатывается в фоновом режиме.
  5. В t6 фоновый поток завершил операцию анализа, и результаты готовы. Перед тем как InkAnalyzer сообщит результаты приложению, он запускает алгоритм выверки, чтобы определить, конфликтуют ли изменения, внесенные пользователем во время вычисления операции анализа (t4 и t5). При обнаружении конфликтов конфликтующие штрихи помечаются для повторного анализа, который происходит при следующем вызове приложением фоновой операции анализа.
  6. Наконец, в t7 при обнаружении всех конфликтов InkAnalyzer представляет результаты приложению.

Расширение среды

API-интерфейсы InkAnalysis позволяют приложениям использовать новые типы подсистем анализа таким образом, чтобы приложение не перезаписывало все преимущества API InkAnalysis, включая выверку, прокси-сервер данных, сохраняемость и добавочный анализ.

Microsoft.Ink

Справочник по анализу рукописного ввода