Документация по Smart ID Engine SDK
Smart ID Engine — это многоплатформенный автономный SDK для распознавания и идентификации текстовых полей паспортов, виз и других документов, удостоверяющих личность.
Жизненный цикл
Жизненный цикл IdEngine состоит из следующих этапов:
- Создание движка распознавания.
- Создание сессии распознавания.
- Настройка сессии распознавания.
- Создание объекта изображения документа Image.
- Процесс распознавания.
- Разбор результата распознавания.
- Освобождение памяти.
Создание движка распознавания
Из Описания системы:
Движок распознавания — это объект, в котором хранятся и инициализируются все инструменты распознавания. Он создается на основе конфигурационного бандла, содержащего все возможные настройки: список документов, поддерживаемых конкретным SDK, их полей, список возможных проверок подлинности и так далее.
Примечание.
В особых случаях бандл может поставляться не отдельно, а в составе (внутри) библиотеки.
При создании данного объекта обычно указывается способ инициализации и путь до бандла (если он поставляется отдельно).
Инициализацию движка рекомендуется выполнять в единственном экземпляре. Один экземпляр позволяет создавать множество сессий распознавания.
Процесс инициализации является достаточно "тяжелой" операцией (как и сам анализ изображений), поэтому его следует выполнять вне потока пользовательского интерфейса.
Создайте экземпляр IdEngine
:
std::unique_ptr<se::id::IdEngine> engine(
se::id::IdEngine::Create(configuration_bundle_path));
import com.smartengines.id.*;
try {
// load library
System.loadLibrary("jniidengine");
IdEngine instance = IdEngine.Create(configuration_bundle_path, true);
} catch (Exception e) {
Log.e("SMARTENGINES", e.getMessage());
}
Параметры:
configuration_bundle_path
— путь к конфигурационному файлу (бандлу), в котором прописаны настройки idEngine (файл с расширением .se);- булевое значение, активация “ленивой” конфигурации (
true
по умолчанию). Необязательный параметр.
В каждую поставку включен один или несколько бандлов — архивов, содержащих необходимые настройки для создания объектов и конфигурирования Smart ID Engine.
Внимание!
IdEngine::Create()
является фабричным методом и и возвращает указатель на выделенный в памяти и инициализированный объект. За удаление этого объекта ответственен вызывающий.
Создание сессии распознавания
Создание объекта настроек сессии
Из Описания системы:
Настройки сессии — это объект, в котором хранится:
- список поддерживаемых документов для распознавания, сгруппированных по внутренним движкам. Их состав задается в конфигурационном бандле, с которым был создан движок (только чтение);
- список документов, переданных на распознавание (по умолчанию —
*
); - специальные опции сессии: количество потоков для распознавания и прочее. Полный список можно найти в документации.
Создайте объект IdSessionSettings на основе сконфигурированного экземпляра IdEngine:
std::unique_ptr<se::id::IdSessionSettings> settings(engine->CreateSessionSettings());
import com.smartengines.id.*;
IdSessionSettings settings = engine.CreateSessionSettings();
Внимание!
IdEngine::CreateSessionSettings()
является фабричным методом и и возвращает указатель на выделенный в памяти и инициализированный объект. За удаление этого объекта ответственен вызывающий.
Включение типов документов
Тип документа представляет собой строку (string), описывающую физический документ, который необходимо распознать.
Каждый тип документа, передаваемый системе, сопоставляется со всеми поддерживаемыми типами. Если определённый тип поддерживается, он добавляется в список распознаваемых документов.
Например, тип deu.passport.type1 соответствует маске deu.*, *passport* и просто символу *
.
// Включение в процесс распознавания всех поддерживаемых документов Германии
settings->AddEnabledDocumentTypes("deu.*");
// Включение в процесс распознавания всех поддерживаемых документов Германии
settings.AddEnabledDocumentTypes("deu.*");
Для исключения типов документов из процесса распознавания, пользуйтесь методом RemoveEnabledDocumentTypes(...)
.
Рекомендация.
Для повышения качества обработки, укажите минимальное количество распознаваемых типов документов
Поддерживаемые типы документов
Для получения типов документов, которые Smart ID Engine SDK может распознать, выполните процедуру:
// Прохождение по циклу найденных внутренних движков
for (auto engine_it = settings->InternalEngineNamesBegin();
engine_it != settings->InternalEngineNamesEnd();
++engine_it) {
// Прохождение по циклу найденных типов документов, поддерживаемых движком
for (auto it = settings->SupportedDocumentTypesBegin(engine_it.GeValue());
it != settings->SupportedDocumentTypesEnd(engine_it.GetValue());
++it) {
// метод it.GetValue() возвращает тип документов внутри
// движка engine_it.GetValue()
}
}
// Прохождение по циклу найденных внутренних движков
for (StringsSetIterator engine_it = settings.InternalEngineNamesBegin();
!engine_it.Equals(settings.InternalEngineNamesEnd());
engine_it.Advance()) {
// Прохождение по циклу найденных типов документов, поддерживаемых движком
for (StringsSetIterator it = settings.SupportedDocumentTypesBegin(engine_it.GeValue());
!it.Equals(settings.SupportedDocumentTypesEnd(engine_it.GetValue()));
it.Advance()) {
// метод it.GetValue() возвращает тип документов внутри движка engine_it.GetValue()
}
}
Режим (Mode)
Из Описания системы:
Для Smart ID Engine:
- расширенная информация о документах в том числе ссылки на PRADO (только чтение и только для Smart ID Engine);
- список ожидаемых полей для распознавания (по умолчанию все);
- список наборов документов (Параметр
mode
. По умолчанию —default
);
Внутренние движки — это группы документов, организованные таким образом, чтобы алгоритм их поиска и распознавания работал максимально эффективно.
Список документов для распознавания формируется в рамках конфигурационного бандла. Внутри него документы могут быть сгруппированы, например, в следующие внутренние движки:
- все документы одной страны;
- паспорта всех стран;
- все документы, удостоверяющие личность, стран СНГ и так далее.
В бандлах могут пересекаться множества документов, находящихся в различных внутренних движках. Если в настройках сессии указаны такие документы для поиска, система не сможет самостоятельно определить, какой внутренний движок выбрать.
Для решения этой проблемы каждый внутренний движок имеет параметр "режим" (mode). Указав этот параметр вместе со списком ожидаемых для распознавания документов, вы сможете успешно создать сессию.
Внимание!
Указание нескольких типов документов за одну сессию возможно только в том случае, если они принадлежат к одному внутреннему движку
. Другими словами, одна сессия распознавания может работать только с одним внутренним движком.
Данные о внутренних движках, их составе и режимах содержатся в настройках сессии, а также в документации к каждому конкретному SDK.
Воспользуйтесь методом IdSessionSettings
для получения списка доступных режимов в пакете конфигурации:
for (auto it = settings->SupportedModesBegin();
it != settings->SupportedModesEnd(); ++it) {
// it.GetValue() имя поддерживаемого режима
}
for (StringsSetIterator it = settings.SupportedModesBegin();
!it.Equals(settings.SupportedModesEnd());
it.Advance()) {
// it.GetValue() имя поддерживаемого режима
}
По умолчанию используется режим default
. Для получения текущего режима и установки нового, используйте методы:
std::string current_mode = settings->GetCurrentMode();
// Устанавливает режим AnyPassport
settings->SetCurrentMode("anypassport");
String current_mode = settings.GetCurrentMode();
// Устанавливает режим AnyPassport
settings.SetCurrentMode("anypassport");
Доступны следующие режимы распознавания:
Режим | Типы распознаваемых документов |
---|---|
anydoc | все документы, удостоверяющие личность |
anypassport | международные паспорта всех стран |
anyid | удостоверения личности всех стран |
anydrvlic | водительские права всех стран |
singleshot
- можно использовать режим для распознавания одного кадра. В мобильных сборках рекомендуется применять его для распознавания изображений из галереи.
Режим singleshot
можно использовать также для any
режимов, например anydoc-singleshot
или anypassport-singleshot
. Режим singleshot
более требователен к ресурсам, но более устойчив к различным немобильным вариантам использования.
Типы распознаваемых документов можно переопределять.
Настройка сессии распознавания
Каждой сессии распознавания можно задать определенный набор параметров с помощью методов класса IdSessionSettings
.
Для получения имен параметров и их значений, выполните следующую процедуру:
for (auto it = settings->OptionsBegin();
it != settings->OptionsEnd();
++it) {
// it.GetKey() возвращает имя параметра
// it.GetValue() возвращает значение параметра
}
for (StringsMapIterator it = settings.OptionsBegin();
!it.Equals(settings.OptionsEnd());
it.Advance()) {
// it.GetKey() возвращает имя параметра
// it.GetValue() возвращает значение параметра
}
Для изменения значений параметров, воспользуйтесь методом SetOption(...)
:
settings->SetOption("common.extractTemplateImages", "true"); // Получение изображений шаблона
settings->SetOption("common.sessionTimeout", "3.0");
settings.SetOption("common.extractTemplateImages", "true"); // Получение изображений шаблона
settings.SetOption("common.sessionTimeout", "3.0");
Инициализация сессии
Из Описания системы:
При поставке продукта клиенту передается персональная подпись. Она содержится в файле README.html в директории /doc.
Каждый раз при создании экземпляра сессии распознавания подпись необходимо передавать в качестве одного из аргументов. Это подтверждает право вызывающего на использование библиотеки и разблокирует ее.
Проверка подписи осуществляется в оффлайн режиме. Библиотека не обращается ни к каким внешним ресурсам.
Инициализируйте сессию (объект IdSession):
const char* signature = "... YOUR SIGNATURE HERE ..."; //Подпись, используемая для запуска сессии распознавания Smart ID Engine
std::unique_ptr<se::id::IdSession> session(
engine->SpawnSession(*settings, signature, &my_feedback));
import com.smartengines.id.*;
String signature = "... YOUR SIGNATURE HERE ..."; //Подпись, используемая для запуска сессии распознавания Smart ID Engine
IdSession session = engine.SpawnSession(settings, signature, my_feedback);
Создание объекта Image
Из Описания системы:
Для работы распознавания системе необходимо передать изображение специального класса se.common.image
. Создать его можно из следующих форматов:
Поддерживаемые форматы:
- jpeg, png;
- tiff (✔️TIFF_LZW, ✔️TIFF_PACKBITS,✔️TIFF_CCITT);
- base64 (форматы из пунктов выше);
- файловый буфер с предварительным указанием цветовой схемы, ширины\высоты\количества каналов.
Максимальный допустимый размер изображения по умолчанию — 15000x15000px. Предельный размер изображения может быть увеличен пользователем.
Работа с HEIC
Работа с HEIC в мобильных SDK не отличается от работы с другими форматами изображений. Чтение HEIC осуществляется системными средствами.
В серверных SDK необходимо самостоятельно открыть HEIC формат сторонними средствами и конвертировать либо в один из поддерживаемых нами форматов, либо передать непосредственно сырые пиксели в виде RGB буфера (рекомендуется).
Создайте объект изображения (Image
) для последующей обработки:
std::unique_ptr<se::common::Image> image(
se::common::Image::FromFile(image_path)); // Загрузка из файла
import com.smartengines.common.*;
Image image = Image.FromFile(image_path);
Справка
Для передачи любых изображений в движок необходим объект класса se.common.Image
.
Список актуальных методов:
Image.FromFile(imagePath)
— принимает локальный путь к файлу;Image.FromFileBuffer(data)
— принимает прочитанный в буфер файл;Image.FromBase64Buffer(data)
— принимает прочитанный в буфер файл, обернутый в base64;Image.FromBufferExtended(raw_data, width, height, stride, pixel_format, bytes_per_channel)
— эффективный способ создать объектImage
из сырых пикселей;Image.FromYUV(planeY, planeU, planeV, yuvDimensions)
— позволяет создатьImage
из YUV_420_888.
Внимание!
Image::FromFile()
является фабричным методом и и возвращает указатель на выделенный в памяти и инициализированный объект. За удаление этого объекта ответственен вызывающий.
Процесс распознавания
Вызовите метод Process(...)
для обработки изображения документа:
const se::id::IdResult& result = session->Process(image);
import com.smartengines.id.*;
IdResult result = session.Process(image);
Для работы с видео потоком следует передавать серию изображений в цикле:
Выход из цикла осуществляется автоматически благодаря механизму терминальности.
Из Описания системы:
Сессия распознавания — процесс распознавания физического документа, например, конкретного паспорта, водительских прав и так далее.
Под процессом распознавания физического документа подразумевается работа с одним или серией изображений одного и того же документа.
Система может распознать документ с высокой точностью и по одному изображению, однако, использование результатов распознавания нескольких изображений приводит к существенному повышению качества. Система комбинирует результаты распознавания, поступившие из разных кадров. Это позволяет уверенно распознавать документы в условиях плохого освещения, наличия бликов и других неблагоприятных факторов. Механизм, который принимает решение о необходимости распознавания дополнительных кадров или остановке процесса называется терминальностью.
Терминальность — автоматическая остановка процесса распознавания в видеопотоке. Принимает значение true
в двух случаях:
- добавление новых кадров не приведёт к изменению результата распознавания;
- исчерпалось ограничение времени сессии, заданное в настройках.
Сессия распознавания создается с заранее подготовленными настройками. Сессии независимы друг от друга, что позволяет использовать несколько сессий одновременно при необходимости (как с одинаковыми, так и с разными настройками).
Внимание!
Image::FromFile()
не фабричный метод. Возвращаемый объект IdResult не является независимым, его срок жизни не превышает срок жизни объекта IdSession.
Разбор результата распознавания
Из Описания системы:
Результат распознавания — это объект интерфейса, содержащий всю доступную информацию о результате работы системы распознавания. Каждый параметр выводится с помощью отдельного метода, что позволяет при встраивании оперировать только необходимыми данными. Состав полей в объекте зависит от типа сессии, в которой выполнялось распознавание, а тип сессии зависит от функционала используемого продукта.
При работе с видео потоком обрабатывайте кадры последовательно в рамках одной и той же сессии. Время обработки не ограничено, но рекомендуется выполнять обработку до получения значения true
параметра result.GetIsTerminal()
.
Значения текстовых полей объекта IdResult
содержат информацию о результатах распознавания:
// Текстовые результаты
for (auto it = result.TextFieldsBegin(); it != result.TextFieldsEnd(); ++it) {
const se::id::IdTextField& field = it.GetValue();
bool is_accepted = field.GetBaseFieldInfo().GetIsAccepted(); // Получение значения флага is_accepted
std::string field_value = field.GetValue().GetFirstString().GetCStr(); // Получение результата распознавания поля в виде строки в кодировке UTF-8
}
// Изображения
for (auto it = result.ImageFieldsBegin(); it != result.ImageFieldsEnd(); ++it) {
const se::id::IdImageField& field = it.GetValue();
const se::common::Image& image = field.GetValue();
}
import com.smartengines.id.*;
// Текстовые результаты
for (IdTextFieldsMapIterator it = result.TextFieldsBegin();
!it.Equals(result.TextFieldsEnd());
it.Advance()) {
IdTextField field = it.GetValue();
boolean is_accepted = field.GetBaseFieldInfo().GetIsAccepted(); // Получение значения флага is_accepted
String field_value = field.GetValue().GetFirstString().GetCStr(); // Получение результата распознавания поля в виде строки в кодировке UTF-8
}
// Изображения
for (IdImageFieldsMapIterator it = result.ImageFieldsBegin();
!it.Equals(result.ImageFieldsEnd());
it.Advance()) {
IdImageField field = it.GetValue();
Image image = field.GetValue();
}
В качестве критерия для проверки наличия результата после завершения (терминальности) сессии рекомендуется использовать метод result.GetDocumentType()
. Возвращаемое значение доступно на протяжении всей сессии, при условии, что распознавание выполнялось хотя бы один раз.
Для анализа промежуточных результатов распознавания рекомендуется использовать метод result.GetTemplateDetectionResulsCount()
, поскольку он позволяет определить наличие документа в текущем кадре.
Обратные вызовы
Из Описания системы:
Распознавание в видеопотоке — это сложный и зачастую не мгновенный процесс, который требует взаимодействия с пользователем. Предоставляя информацию о ходе распознавания на экране в процессе работы, мы помогаем пользователю лучше понять этапы функционирования системы. Именно поэтому технологии машинного зрения часто дополняются элементами дополненной реальности, что улучшает пользовательский опыт и делает взаимодействие более интуитивным.
В объекте результата распознавания находится информация о координатах четырехугольника шаблона документа (границы документа) и координаты четырехугольников шаблонов полей документа. По этим координатам, например, можно отрисовать границы найденного документа на экране с превью камеры.
Smart ID Engine SDK поддерживает дополнительные обратные вызовы во время анализа документов до завершения их обработки — метода Process(...)
. Это позволяет пользователю получать больше информации о базовом процессе распознавания, а также помогает создавать интерактивный графический интерфейс.
Для поддержки обратной связи, создайте подкласс класса IdFeedback
и реализуйте необходимые методы:
class MyFeedback : public se::id::IdFeedback {
public:
virtual ~OptionalFeedback() override = default;
public:
virtual void FeedbackReceived(
const se::id::IdFeedbackContainer& /*feedback_container*/) override { }
virtual void TemplateDetectionResultReceived(
const se::id::IdTemplateDetectionResult& result) override { }
virtual void TemplateSegmentationResultReceived(
const se::id::IdTemplateSegmentationResult& /*result*/) override { }
virtual void ResultReceived(const se::id::IdResult& result) override { }
virtual void SessionEnded() override { }
};
import com.smartengines.id.*;
class MyFeedback extends IdFeedback {
public void FeedbackReceived(IdFeedbackContainer feedback_container) { }
public void TemplateDetectionResultReceived(IdTemplateDetectionResult result) { }
public void TemplateSegmentationResultReceived(IdTemplateSegmentationResult result) { }
public void ResultReceived(IdResult result) { }
public void SessionEnded() { }
}
Пользуйтесь методами TemplateDetectionResultReceived(...)
и TemplateSegmentationResultReceived(...)
для отображения зон документа и границ полей в графическом интерфейсе во время распознавания видеопотока в реальном времени.
Создайте экземпляр класса MyFeedback
и передайте его при инициализации сессии:
MyFeedback my_feedback;
std::unique_ptr<se::id::IdSession> session(
engine->SpawnSession(*settings, signature, &my_feedback));
import com.smartengines.id.*;
MyFeedback my_feedback = new MyFeedback();
IdSession session = engine.SpawnSession(settings, signature, my_feedback);
Освобождение памяти
Указать примеры удаления всех объектов, не только движка
Несмотря на то, что сборка мусора присутствует и работает, рекомендуется вызывать метод obj.delete()
для наших объектов API вручную, поскольку они являются обертками памяти, выделенной в куче. Размер их кучи неизвестен сборщику мусора, что может привести к задержке удаления объектов и, следовательно, высокому общему потреблению памяти.
IdEngine engine = IdEngine.Create(config_path); // или любой другой объект
// ...
engine.delete(); // гарантирует принудительное и немедленное освобождение обернутого объекта C++
Некоторые классы Smart ID Engine SDK содержат фабричные методы, возвращающие указатели на объекты, выделенные в куче. Такие объекты необходимо удалять.
Рекомендации.
в C++:
Для простоты управления памятью и предотвращения ее утечек пользуйтесь умными указателямиstd::unique_ptr<T>
илиstd::shared_ptr<T>
.в Java API:
Удаляйте ненужные объекты с помощью метода.delete()
.
Особенности JNI интерфейса
Следует иметь ввиду особенности интеграции с Java.
Smart ID Engine SDK включает в себя JNI интерфейс, автоматически генерируемый из интерфейса C++ с помощью инструмента SWIG.
Внимание
Java Native Interface (JNI) — стандартный механизм для запуска кода под управлением Java, который написан на языках C/C++ и скомпонован в виде динамических библиотек.
Любой объект, возвращаемый функцией JNI (это все методы нашей обертки), является локальной ссылкой, которая действительна в течении всего времени собственного метода в текущем потоке. При этом наш движок продолжает существовать глобально.
При неправильном использовании методов обертки с большой вероятностью вы будете получать Null Pointer Exception
в разные моменты времени работы приложения. Семпл в нашем SDK следует правилам использования JNI функций.
Подробнее о работе с JNI: https://developer.android.com/training/articles/perf-jni#java
При использовании вспомогательного объекта обратной связи с помощью подкласса IdFeedback
, убедитесь, что его экземпляр имеет ту же область видимости, что и IdSession
. Причина этого в том, что наш API не содержит указатель на экземпляр объекта обратной связи. В результате, сборка мусора выполняется преждевременно, что приводит к сбою.
// Недостаток: может повлечь преждевременное удаление сборщиком мусора экземпляра объекта обратной связи (feedback)
class MyDocumentRecognizer {
private IdEngine engine;
private IdSession session;
private void InitializeSmartIdEngine() {
// ...
session = engine.SpawnSession(settings, signature, new MyFeedback());
// объект обратной связи (feedback) мoжет быть удален сборщиком мусора, т.к. объект \- вне сессии
}
}
// Преимущество: доступ к сессии распознавания
class MyDocumentRecognizer {
private IdEngine engine;
private IdSession session;
private MyGeedback feedback; // feedback has session's scope
private void InitializeSmartIdEngine() {
// ...
feedback = new MyFeedback();
session = engine.SpawnSession(settings, signature, feedback);
}
}
Интерфейс библиотеки
Общие классы
Общие классы, например, Point
, OcrString
, Image
и т.д., находятся в пространстве имен se::common
в директории secommon.
Это следующие заголовочные файлы C++:
Заголовочный файл | Описание |
---|---|
<secommon/se_export_defs.h> | Содержит определения экспорта в библиотеках Smart Engines |
<secommon/se_exceptions_defs.h> | Содержит определения исключений в библиотеках Smart Engines |
<secommon/se_geometry.h> | Содержит классы и процедуры, описывающие геометрию (Point , Rectangle , и т.п..) |
<secommon/se_image.h> | Содержит классы и процедуры обработки изображений |
<secommon/se_string.h> | Содержит классы строк (MutableString , OcrString , и т.д.) |
<secommon/se_string_iterator.h> | Содержит определение итераторов строк |
<secommon/se_serialization.h> | Содержит вспомогательные классы, связанные с сериализацией объектов (не используется в Smart ID Engine) |
<secommon/se_common.h> | Вспомогательный заголовок, который включает в себя все вышеперечисленное. |
Аналогичные Java API содержатся в модуле com.smartengines.common:
import com.smartengines.common.*; // Импорт классов пакета se::common classes
Основные классы
Основные классы Smart ID Engine содержатся в пространстве имен se::id
в директории idengine:
Заголовочный файл | Описание |
---|---|
<idengine/id_document_info.h> | Предоставляет информацию о типе документа (текстовое описание документа) |
<idengine/id_engine.h> | Содержит класс IdEngine |
<idengine/id_session_settings.h> | Содержит определение класса IdSessionSettings |
<idengine/id_ session.h> | Содержит определение класса IdSession |
<idengine/id_result.h> | Содержит определение класса IdResult , IdTemplateDetectionResult и IdTemplateSegmentationResult |
<idengine/id_fields.h> | Содержит определения классов, описывающий поля Smart ID Engine |
<idengine/id_feedback.h> | Содержит интерфейс обратной связи IdFeedback и связанные с ним контейнеры |
<idengine/id_face_feedback.h> | Содержит интерфейс IdFaceFeedback |
<idengine/id_face_session_settings.h> | Содержит определение класса IdFaceSessionSettings |
<idengine/id_face_session.h> | Содержит определение класса IdFaceSession |
<idengine/id_face_result.h> | Содержит классы, описывающие результат распознавания лица |
<idengine/id_field_processing_session_settings.h> | Содержит определение класса IdFieldProcessingSessionSettings |
<idengine/id_field_processing_session.h> | Содержит определение сессии обработки вспомогательных полей |
<idengine/id_file_analysis_session.h> | Сессия проверки изображения на наличие аномалий |
<idengine/id_file_analysis_session_settings.h> | Настройки сессии проверки изображения на наличие аномалий |
Аналогичные классы Java API содержатся в модуле com.smartengines.id:
import com.smartengines.id.*; // Импорт всех классов se::id classes
Обработка исключений
C++ API может выдавать исключения подклассов se::common::BaseException
при неверном вводе данных, некорректных вызовах и других ошибках.
Поддерживаются следующие подклассы исключений:
Исключение | Описание |
---|---|
FileSystemException | Выдается при попытке чтения из несуществующего файла или другой ошибке ввода-вывода, связанной с файловой системой |
InternalException | Выдается, если возникает неизвестная ошибка или ошибка возникает во внутренних компонентах системы |
InvalidArgumentException | Выдается, если метод вызывается с недопустимыми входными параметрами |
InvalidKeyException | Выдается при попытке доступа к ассоциативному контейнеру о с недействительным или несуществующим ключом или доступа к списку с недопустимым индексом или индексом, выходящим за пределы допустимого диапазона |
InvalidStateException | Выдается, если в системе возникает ошибка из-за неправильного внутреннего состояния системных объектов |
MemoryException | Выдается при попытке выделения объектов при недостаточном объеме оперативной памяти |
NotSupportedException | Выдается при попытке доступа к методу, который с учетом текущего состояния или переданных аргументов не поддерживается в текущей версии библиотеки или не поддерживается вообще |
Uninitialized Object Exception | Выдается при попытке доступа к несуществующему или неинициализированному объекту |
При возникновении исключений, выводятся сообщения, понятные пользователю, с помощью метода e.what()
.
Примечание.
se::common::BaseException
не является подклассом std::exception
. Интерфейс Smart ID Engine не имеет зависимостей от STL.
Оберткой для исключений Java API является общий класс java.lang.Exception
.
Тип исключения включен в текст сообщения.