ABBYY PassportReader SDK – когда вообще ничего не нужно настраивать

от автора

Мы продолжаем серию статей про наши продукты для разработчиков, реализующие технологию извлечения данных из изображений (data capture). Новый продукт в линейке – ABBYY PassportReader SDK — специализированное решение для ввода данных из документов, удостоверяющих личность граждан России и стран СНГ.

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

В предыдущей статье серии мы рассказывали про наше универсальное решение для ввода данных ABBYY FlexiCapture Engine – про сложности с настройкой под конкретные типы документов и то, как мы с этим боремся, реализуя технологию самообучения. Несмотря на значительный прогресс в этой области, начальная настройка решения со стороны разработчика всё равно требует некоторых действий. Работающее решение сейчас получить легко, но получение оптимального решения по прежнему требует опыта, знаний и времени.

С другой стороны существует множество типовых широко-распространённых классов документов, для которых есть возможность выполнить всю настройку заранее и создать специализированное решение, оптимизированное на работу с узким классом документов и не требующее вообще никакой предварительной настройки разработчиком. Примером такого решения и является ABBYY PassportReader SDK.

Основные типы документов, с которыми работает PassportReader SDK, это: паспорт или удостоверение личности, водительское удостоверение и загранпаспорт. Для Российской Федерации дополнительно доступно свидетельство о рождении. Для стран СНГ некоторые документы пока отсутствуют.

Данные типы документов востребованы, и, вместе с тем, довольно сложны для обработки, так как часто имеют сложный фон в виде тонкого рисунка линий – гильош; надписи, контрастные только по цвету, но не по яркости; специальные шрифты. Кроме этого, многие из перечисленных типов документов существуют в виде нескольких вариантов (старого и нового образцов, биометрический и обычный загранпаспорт и т.п.). Все это сводится к тому, что самостоятельное получение качественного результата на подобных документах с использованием универсального инструмента типа FlexiCapture Engine является не совсем тривиальной задачей. И тут на сцену выходит PassportReader SDK.

Начинаем работать

Вся работа с продуктом в простейшем случае сводится к созданию объекта engine-а и вызову метода Recognize:

var engine = new ABBYY.PassportReaderSdk.RecognitionEngine(); try { 	var result = engine.Recognize( fileName, "Passport_RU" ); 	... } finally { 	engine.Close(); }

NB. RecognitionEngine реализует интерфейс IDisposable и может использоваться стандартным образом в конструкциях, требующих этого интерфейса. Так, в примере выше, можно было бы вместо try…finally использовать блок using , что было бы полностью эквивалентно.
NB. Изображение можно прочитать из файла или отсканировать встроенными в PassportReader SDK средствами с использованием метода engine.Scan()

С извлечёнными полями можно работать непосредственно:

string lastName = result.FieldValue( "LastName", "" ); string firstName = result.FieldValue( "FirstName", "" ); string middleName = result.FieldValue( "MiddleName", "" ); string dateOfBirth = result.FieldValue( "DateOfBirth", "" ); string placeOfBirth = result.FieldValue( "PlaceOfBirth", "" );

NB. Схема данных для всех типов документов унифицирована – одинаковые по смыслу поля имеют одинаковые названия независимо от типа документа. То есть если нам нужны фамилия, имя, отчество, дата и место рождения, то код выше будет одинаково работать со всеми типами документов.

Либо получить результат в виде XML и сохранить в файл:

string xmlBody = result.GetXml( ... ); string xml = string.Format( "<?xml version='1.0' encoding='UTF-8'?>{0}", xmlBody ); System.IO.File.WriteAllText( fileName, xml, Encoding.UTF8 );

NB. Полученный XML-документ соответствует схеме XMLResult.xsd, которая ставится вместе с продуктом

Это, собственно, почти всё. Кроме описанной выше базовой функциональности для каждого поля можно получить прямоугольник найденного поля на изображении и уверенность распознавания отдельных символов.

Описанной функциональности достаточно для реализации примера см. скриншот ниже. Пример представляет собой готовое к использованию приложение, позволяющее загрузить или отсканировать изображение документа, распознать его, отредактировать и сохранить результат в XML или CSV, с возможностью при необходимости запустить внешнее приложении для дальнейшей обработки результата. Пример поставляется с исходным кодом и у разработчика есть возможность легко доработать его под свои нужды.

Даже без доработки в пример включены простейшие средства для интеграции с внешними системами:

На момент написания данной статьи в PassportReader SDK доступны документы для следующих стран:

Технические детали

С точки зрения реализации PassportReader SDK представляет собой обёртку на .Net вокруг сильно урезанной версии FlexiCapture Engine (удалены ненужные словари, в несколько раз уменьшен размер дистрибутива). Обёртка выполняет всю настройку среды и подготовку изображений, и представляет пользователю предельно простой программный интерфейс.

Хотя родная среда для PassportReader SDK – это .Net, все интерфейсы объявлены с атрибутом ComVisible. Поэтому PassportReader SDK можно использовать напрямую из сред разработки, умеющих работать с COM. В продукт включены примеры использования на C++ и Delphi.

NB. При этом есть некоторые нюансы, вносимые идеологией .Net. Например, для того чтобы COM-объект создавался, соответствующая сборка должна быть зарегистрирована в GAC или лежать в той же директории, что и EXE-шник вызывающего приложения. То есть требования в точности те же, что и для сборок .Net.

Существует две версии PassportReader SDK: обычная и серверная. Обычная версия не поддерживает многопоточность и требует, чтобы вся работа с PR выполнялась из одного потока. Серверная версия поддерживает работу из нескольких потоков. При этом работа выполняется параллельно с использованием всех доступных ядер процессора.

Так как PassportReader SDK – это обёртка вокруг FlexiCapture Engine, то всё, что может PassportReader SDK, реализуемо и с помощью FlexiCapture Engine. Таким образом, всегда остаётся свобода манёвра. Ниже в таблице приведено сравнение возможностей PassportReader SDK и FlexiCapture Engine.

Наиболее актуальную информацию о продукте можно найти на сайте ABBYY.

Алексей Калюжный,
департамент продуктов для разработчиков

ссылка на оригинал статьи http://habrahabr.ru/company/abbyy/blog/174539/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *