Как работает распознавание рукописного текста

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

В закладки

Введение

В качестве результата распознавания мы должны получить текст в цифровом формате. Существует два вида распознавания: — онлайновый и оффлайновый. Онлайновый — распознавание текста при написании стилусом или пальцем на экране или планшете. Сразу понятно, где написано слово, а где полотно. Первым КПК, который мог распознавать рукописный текст — Apple Newton (1993 год).

​Занятная заметка тех времён.

Оффлайновый — распознавание уже написанного текста на бумаге. Текст предоставляется в виде скана или фотографии документа, страницы книги и т.п. Является более сложным способом, т.к. в случае онлайн-метода можно проследить процесс написания текста и на этом факте построить алгоритм распознавания. Сложность задачи распознавания рукописного текста — это большое разнообразие почерков, форм, размеров букв и многообразие языков. Так же бумага с текстом может содержать “шумы” — дефекты бумаги, посторонние пятна, что так же усложняет весь процесс.

Подходы распознавания

Существует по крайней мере два подхода, которые дают приемлемый результат: с использованием скрытой марковской модели и искусственной нейронной сети (ИНС). На практике так же применяется гибридный подход с использованием одновременно двух подходов.

Процесс

Подготовка

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

  • Пороговая бинаризация — процесс отделения фона от объекта, в данном случае текст. В результате получаем чёрный текст на белом фоне.
  • Удаление шумов — удаление артефактов с изображения, не затрагивая написанный текст.

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

Сегментация строк, слов и букв

Рассмотрим подробнее несколько из шагов.

Выпрямление

Угол наклона — угол между вертикалью и направлением письма. Шаг выпрямления направление на то, чтобы максимально снизить этот угол.

Слово до выпрямления​
Слово после выпрямления​

Сегментация слов

Не во всех алгоритмах требуется сегментация. Тем не менее, рассмотрим несколько способов разбиения текста на слова.

  • Страница текста разбивается на строки, затем строка разбивается на слова, где пробел является их разделителем. Для этого на текст последовательно накладываются фильтры для удаления шумов и определения границ слов.
  • Текст разбивается на составные части — компоненты и рассчитывается расстояние между их центрами. В качестве параметра алгоритма принимается какое-то пороговое значение расстояния, которое в дальнейшем можно подобрать исходя из успешности результатов.
  • Следующий подход тоже основан на расчете расстояний. С помощью метода опорных векторов находится плоскость, которая разделяет два разных типа данных (символа), а затем с помощью порогового значения текст разбивается на слова.
​Опорные вектора отмечены окружностями
  • Последний подход использует несколько способов расчета расстояния между и их комбинация.
a — исходный кусок текста, b — ​ограничивающий прямоугольник, с — Евклидово расстояние, d — горизонтальное расстояние

Языковая модель

Языковая модель помогает алгоритму распознавания улучшить результат с помощью известных языковых словосочетаний. Языковая модель может предсказывать следующее слово на основании предыдущих и предлагать варианты с различной степенью вероятности. Например, более вероятной считается словосочетание «There are» по сравнению с «Their are». Такую модель можно тренировать на основании большого количества текста с расчетом повторений одного слова за другими. Конечно, нет сильной уверенности, что языковая модель сможет во всех случаях предсказывать следующее слово для любого текста, поэтому модель тренируют на тексте той же тематики, что и распознаваемый. Использование языковой модели также опционально.

Префиксное дерево

Алгоритм поиска слова по префиксу достаточно быстрый и простой для понимания. Как можно догадаться, используется структура дерево, где рёбра — буквы, а вершина содержит признак слова. Таким образом, слово представляется в виде пути от корневого узла (первой буквы слова) через рёбра — составные буквы слова к вершине с признаком слова.

На иллюстрации можно увидеть представление слов to, too, a, this, that.​

Классификация

На вход классификатора может поступать как изображения отдельных слов, так и целых строк. ИНС состоит из слоёв. Именно здесь и происходит вся магия и математека: сначала используются свёрточные нейронные сети (СНС) — операции свёртки и пулинга, и рекуррентные нейронные сети (РНС), а именно один из типов типы LSTM, mdlstm, IDCN. Суть свёртки в том, что каждый фрагмент изображения умножается на матрицу (ядро) свёртки поэлементно, а результат суммируется и записывается в аналогичную позицию выходного изображения (формируется карта признаков — feature map). Операция пулинга позволяет существенно уменьшить объём изображения. Пулинг интерпретируется так: если на предыдущей операции свёртки уже были выявлены некоторые признаки, то для дальнейшей обработки настолько подробное изображение уже не нужно, и оно уплотняется до менее подробного — выполняется уменьшение размерности сформированных карт признаков. Так же конечный результат зависит от датасета — набора изображений для модели для каждой буквы разного почерка.

Пост-обработка

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

Заключение

Максимальная точность распознавания рукописного текста на английском, результаты которого удалось найти в открытых источниках, достигает величины от 55 до 75%. Пост-обработка дает улучшение результатов в среднем на 15% для каких-то алгоритмов, а может и ухудшить результаты (до 3-6%).

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

Если вас заинтересовала тема глубокого обучения, советую для прочтения эту книгу. Пример реализации алгоритма для распознавания рукописного текста можно найти на GitHub, например, у этого автора.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Ivan Vavilov", "author_type": "self", "tags": [], "comments": 6, "likes": -1, "favorites": 9, "is_advertisement": false, "subsite_label": "ml", "id": 96273, "is_wide": true, "is_ugc": true, "date": "Sat, 07 Dec 2019 13:07:59 +0300", "is_special": false }
Создать объявление на vc.ru
Маркетинг
Как бизнесу заработать в соцсетях в 2020 году: полноценное руководство с прогнозами и примерами
Пошаговая рабочая стратегия продвижения бизнеса в соцсетях с медиапланом и примерами внедрения от директора «Студии…
0
{ "id": 96273, "author_id": 140146, "diff_limit": 1000, "urls": {"diff":"\/comments\/96273\/get","add":"\/comments\/96273\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/96273"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 332941, "last_count_and_date": null }
6 комментариев
Популярные
По порядку
Написать комментарий...
0

Вы ощущаете разницу между терминами "онлайновый" и "офлайновый" я не Граммар-наци, но даже мне в этом контексте режет восприятие. Тем более что второй вариант вы написали с ошибкой там должно быть две буквы "ф" английский  "off"
По теме когда AI научится распознавать почерк врачей тогда можно будет говорить о захвате мира, и 3-ем уровне искусственного интеллекта.  

Ответить
0

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

Ответить
0

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

Ответить
0

нет, в том-то и дело что есть и другое значение: https://en.wikipedia.org/wiki/Online_algorithm

Ответить
0

тупой копирайтинг

Ответить
–1

данных про точность … распознавания русского языка я найти не смог. Тем не менее, … задача не выглядит нерешаемой.

I challenge you

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9qZWN0SWQiOiI1ZTRmZjUxODYyOGE2YzcxNDUxNWY0ZGEiLCJpYXQiOjE1ODI1MzY0NDB9.AwBBnUWMy3RR1xtAoaXVr81WvqxdlD4C8CBpwFiONzw", "release": "44bde710" } { "page_type": "default" }