- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

Основные типы документов, с которыми работает 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, с возможностью при необходимости запустить внешнее приложении для дальнейшей обработки результата. Пример поставляется с исходным кодом и у разработчика есть возможность легко доработать его под свои нужды.

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

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

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

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

ABBYY 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 PassportReader SDK – когда вообще ничего не нужно настраивать

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

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

Автор: AlekseyKa

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/30666

Ссылки в тексте:

[1] предыдущей: http://habrahabr.ru/company/abbyy/blog/146679/

[2] ABBYY PassportReader SDK: http://www.abbyy.ru/passportreader-sdk/

[3] Источник: http://habrahabr.ru/post/174539/