Распознавание текста на изображении
Распознавание текста на изображениях (оптическое распознавание символов (англ. optical character recognition, OCR[1])) — одно из направлений распознавания образов, задача которого заключается в переводе изображений рукописного, машинного или печатного текста в текстовые данные, использующиеся для представления символов в компьютере (например, в текстовом редакторе).
Содержание
Общая информация[править]
Распознавание текста на изображениях является важной задачей машинного обучения, так как это позволяет организовать удобное взаимодействие с данными: редактирование, анализ, поиск слов или фраз и т.д.
В последние десятилетия, благодаря использованию современных достижений компьютерных технологий, были развиты новые методы обработки изображений и распознавания образов, благодаря чему стало возможным создание таких промышленных систем распознавания печатного текста, как, например, FineReader[2], которые удовлетворяют основным требованиям систем автоматизации документооборота.
Тем не менее, создание приложения в данной области по-прежнему остается творческой задачей и требует дополнительных исследований в связи со специфическими требованиями по разрешению, быстродействию, надежности распознавания и объему памяти, которыми характеризуется каждая конкретная задача.
История[править]
Разработка OCR-систем основана на технологиях, связанных с телеграфией и созданием считывающих устройств для слепых. В 1914 году Эммануэль Гольдберг разработал устройство, считывающее символы и преобразовывающее их в стандартный телеграфный код. Одновременно Эдмунд Фурнье д'Альбе разработал «Оптофон», ручной сканер, который, при перемещении по напечатанной странице, вырабатывал тональные сигналы, соответствующие определенным буквам или символам.
В 1974 году Рэй Курцвейл создал компанию «Kurzweil Computer Products, Inc» и начал работать над развитием первой системы оптического распознавания символов, способной распознавать текст, напечатанный любым шрифтом. Курцвейл считал, что лучшее применение этой технологии — создание машины чтения для слепых, которая позволила бы слепым людям иметь компьютер, умеющий читать текст вслух. Данное устройство требовало изобретения сразу двух технологий — ПЗС (прибор с зарядовой связью[3]) планшетного сканера и синтезатора, преобразующего текст в речь.
Первой коммерчески успешной программой, распознающей кириллицу, стала программа «AutoR» российской компании «ОКРУС». Алгоритм «AutoR» был компактный, быстрый и шрифтонезависимый. Этот алгоритм разработали и испытали ещё в конце 60-х два молодых биофизика, выпускники МФТИ — Г. М. Зенкин и А. П. Петров. В настоящее время алгоритм Зенкина-Петрова применяется в нескольких прикладных системах, решающих задачу распознавания графических символов.
В 1993 году вышла технология распознавания текстов российской компании ABBYY. На её основе создан ряд корпоративных решений и программ для массовых пользователей. Технологии распознавания текстов ABBYY OCR лицензируют международные ИТ-компании, такие как Fujitsu, Panasonic, Xerox, Samsung, EMC и другие.
В 2000-х годах производительность и компактность OCR-системы позволила представить на рынок онлайн-сервисы по переводу текста с одного языка на другой. Со временем такие программы получили возможность обрабатывать изображения как печатного, так и рукописного текста.
С развитием технологий производства мобильных устройств и упрощения процесса разработки мобильных приложений, OCR-системы стали неотъемлемой частью разнообразных программ: от развлекательных до обучающих, от мобильных помощников до систем управления.
Применение систем распознавания текстов[править]
Системы OCR применяются во многих областях. Вот некоторые из задач, которые решают системы распознавания текстов:
- Считывание данных с бланков и анкет.
- Автоматическое распознавание номерного знака.
- Распознавание паспортных данных.
- Извлечение информации из визитных карточек в список контактов.
- Создание цифровых версий печатных и рукописных документов, например, сканирование книг для проекта "Гутенберг"[4].
- Технология для помощи слепым и слабовидящим.
Наиболее распространенные задачи OCR[править]
С задачей распознавания символов связаны следующие проблемы:
- Разнообразие форм начертания символов: документ может содержать несколько шрифтов сразу, а символы могут быть схожи по начертанию.
- Искажение изображения, содержащего текст:
- Шумы при печати.
- Плохое качество изображения (засвеченность, размытость).
- Вариации размеров, масштаба и положения символов на странице.
- Влияние исходного масштаба печати: система оптического распознавания текста должна быть нечувствительной по отношению к способу верстки, расстоянию между строками и другим параметрам печати.
Процесс распознавания текста[править]
Система распознавания текста предполагает наличие на входе изображения с текстом (в формате данных графического файла). На выходе система должна выдать текст, выделенный из входных данных. Весь процесс распознавания текста состоит из нескольких задач.
Обработка изображения[править]
Перед началом распознавания текста изображение должно быть очищено от шума и приведено к виду, позволяющему эффективно выделять символы и распознавать их. Обычно у изображения повышают резкость, контрастность, выравнивают его и преобразовывают в используемый системой формат (например, 8-битное изображение в градациях серого).
Распознавание символов[править]
ДОБАВИТЬ ОБЩИЕ СЛОВА
Алгоритмы распознавания символов[править]
Распознавание при помощи метрик[править]
Этой способ лучше всего работает с машинописным текстом, но при обработке новых шрифтов точность распознавания падает. Метрика является признаком символа, поэтому иногда в контексте данного способа говорят о процессе выявления признаков. В качестве метрики используют расстояние Хэмминга, которое показывает, на сколько пикселей различаются изображения. Если признаки двух символов максимально похожи, то разность между их метриками (то есть расстояние между ними) стремится к нулю. Дальнейшая классификация символа происходит по методу ближайшего соседа.
Однако, одной метрики недостаточно для распознавания символа, так как некоторые очень похожи между собой, (например, “j” и “i”, “Z” и “2”) что может привести к ошибке. Для избежания этого, используют следующие техники:
1) Группировка символов
$\;$Некоторые символы (“O”, “H”, “I”) обладают суперсимметрией, (полностью совпадают со своими отражениями, значимые пиксели распределены равномерно по всему изображению) и их можно выделить в отдельный класс. Это значительно сокращает перебор метрик.
2) Контекстное распознавание
$\;$В качестве помощи алгоритмам распознавания в систему включают словари. Они предоставляют справки во многих случаях, но быстро отказывают, когда, например, имеют дело с именами собственными, которые не находятся в словаре.
Распознавание с применением нейронных сетей[править]
Нейронные сети – это структура связанных элементов, на которых заданы функции преобразования сигнала, а также коэффициенты, которые могут быть настроены на определенный характер работы.
Часть элементов структуры выделены как входные: на них поступают сигналы извне, таким образом, они описывают значения пикселя изображения. То есть, если имеется изображение 16х16, входов у сети должно быть 256. Другая часть – выходные, они формируют результирующие сигналы.
Сигнал, проходящий через нейронную сеть, преобразуется согласно формулам на элементах сети, на выходе формируется ответ. Так как все нейроны поименованы значениями букв, следовательно, среагировавший нейрон и несет ответ распознавания.
Нейронная сеть может быть использована в системе распознавания текста в качестве классификатора. При обучении, сеть получает на вход изображения, анализирует все позиции черных пикселей и выравнивает коэффициенты, минимизируя ошибку. Таким образом, достигается лучший результат распознавания.
Пример нейронной сети[править]
На картинке в качестве примера схематически показана двухслойная нейронная сеть, включающая в себя 35 входов (каждый символ — матрица 7x5, соответственно, вектор, описывающий матрицу, состоит из 35 элементов), 26 выходов (количество букв) и 10 нейронов скрытого слоя. В качестве функции активации в данной сети используется сигмоидная функция[5], выход которой представлен в диапазоне от 0 до 1, что потом удобно перевести в булеву алгебру.
Пример на синтаксисе скриптового языка MATLAB[править]
S1 = 10; % количество нейронов на скрытом слое [S2,Q] = size(targets); % количество нейронов на втором слое (количество выходов сети) P = alphabet; % входная матрица, содержащая информацию о буквах % создаем новую сеть с использованием диалогового окна net = newff(minmax(P), % матрица минимальных и максимальных значений строк входной матрицы [S1 S2], % количество нейронов на слоях {’logsig’ ’logsig’}, % функция активации ’traingdx’ % алгоритм подстройки весов и смещений (обучающий алгоритм) );
Недостатки нейронных сетей[править]
Нейронные сети с успехом могут применяться в системах распознавания текста, однако обладают существенными недостатками, препятствующими их широкому применению:
- Затраты памяти: необходимо построить достаточно большую сеть элементов, что приводит к большим затратам памяти.
- Затраты ресурсов системы: в процессе распознавания используются большие объемы ресурсов системы, так как функции на элементах сети работают с числами с плавающей точкой.
- Необходимость в обучении: для достижения более точного результата нейронную сеть необходимо обучать, однако и это не гарантирует идеальный результат.
- Сложность построения: так как работа нейронной сети во многом зависит от ее конфигурации, требуется больше усилий для создания наиболее эффективной архитектуры.
Алгоритмы распознавания текста[править]
E2E-MLT[править]
Определение: |
E2E-MLT[6] — метод, позволяющий решать задачи локализации и распознавания текста на изображениях, содержащих фрагменты на разных языках. Основан на FCN-сети с общими слоями для обеих задач. |
Реализация размещена в Github репозитории[7] одного из авторов проекта.
См. также[править]
Источники информации[править]
- ↑ https://en.wikipedia.org/wiki/Optical_character_recognition
- ↑ https://www.abbyy.com/ru/finereader/
- ↑ https://ru.wikipedia.org/wiki/ПЗС
- ↑ https://ru.wikipedia.org/wiki/Проект_«Гутенберг»
- ↑ https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BC%D0%BE%D0%B8%D0%B4%D0%B0
- ↑ https://arxiv.org/abs/1801.09919
- ↑ https://github.com/MichalBusta/E2E-MLT