- PVSM.RU - https://www.pvsm.ru -
Ранее мы, Smart Engines [1], уже писали про наши технологии распознавания (паспорта РФ [2], банковских карт [3] и многих других [4]). Основной ценностью SDK является "ядро" или "движок" распознавания Smart IDReader, который объединяет функциональность сканирования всего, что мы умеем сканировать, под единым интерфейсом.
Библиотека распознавания написана на С++ для достижения максимальной производительности, но для использования с различными языками программирования у нас есть версии интерфейсов библиотеки на C++, C, C#, Objective-C, Java и даже Visual Basic. Мы поддерживаем все популярные операционные системы: iOS, Android, Windows, Linux, MacOS, Solaris и, разумеется, Эльбрус [5] и 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 [6]
Чтобы посмотреть, как Smart IDReader выглядит в нашем исполнении после встраивания, вы можете скачать бесплатные полные версии приложений из App Store [7] и Google Play [8].
В этой статье мы расскажем, как iOS разработчик может использовать наши технологии для добавления функциональности распознавания документов в своё приложение.
Структура iOS SDK, которую получает заказчик и которую можно увидеть в репозитории, такая:
doc
— документацияSESmartID
— код Objective-C GUI обертки над С++ ядром, с которым и происходит взаимодействиеSESmartIDCore/data-zip
— конфигурация ядраSESmartIDCore/include
— C++ заголовочные файлыSESmartIDCore/lib
— универсальная статическая библиотека для iOS-устройств и Simulator-овSESmartIDSample
и SESmartIDSample.xcodeproj
— файлы sample-проектаВесь iOS-код нашего SDK, включающий в себя как код основного ViewController-а, так и код примера его использования, поставляется в исходном виде, а не в виде скомпилированной библиотеки. Вы можете использовать и менять его как захотите.
Для добавления нашего SDK в ваш проект требуется сделать следующие действия:
Готово! Структура вашего проекта по окончании может выглядеть так:
Основной класс обертки, с которым вы взаимодействуете, называется 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 [9], популярность которой сопоставима с популярностью знаменитой Лены [10] из статей по обработке изображений.
Автор: Smart Engines
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/256451
Ссылки в тексте:
[1] Smart Engines: http://smartengines.ru
[2] паспорта РФ: https://habrahabr.ru/company/smartengines/blog/252703/
[3] банковских карт: https://habrahabr.ru/company/smartengines/blog/272607/
[4] других: https://habrahabr.ru/company/smartengines/blog/322400/
[5] Эльбрус: https://habrahabr.ru/company/smartengines/blog/304750/
[6] https://github.com/SmartEngines/SmartIDReader-iOS-SDK: https://github.com/SmartEngines/SmartIDReader-iOS-SDK
[7] App Store: https://itunes.apple.com/ru/app/smart-idreader/id1157877082
[8] Google Play: https://play.google.com/store/apps/details?id=biz.smartengines.smartid
[9] Erika Mustermann: https://en.wikipedia.org/wiki/List_of_placeholder_names_by_language#German
[10] Лены: https://en.wikipedia.org/wiki/Lenna
[11] Источник: https://habrahabr.ru/post/329574/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.