OCR с помощью OpenSource средств
LVEE Winter 2018
OCR с помощью OpenSource средств
Довольно часто возникает ситуация, когда пользователю надо перевести информацию из графического представления в текстовый. Сюда входит как сканирование документов, так и просто распознавание текстовой информации с фотографий.
Задача
На входе у нас есть набор картинок, из которого мы хотим извлечь всю текстовую информацию.
Мы хотим:
- сохранить исходную структуру нашего документа. Ведь никому не хочется заниматься оформлением документа заново: настраивать отступы, разбивать на абзацы, перетаскивать картинки на нужное место в документе и т.д.
- нам не нужен никакой мусор в выходном документе. Думаю, вы сильно огорчитесь, если вместо вполне себе читаемого вами текста с картинки вы получите набор несвязанных символов… Это очень и очень грустно, и в таких случаях хочется взять и просто ничего не делать (или вам придётся перепечатывать руками текст с картинки).
- было бы неплохо извлекать информацию помимо текстовой и сохранять её в нужном виде (картинки обрамлённые текстом). А ещё уметь восстанавливать таблицы, например.
- иметь возможность сохранения в различные форматы (PDF, ODT, etc.). Никому ведь не хочется сохранять в промежуточный формат, чтобы потом ещё раз сохранить так, как вам надо, верно? :-)
- поддержка сканера, если собираемся работать с его помощью. Намного удобнее сразу нажать кнопку «Сканировать» и получить уже готовый документ с текстом, нежели сканировать, потом открывать картинки, чтобы их проOCRить.
- Ничего не делать для получения наилучшего результата (кнопка «Сделать всё хорошо»). Наши настройки по умолчанию должны быть как можно лучше для использования среднестатистическим пользовтелем.
Сложность задачи
К сожалению, на пути к нашим целям возникает большое количество проблем.
- Очень плохая предобработка изображений в существующих решениях. Хороших библиотек довольно мало и они мало специализируются именно на подготовке документа к OCR. К тому же область сложная, и мало кому хочется этим заниматься во благо Open Source.
- Сфера очень сложная. Требуется довольно много времени проводить за чтением научных статей, чтобы найти подходящий вам алгоритм (если он уже не реализован в какой-либо библиотеке).
- Нужно хорошее железо для запуска сложного ПО. Разные алгоритмы и работают по-разному. Запуск обычного фильтра на обычном какзалось бы изображении может занять пару десятков секунд. Согласитесь, довольно долго.
Существующие средства OCR (консольные)
Tesseract – свободная компьютерная программа для распознавания текстов, разрабатывавшаяся Hewlett-Packard с середины 1980-х по середину 1990-х, а затем 10 лет «пролежавшая на полке». В августе 2006 г. Google купил её и открыл исходные тексты под лицензией Apache 2.0 для продолжения разработки.
Очень серьёзная система с долгой историей развития. Имеет довольно неплохой уровень распознавания. Довольно легко добавляется поддержка новых языков и шрифтов. Начиная с версии 4 (которая ещё alpha), под капотом — нейронная сеть. Поддерживает вывод результата в форматах plain text и HOCR (HTML-подобный формат). Недостатки: низкая скорость работы, отсутствие параллельного распознавания на уровне одной страницы (частично решает с помощью включения OpenMP). Но вам никто не мешает распознавать параллельно несколько страниц в несколько потоков.
Cuneiform – была разработана компанией Cognitive Technologies как коммерческий продукт в 1993 году. Система поставлялась с наиболее популярными моделями сканеров, МФУ и ПО в России и мире: Corel Draw, Hewlet-Pachard, Epson, Xerox, Samsung, Brother, Mustek, OKI, Canon, Olivetti и др. В 2008 году Cognitive Technologies открыла исходные коды OCR CuneiForm. (из Википедии). Текущее состояние проекта — мёртв. Качество распознавания — в целом хуже, чем у Tesseract, но, например, на русском языке показывает иногда результаты лучше, чем у Tesseract (вполне возможно правится более сильной тренировкой Tesseract).
OCRAD — ещё один довольно старый OCR движок. К сожалению, сейчас заброшен и не очень активно развивается. Качество OCR также будет хуже, чем у Tesseract.
И это далеко не все движки, так как свой написать сейчас довольно легко… А вот заставить его работать лучше чем Tesseract — совсем другая история… :-)
Существующие средства OCR (GUI)
YAGF — мёртв. Крайне не рекомендую ввиду забагованности программы. В частности очень много проблем в обработке изображений (если вы посмотрите в код обработки изображений вы поймёте, о чём я). Зато имеет простой и интуитивно-понятный интерфейс. Форк UFOCR также мёртв (мой форк).
GimageReader — жив и активно развивается. Программа, которой я сейчас занимаюсь (автор и текущий мейнтейнер — Sandro Mani из Швейцарии). Программа по сути является графической оболочкой над Tesseract, но имеет кучу приятных бонусов: поддержка большо количества форматов изображений, pdf, djvu, встроенный HOCR редактор, поддержка спеллчекера, экспорт в plain text, ODT (ещё не вошло в релиз), PDF. Очень рекомендую (ещё бы). Минусы: к сожалению на данный момент не обладает поддержкой алгоритмов обработки изображения (но я над этим работаю).
VietOCR — Java оболочка над Tesseract + обработка изображений из библиотеки Leptonica. Довольно приятная в работе программы. Если у вас довольно много оперативной памяти — можете попробовать.
OCRfeeder — одна из наиболее приятных для работы программ. Также поддерживает экспорт в ODT. И также является оболочкой над Tesseract (как и все)
Существующие средства для улучшения изображений до OCR
ScanTailor — мёртв, но рекомендую. Поддерживает такие вещи как выравнивание страницы, автоматическое разрезание разворота книги на несколько страниц. Написан на C++. Имеет довольно приятный GUI, так что вы можете без труда интерактивно обработать изображение.
unpaper — мёртв. Написан на Си. Самое ценное, что в нём есть — это схема предобработки изображений, которую unpaper использует. Если интересуетесь темой, можете ознакомиться, и почему схема имеет именно такой вид. Имеет консольный интерфейс, так что можете использовать его в скриптинге.
ImageMagick — библиотека для обработки изображений. Есть набор косольных утилит, с помощью которых вы можете обрабатывать изоюражение. Здесь пригодится тем, что с помощью ImageMagick вы сможете написать свой сценрарий обработки изображений на Bash и применять его перед tesseract. На просторах Интернета скрипт такой уже есть.
Библиотеки для обработки изображений
OpenCV — библиотека для компьютерного зрения. Ценна тем, что содержит очень много примитивов для работы с изображениями и некоторые алгоритмы, которые будут нам полезны и уже идут из коробки (бинаризация, удаление шума, детекторы рёбер и прямых линий). Наличие примитивов сильно помогает в написании своих алгоритмов. Также рекомендую заглянуть в репозиторий OpenCV_contrib — там вы найдёте ещё больше алгоритмов для обработки изображений(больше бинаризаций, алгоритмы выравнивания цвета).
Leptonica — библиотека для обработки изображений. Имеет набор алгоритмов в целом более крутой, нежели OpenCV. Например, в Leptonica есть выравнивание страниц, определение ориентации страницы, выравнивание фона изображения (помогает при удалении теней) и т. д. Написана на C. Имеет интерфейсы к Java, поэтому пользуется популярностью у Android разработчиков.
Мобильные решения
TextFairy — полужив. Рекомендую. Tesseract + Leptonica. Пожалуй, лучшее OpenSource приложение для OCR под Android. Умеет в автоматическое исправление наклона текста, а также имеет интеграцию с Google Translate (+ озвучка распознанного текста).
OpenNoteScanner — более-менее аналог TextFairy, но без распознавания :-) Зато неплохо находит документ на фото. Жив и развивается.
Сопутствующие средства распознавания
LanguageTool — Java тулза для постобработки уже распознанного текста. Имеет большое количество правил для проверки текста. Помогает исправить ошибки, которые могли возникнуть в ходе работы OCR.
Hunspell и подобные — обыкновенные спеллчекеры, которые также помогут избавиться от мусора, который скорее всего возникнет в ходе распознавания.
Призыв к contribute
Если вам интересна данная тема, то призываю вас влиться в команду разработки gImageReader. До ABBYY FineReader нам ещё очень далеко, но мы стараемся. Будет очень круто, если именно вы поможете нам стать удобным OCR программой для конечного пользователя.
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license
Back