Ранее мы, Smart Engines, уже писали про наши технологии распознавания (паспорта РФ, банковских карт и многих других). Основной ценностью SDK является "ядро" или "движок" распознавания Smart IDReader, который объединяет функциональность сканирования всего, что мы умеем сканировать, под единым интерфейсом.
Библиотека распознавания написана на С++ для достижения максимальной производительности, но для использования с различными языками программирования у нас есть версии интерфейсов библиотеки на C++, C, C#, Objective-C, Java и даже Visual Basic. Мы поддерживаем все популярные операционные системы: iOS, Android, Windows, Linux, MacOS, Solaris и, разумеется, Эльбрус и AstraLinux. Наши алгоритмы оптимизированы под такие архитектуры, как ARMv7-v8, AArch64, x86, x86_64, SPARC, E2K.
Мы решили выложить демо-версию нашего SDK на Github, чтобы вы могли ознакомиться с интерфейсом библиотеки (как Objective-C часть, так и C++), почитать документацию и попробовать встроить Smart IDReader в ваше приложение. Репозиторий с демо-версией Smart IDReader iOS SDK доступен по ссылке: https://github.com/SmartEngines/SmartIDReader-iOS-SDK
Чтобы посмотреть, как Smart IDReader выглядит в нашем исполнении после встраивания, вы можете скачать бесплатные полные версии приложений из App Store и Google Play.
В этой статье мы расскажем, как iOS разработчик может использовать наши технологии для добавления функциональности распознавания документов в своё приложение.
Что находится в SDK
Структура iOS SDK, которую получает заказчик и которую можно увидеть в репозитории, такая:
doc— документацияSESmartID— код Objective-C GUI обертки над С++ ядром, с которым и происходит взаимодействиеSESmartIDCore/data-zip— конфигурация ядраSESmartIDCore/include— C++ заголовочные файлыSESmartIDCore/lib— универсальная статическая библиотека для iOS-устройств и Simulator-овSESmartIDSampleиSESmartIDSample.xcodeproj— файлы sample-проекта
Весь iOS-код нашего SDK, включающий в себя как код основного ViewController-а, так и код примера его использования, поставляется в исходном виде, а не в виде скомпилированной библиотеки. Вы можете использовать и менять его как захотите.
Настройка Xcode проекта
Для добавления нашего SDK в ваш проект требуется сделать следующие действия:
- Перетащить папку SESmartID с кодом обертки из SDK в проект, при добавлении выбрать Create Groups
- Сделать то же самое для папки lib со статической библиотекой (находящейся внутри SESmartIDCore)
- Перетащить папку data-zip с конфигурацией, при добавлении выбрать Create Folder References
- Добавить папку include в Header Search Paths проекта
Готово! Структура вашего проекта по окончании может выглядеть так:

Взаимодействие с ядром распознавания
Основной класс обертки, с которым вы взаимодействуете, называется SESIDViewController. Чтобы получать результаты распознавания нужно также добавить в ваш класс протокол SESIDViewControllerDelegate и сам объект обертки следующим образом:
#import "SESIDViewController.h" @interface SESIDSampleViewController : UIViewController <SESIDViewControllerDelegate> @property (nonatomic, strong) SESIDViewController *smartIdViewController; @end
Затем, ядро распознавания необходимо сконфигурировать:
- (void) initializeSmartIdViewController { // Создаем ядро/экран распознавания self.smartIdViewController = [[SESIDViewController alloc] init]; // Проставляем делегат, через который к нам придет результат распознавания self.smartIdViewController.delegate = self; }
Наконец, когда вы хотите отсканировать документ, нужно показать экран распознавания, указав, какие документы требуется распознавать в рамках текущей сессии:
- (void) showSmartIdViewController { // Указываем, какие документы мы хотим распознавать // Документация содержит подробное описание возможных типов документов и т.п. [self.smartIdViewController addEnabledDocumentTypesMask:"rus.passport.*"]; // [self.smartIdViewController addEnabledDocumentTypesMask:"mrz.*"]; // [self.smartIdViewController addEnabledDocumentTypesMask:"card.*"]; // Можно контролировать таймаут в секундах, после которого распознавание закончится self.smartIdViewController.sessionTimeout = 5.0f; // Показываем экран распознавания [self presentViewController:self.smartIdViewController animated:YES completion:nil]; }
Во время сканирования у вас будут вызываться два делегатных метода, которые необходимо реализовать для получения результата распознавания:
// Вызывается после распознавания очередного кадра видеопотока - (void) smartIdViewControllerDidRecognizeResult:(const se::smartid::RecognitionResult &)result { // Флаг "терминальности" проставляется, когда движок полностью уверен в результате или когда истек таймаут if (!result.IsTerminal()) { // Здесь можно показать промежуточный результат на экране или ничего не делать return; } // Закрываем экран распознавания [self dismissViewControllerAnimated:YES completion:nil]; // Используем результат распознавания // Можно получить названия всех присутствующих строковых полей const std::vector<std::string> &stringFieldNames = result.GetStringFieldNames(); // Или взять интересующее строковое поле const se::smartid::StringField &field = result.GetStringField("second_name"); // Проверить, уверен ли движок в результате const BOOL fieldAccepted = field.IsAccepted(); // И взять его содержимое NSString *fieldValue = [NSString stringWithUTF8String:field.GetUtf8Value().c_str()]; // То же самое можно сделать для изображений: фотографии и других if (result.HasImageField("photo")) { const se::smartid::Image &image = result.GetImageField("photo").GetValue(); self.resultImageView.image = [SESIDViewController uiImageFromSmartIdImage:image]; } } // Вызывается при отмене сканирования пользователем - (void) smartIdViewControllerDidCancel { // Закрываем экран распознавания [self dismissViewControllerAnimated:YES completion:nil]; }
Заключение
Мы рассказали, как встроить Smart IDReader SDK в ваше iOS приложение.
Кстати, если запустите пример с Github и увидите незнакомую женщину, не пугайтесь! Это — широко известная в узких кругах разработчиков систем распознавания Erika Mustermann, популярность которой сопоставима с популярностью знаменитой Лены из статей по обработке изображений.
ссылка на оригинал статьи https://habrahabr.ru/post/329574/
Добавить комментарий