Как стать автором
Обновить
0
Content AI
Решения для интеллектуальной обработки информации

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

Время на прочтение4 мин
Количество просмотров30K
Мы продолжаем серию статей про наши продукты для разработчиков, реализующие технологию извлечения данных из изображений (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. Тот факт, что FlexiCapture Engine может намного больше, даже и упоминать не буду — очевидно же.

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

Алексей Калюжный,
департамент продуктов для разработчиков
Теги:
Хабы:
Всего голосов 48: ↑39 и ↓9+30
Комментарии41

Публикации

Информация

Сайт
www.contentai.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия

Истории