Вступление
Возможно каждый из нас переживал период в своей жизни который сопровождался активно оцифровкой аналогов материала. Я имею в виду необходимость работы с текстом из неоцифрованных источников. Имеется в виду не только проблема сканирования, но и так же множество материала который к сожалению доходит до конечного потребитель не совсем в пригодном для использования виде. И я думаю у каждого из нас очень часто в голове пробегали лестные мысли об распространителя книги в формате djvu или pdf в котором весь контент был представлен сугубо графически без возможности использование материалов для своей деятельности.
Для Windows-пользователей существует вариант использования FineReader, который без труда осуществлял процесс распознавания со всеми вытекающими.
Linux — решение проблемы
Ну а что делать людям, которые способны использовать более продвинутые операционные системы сохраняя при этом свои финансы на приемлемом уровне? Разумеется существуют проекты консольных утилит по распознаванию текста. На базе одной из самых развитых открытых технологий OCR создали целый дистрибутив по развертыванию сервера для OCR с веб-интерфейсом для общения с этим самым сервером. Но не думаю что конечному потребителю интересны такие монструозные решения. А сама по себе технология реализована во многих дистрибутивах в виде консольного приложения, которое может оперировать не популярными форматами, из которых чаще всего и необходимо “выдрать” текст (djvu, pdf), а графическими файлами что осложняет процесс использования.
Разумеется такое положение вещей и любовь Линуксоидов к оптимизации всего и вся привели к появлению проекта BookOCR, основателям которого и программистом выступает замечательный человек mr-protos, которого пока нету на Хабре. Далее его статья о создании BookOCR:
BookOCR
mr-protos создал в меру простой bash-скрипт bookocr.sh:
bookocr.tar.xz (размещено на dropbox)
Алгоритм его работы:
1. проверка расширения файла (.djvu или .pdf. В случае иного расширения скрипт выдаст предупреждение);
2. постраничное конвертирование файла в .png для дальнейшего распознавания. (результат складывается во временную папку ~/.tmp_pdf или ~/.tmp_djvu);
3. распознавание сконвертированных страниц с помощью OCR;
4. объединение постранично-распознанных текстовых файлов в один;
5. удаление временной папки.
Использование скрипта:
bookocr.sh <путь_к_pdf_или_djvu>
Примечание: готовый файл создаётся в той же директории, что и исходный
Для работы скрипта в системе должны быть установлены следующие пакеты:
- cuneiform
- ghostscript
- djvulibre-bin
- libtiff-tools
- libnotify-bin
Качество распознанного текста зависит в первую очередь от качества оригинального файла и от работы пакета cuneiform.
KBookOCR
Разумеется данный проект стал толчком для еще одной амбициозной идеи, которую совместно с автором BookOCR воплотил в жизнь Ваш покорный слуга b0noI. Идея заключалась в том что бы реализовать систему пригодную для использования визуальными эстетами во всем предпочитающих визуально-красивое оформление (это как минимум), а как максимум создать проект на базе Linux, который бы позволял выполнять функционал FineReader в столь же удобной и эстетично прекрасном варианте.
Для разработки была выбрана библиотека Qt. С одной стороны этот проект представляет с собой надстройку над проектом BookOCR, однако не все так просто. Так как при интеграции приходилось вносить существенные изменения в изначальный скрипт. Особые проблемы были при реализации предпросмотра djvu файлов, так как если для pdf существует проект poppler, то в указанном случаи предпросмотр пришлось реализовать сторонней bash утилитой. Именно по этому в систему при установки KbookOCR, по мимо самого KbookOCR, устанавливается не только BookOCR, но и консольная утилита которая используется для получения картинки используемой при предпросмотре.
Текущее состояние проекта
Уже сейчас проект дошел до стадии готовой первой версии и проходит активное публичное тестирование (скачать для Ubuntu deb x86). Что же может первый публичный и опен-сорсный убийца FineReader-а?:
- выполнять предпросмотр документа который необходимо распознать (пролистывать страницы);
- указывать язык распознавания. На текущий момент отсутствует распознавания языка в документе, однако это планируется сделать. Так же нет возможности указывать двойной язык распознавания документа (за исключением rus/eng);
- менять размеры предпросмотра. Доступно два варианта — оригинальный размер или же уменьшенный;
- распознавать можно по заданному диапазону или же весь документ;
- сохранение распознанного документа. Доступно два варианта — или же сохранить результат в обычный текстовый файл, либо же открыть результат в OpenOffice Writer.
RoadMap
В следующей версии, срок выхода которой, к сожалению, не известен, планируется реализовать и добавить:
- работу со сканером;
- автоопределение языка в документе;
- более гибкий предпросмотр. с прорисовкой миниатюр страниц, а так же с более гибким указанием масштаба отображения;
- более гибкое указание диапазона распознавание.
В очень отдаленной перспективе рассматривается варианты указания зон распознавания, типов зон, а так же распознавание не только текста но и форматирование документа в соответствие с оригиналом.
Послесловие
И хотя KbookOCR является наиболее свежим детищем нашего дуэта, программа не является первым и единственным нашим творением. В следующей серии мы расскажем Вам о нашем первом совместном проекте для Linux — KbashPod для подкастофилов.
UPD:
Обновление до версии 1.2:
- Поддержка сканера (via scanimage);
- Вывод результата в формате html, rtf (via cuneiform);
- Обработка форматирования текста (via cuneiform);
- Динамическое изменение масштаба предпросмотра.
Ссылки
BookOCR
bookocr.tar.xz
KBookOCR 1.2
KBookOCR on kde-apps.org
Авторы
mr-protos
b0noI