Сделав небольшой перерыв в разговоре о реализации в приложениях полнотекстового поиска, мы поговорим о решении ничуть не менее интересном - оно предназначено для реализации распознавания символов и штрих-кодов на изображениях. Думаю, что большая часть наших читателей уже слышала если не о самом этом продукте, то уж, по крайней мере, о его производителе.
Вступление
Не думаю, что стоит долго растекаться мыслью по древу, рассказывая о том, где может пригодиться оптическое распознавание символов и штрих-кодов. Практически в каждом приложении, где предусмотрена работа с каким-либо текстом, да и вообще с вводимыми пользователем данными, поддержка технологий распознавания печатных (OCR) и рукописных (ICR) символов, меток (OMR) и штрих-кодов будет не лишней. Другое дело, что разработка "с нуля" собственного "движка" для распознавания всего этого является, скажем прямо, далеко не самой тривиальной задачей. Именно поэтому нужны какие-то сторонние средства. Какие-то? Качественные. Имя компании ABBYY, когда речь идет о технологиях оптического распознавания, вспоминается само собой. Так что обращение к предлагаемым ею продуктам для разработчиков - это не столько случайность, сколько, я бы сказал, закономерность. Что ж, с таким посылом и приступим к знакомству...
Вначале о главном...
Для начала, как водится, о том, что найти этот программный продукт можно по адресу www.abbyy.ru/finereader_engine. Там же имеется весьма подробная информация о нем на русском языке и ознакомительная версия для тестирования.
Наверное, первый вопрос, который возникает при разговоре о любом (ну, скажем так, практически любом) SDK: для каких платформ и языков программирования он доступен. Потому что даже самый замечательный SDK может оказаться непригодным, если рассчитан на Forth-программистов, разрабатывающих продукты под платформу Amiga. Но, к счастью, в случае с ABBYY FineReader Engine все совсем не так плохо. Самая новая, девятая, версия продукта доступна для Windows и Linux, а более старая, восьмая, также для MacOS и FreeBSD. Я буду говорить преимущественно о Windows-версии, но многое из того, что будет о ней сказано, вполне справедливо и для остальных поддерживаемых платформ. Что касается поддерживаемых сред разработки, то их список довольно-таки велик. Он включает в себя Microsoft Visual Studio.NET (языка VB.NET, C#); Microsoft Visual Basic 5.0, 6.0; Microsoft Visual C++ версия 4. x или более поздняя; Borland Delphi, версия 2.0 или более поздние. Также можно работать с SDK через VB Script и другие языки сценариев. Это возможно благодаря тому, что взаимодействие "движка" с окружающим миром реализовано через COM и компоненты ActiveX.
Языковые возможности
Что ж, чисто технические детали (по крайней мере, наиболее важные из них) мы с вами обговорили. Теперь пора поговорить о моменте не менее важном для продукта, заявляющего поддержку оптического распознавания символов, - то есть о том, какие символы он может распознавать.
Языков в арсенале ABBYY FineReader Engine очень много, и основных из них 37. Перечислять не буду - список можно увидеть на сайте компании ABBYY. К ним примыкают еще семь языков со словарной поддержкой, 5 языков для распознавания документов, напечатанных в XVII-XIX столетиях (с морфологической поддержкой), и 133 дополнительных языка, использующих латинский, кириллический или греческий алфавиты. Также возможно распознавание текста на 4 искусственных языках (эсперанто, интерлингва, идо, оксиденталь), 6 языках программирования (Basic, C/C++, COBOL, Fortran, JAVA и Pascal), поддерживаются простые химические формулы и цифры. Возможно распознавание различных типов текста: типографская печать, печатная машинка, матричный принтер, MICR (E13B), MICR (CMC7), OCR-A, OCR-B и предусмотрены средства для создания пользовательских языков.
Но и на этом возможности SDK не заканчиваются - ведь до сих пор речь шла только о печатном тексте, а есть еще и рукописный. Конечно, рукописный текст есть рукописный текст, и далеко не всякий его сможет распознать, даже такая мощная штука, как ABBYY FineReader Engine. И, тем не менее, ABBYY FineReader Engine 9.0 распознает тексты, написанные печатными буквами от руки (ICR) на 113 языках (китайского среди них нет).
Штрих-коды
Отдельно стоит сказать насчет распознавания штрих-кодов. Есть, конечно, масса библиотек, в том числе и бесплатных, "заточенных" именно под работу со штрих-кодами. Но если вы решили, что вам нужен OCR, то можно, что называется, за компанию воспользоваться и этой возможностью рассматриваемого нами сейчас решения для разработчиков.
ABBYY FineReader Engine поддерживает распознавание как одномерных, так и двумерных штрих-кодов. Одномерные - это Check Code 39, Check Interleaved 25, Code 128, Code 39, EAN 13, EAN 13 Supplemental, EAN 8, Interleaved 25, CODABAR (без контрольной суммы), UCC Code 128, Code 2 of 5 (Industrial, IATA, Matrix), Code 93, UPC-A, UPC-E и Postnet. Двумерные - PDF 417, Aztec, Data Matrix, QR Code.
Пару слов скажу и об OMR (оптическом распознавании меток). Как пишут разработчики продукта, в нем есть поддержка распознавания одиночных меток и групп меток, причем при распознавании корректно обрабатываются как ошибочно выбранные, так и полностью закрашенные метки.
Что, кроме распознавания?
Распознавание - это, без сомнения, самый важный из всех этапов работы "движка" над "скормленным" ему документом. Но этот этап далеко не единственный; более того, он даже не первый из всех. Фактически, ABBYY FineReader Engine предлагает все те же этапы обработки отсканированного (или любого другого) изображения, что и "коробочный" продукт компании ABBYY - FineReader.
Перед непосредственным распознаванием в девяти случаях из десяти более чем полезно провести предварительную обработку распознаваемого изображения. Этот этап включает в себя такие действия, как устранение перекосов, разделение двойных страниц, удаление "мусора" (очистка изображения), фильтрация текстуры, масштабирование изображения, автоматическое определение угла поворота страницы (90, 180, 270 градусов), очистка изображения в пределах текстового блока, изменение цветов текста и фона в прямоугольных областях. И все это, само собой, поддерживает ABBYY FineReader Engine.
Следующий этап - это анализ структуры документа. Он необходим для автоматического преобразования документа с сохранением форматирования, распознавания отдельных зон документа с разметкой блоков вручную, а также для обработки форм. С помощью анализа можно определить ориентацию страницы, обнаружить текстовые блоки, таблицы, штрих-коды и картинки; обнаружить в ячейках таблиц текст с вертикальным направлением. Есть и специальные виды анализа - анализ документа для счетов и анализ документа для полнотекстового индексирования. Первый вид анализа, как пишут разработчики ABBYY FineReader Engine, предназначен для предварительной обработки документов, расположение элементов которых неодинаково для разных документов одного типа. Второй - для тех случаев, когда нужно "залпом" обработать всю текстовую информацию, содержащуюся на странице, включая ту, которая находится внутри изображений, графиков, диаграмм и т.п.
Немного о форматах
Что очень приятно, ABBYY FineReader Engine умеет принимать на входе информацию в различных графических форматах и выдавать на выходе её также в различных форматах - текстовых или околотекстовых. Список форматов достаточно, надо сказать, внушительный как с одной, так и с другой стороны.
В качестве входных форматов "движок" способен принимать PDF (версия 1.6 или более ранние), включая архивный формат PDF/A; BMP; PCX, DCX; JPEG и JPEG 2000, part1; PNG, TIFF в разных своих палитрах и способах сжатия, в том числе и многостраничный; GIF и даже DjVu.
На выходе можно в готовом виде получать распознанные данные в форматах Microsoft Word (.DOC), Rich Text Format (.RTF), Microsoft Word XML (.XML для Microsoft Office Word 2003), Microsoft PowerPoint (.PPT), Microsoft Excel (.XLS), в XML-форматах Microsift Office 2007 (.DOCX, .XLSX, .PPTX), в PDF, PDF/A (включая компрессию). Можно выбрать в качестве выходного формата также и обычный текст, HTML или CSV, а также DBF. При этом для обычных текстовых форматов ABBYY FineReader Engine поддерживает различные кодовые страницы (Windows, DOS, Mac, ISO) и кодовые страницы Unicode (UTF-16, UTF-8).
Впрочем, если вы не хотите получать из одного документа на входе другой документ на выходе, продукт предлагает достаточно мощные API, которые позволят работать с распознанными объектами на более низком уровне. Эти API предоставляют доступ к полной информации о каждом распознанном символе, реализуют функции редактирования и форматирования распознанного текста перед экспортом, позволяют реализовать различные уровни сохранения форматирования текста при экспорте во внешние приложения.
Вместо выводов
Что ж, как видите, ABBYY FineReader Engine - действительно мощное решение для встраивания поддержки оптического распознавания символов и других объектов в различные приложения. Конечно, может быть, вы найдете какой-то более соответствующий вашим потребностям аналогичный продукт, но, скорее всего, большинство остановится именно на ABBYY FineReader Engine - потому что он этого реально заслуживает.
Вадим СТАНКЕВИЧ,
[email protected]
Горячие темы