Smart Code Engine — это многоплатформенный автономный SDK для распознавания линейных и двухмерных штрихкодов, МЧЗ, номеров банковских карт и телефонных номеров и других кодифицированных объектов.
Поддерживаются следующие операционные системы:
Жизненный цикл CodeEngine состоит из следующих этапов:
Создайте экземпляр CodeEngine:
// C++
std::unique_ptr<se::code::CodeEngine> engine(
se::code::CodeEngine::CreateFromEmbeddedBundle());
// Java
import com.smartengines.code.*;
CodeEngine engine = CodeEngine.CreateFromEmbeddedBundle();
Параметры:
ПОДСКАЗКА
Отключите “ленивую” конфигурацию в следующих случаях:
• при работе с серверными приложениями, для которых время отклика первого распознавания приоритетней общего потребления памяти;
• для измерения максимального объема памяти, используемой приложением
Конфигурирование может занять значительное время, но его достаточно выполнить один раз за жизненный цикл.
Сконфигурированный экземпляр объекта CodeEngine используется для инициализации сессий распознавания – создания экземпляров объекта CodeEngineSession, содержащего методы распознавания.
ВНИМАНИЕ!
CodeEngine::CreateFromEmbeddedBundle() является фабричным методом и возвращает указатель на выделенный в памяти объект, который следует удалить
Создайте объект CodeEngineSessionSettings на основе сконфигурированного экземпляра CodeEngine:
// C++
std::unique_ptr<se::code::CodeEngineSessionSettings> settings(
engine->GetDefaultSessionSettings());
// Java
import com.smartengines.code.*;
CodeEngineSessionSettings settings = engine.GetDefaultSessionSettings();
ВНИМАНИЕ!
CodeEngine::GetDefaultSessionSettings() является фабричным методом и возвращает указатель на выделенный в памяти объект, который следует удалить
Настройте движок распознавания:
// C++
settings->SetOption("barcode.enabled", "true"); // Включение распознавания штрихкодов в текущей сессии
// Java
settings.SetOption("barcode.enabled", "true"); // Включение распознавания штрихкодов в текущей сессии
Необязательный этап.
Задайте дополнительные параметры сессии:
// C++
settings->SetOption("barcode.COMMON.enabled", "true"); // Включение распознавания наиболее часто используемых символик штрихкодов в текущей сессии
// Java
settings.SetOption("barcode.COMMON.enabled", "true"); // Включение распознавания наиболее часто используемых символик штрихкодов в текущей сессии
Возможные параметры приведены в разделе Параметры сессии распознавания.
При поставке продукта Smart Code Engine клиенту передается персональная подпись. Она содержится в файле README.html в директории /doc.
Каждый раз при создании экземпляра сессии распознавания CodeEngineSession подпись необходимо передавать в качестве одного из аргументов функции создания сессии.
Это подтверждает право вызывающего на использование библиотеки и разблокирует ее.
Проверка подписи осуществляется в оффлайн режиме. Библиотека не обращается ни к каким внешним ресурсам.
Инициализируйте сессию (объект CodeEngineSession):
// C++
const char* signature = "... YOUR SIGNATURE HERE ..."; //Подпись, используемая для запуска Smart Code Engine
std::unique_ptr<se::code::CodeEngineSession> session(
engine->SpawnSession(*settings, signature, &my_workflow_feedback, &my_visualization_feedback));
// Java
import com.smartengines.code.*;
String signature = "... YOUR SIGNATURE HERE ..."; //Подпись, используемая для запуска Smart Code Engine
CodeEngineSession session = engine.SpawnSession(
settings, signature, my_workflow_feedback, my_visualization_feedback);
ВНИМАНИЕ!
CodeEngine::SpawnSession() является фабричным методом и возвращает указатель на выделенный в памяти объект, который следует удалить
Можно настроить обратные вызовы. Для этого используйте подклассы CodeEngineWorkflowFeedback и CodeEngineVisualizationFeedback:
// C++
class MyWorkflowFeedback : public se::code::CodeEngineWorkflowFeedback { /* callbacks */ };
class MyVisualizationFeedback : public se::code::CodeEngineVisualizationFeedback { /* callbacks */ };
// ...
MyWorkflowFeedback my_workflow_feedback;
MyVisualizationFeedback my_visualization_feedback;
// Java
import com.smartengines.code.*;
class MyWorkflowFeedback extends CodeEngineWorkflowFeedback { /* callbacks */ }
class MyVisualizationFeedback extends CodeEngineVisualizationFeedback { /* callbacks */ }
// ...
MyWorkflowFeedback my_workflow_feedback = new MyWorkflowFeedback();
>
MyVisualizationFeedback my_visualization_feedback = new MyVisualizationFeedback();
CodeEngineSession session = engine.SpawnSession(
settings, signature, my_workflow_feedback, my_visualization_feedback);
Обратные вызовы подробно описаны в разделе Обработка обратной связи.
Создайте объект настроек обработки изображения (Image) для последующей обработки:
// C++
std::unique_ptr<se::common::Image> image(
se::common::Image::FromFile(image_path)); // Загрузка из файла
// Java
import com.smartengines.code.*;
Image image = Image.FromFile(image_path);
ВНИМАНИЕ!
Image::FromFile() является фабричным методом и возвращает указатель на выделенный в памяти объект, который следует удалить
Вызовите метод Process(…) для обработки изображения:
// C++
const se::code::CodeEngineResult& result = session->Process(*image);
// Java
import com.smartengines.code.*;
CodeEngineResult result = session.Process(image);
ВНИМАНИЕ!
CodeEngineResult::Process() не фабричный метод, но возвращаемый объект result не является независимым. Срок его жизни не превышает срок жизни объекта session
При работе с видеопотоком обрабатывайте кадры последовательно в рамках одной и той же сессии. Время обработки не ограничено, но рекомендуется выполнять обработку до получения значения true параметра result.GetIsTerminal().
Значения текстовых полей объекта CodeEngineResult содержат информацию о результатах распознавания:
// C++
for (auto it_obj = result.ObjectsBegin(); it_obj != result.ObjectsEnd(); ++it_obj) {
const se::code::CodeObject& code_object = it_obj.GetValue();
std::string object_type = code_object.GetTypeStr(); // Тип объекта в формате строки
bool is_accepted = code_object.IsAccepted(); // Получение значения флага is_accepted
for (auto it_field = code_object.FieldsBegin();
it_field != code_object.FieldsEnd(); ++it_field) {
const se::code::CodeField &code_field = it_field.GetValue();
std::string code_field_name = code_field.Name(); // Имя поля
if (code_field.HasOcrStringRepresentation())
std::string ocr_string = code_field.GetOcrString()
.GetFirstString()
.GetCStr(); // Получение результата распознавания поля в виде строки в кодировке UTF-8
}
}
// Java
import com.smartengines.code.*;
for (CodeObjectsMapIterator it_obj = result.ObjectsBegin();
!it_obj.Equals(result.ObjectsEnd()); it_obj.Advance()) {
CodeObject code_object = it_obj.GetValue();
String object_type = code_object.GetTypeStr(); // Тип объекта в формате строки
boolean is_accepted = code_object.IsAccepted(); // Получение значения флага is_accepted
for (CodeFieldsMapIterator it_field = code_object.FieldsBegin();
!it_field.Equals(code_object.FieldsEnd()); it_field.Advance()) {
CodeField code_field = it_field.GetValue();
String code_field_name = code_field.Name(); // Имя поля
if (code_field.HasOcrStringRepresentation())
String ocr_string = code_field.GetOcrString().GetFirstString().GetCStr(); // Получение результата распознавания поля в виде строки в кодировке UTF-8
}
Состав базового пакета поставки Smart Code Engine:
Структура директорий:
Директория | Содержимое | Описание |
---|---|---|
secommon | Файлы пространств имен C++ se::common namespace files | Общие классы, например, Point, OcrString, Image, и т.д. См. Общие классы |
Файлы интеграции, например, модуль, Java com.smartengines.rumon (скомпилирован в один файл) | ||
codeengine | C++ se::code namespaces | Основные классы — Main. См. Основные классы |
Файлы интеграции, например, модуль Java com.smartengines.code module (скомпилирован в один файл) | ||
doc | Документация | См. Документация |
samples | Полностью скомпилированный и готовый к использованию тестовый пример |
Общие классы, например, Point, OcrString, Image и т.д., находятся в пространстве имен se::common в директории secommon.
Это следующие заголовочные файлы C++:
Заголовочный файл | Описание |
#include <secommon/se_export_defs.h> | Содержит определения экспорта в библиотеках Smart Engines |
#include <secommon/se_exceptions_defs.h> | Содержит определения исключений в библиотеках Smart Engines |
#include <secommon/se_geometry.h> | Содержит классы и процедуры, описывающие геометрию (Point, Rectangle, и т.п.) |
#include <secommon/se_image.h> | Содержит классы и процедуры обработки изображений |
#include <secommon/se_string.h> | Содержит классы строк (MutableString, OcrString, и т.д.) |
#include <secommon/se_string_iterator.h> | Содержит определение итераторов строк |
#include <secommon/se_serialization.h> | Содержит вспомогательные классы, связанные с сериализацией объектов (не используется в Smart Code Engine) |
#include <secommon/se_common.h> | Вспомогательный заголовок, который включает в себя все вышеперечисленное. |
Аналогичные Java API содержатся в модуле com.smartengines.rumon:
// Java
import com.smartengines.rumon.*; // Импорт классов пакета se::common classes
Основные классы (main) Code Engine содержатся в пространстве имен se::code в директории codeengine directory:
Заголовочный файл | Описание |
---|---|
#include <codeengine/code_engine.h> | Содержит класс CodeEngine |
#include <codeengine/code_engine_session.h> | Содержит определение класса CodeEngineSession |
#include <codeengine/code_engine_session_settings.h> | Содержит определение класса CodeEngineSessionSettings |
#include <codeengine/code_engine_result.h> | Содержит определение класса CodeEngineResult |
#include <codeengine/code_engine_feedback.h> | Содержит определение классов CodeEngineWorkflowFeedback и CodeEngineVisualizationFeedback и связанные с ними контейнеры |
#include <codeengine/code_object_field.h> | Содержит определение класса CodeField |
#include <codeengine/code_object.h> | Содержит определение класса CodeObject |
Аналогичные классы Java API содержатся в модуле com.smartengines.code:
// Java
import com.smartengines.codeengine.*; // Импорт всех классов se::code
Все классы, методы, их параметры и значения параметров описаны в комментариях к коду, а также в справочном руководстве codeengine.pdf, содержащемся в папке с документацией.
Вся документация содержится в папке doc. Структура папки doc:
C++ API может выдавать исключения подклассов se::common::BaseException при неверном вводе данных, некорректных вызовах и других ошибках. Поддерживаются следующие подклассы исключений:
Исключение | Описание |
---|---|
FileSystemException | Выдается при попытке чтения из несуществующего файла или другой ошибке ввода-вывода, связанной с файловой системой |
InternalException | Выдается, если возникает неизвестная ошибка или ошибка возникает во внутренних компонентах системы. |
InvalidArgumentException | Выдается, если метод вызывается с недопустимыми входными параметрами |
InvalidKeyException | Выдается при попытке доступа к ассоциативному контейнеру о с недействительным или несуществующим ключом или доступа к списку с недопустимым индексом или индексом, выходящим за пределы допустимого диапазона |
InvalidStateException | Выдается, если в системе возникает ошибка из-за неправильного внутреннего состояния системных объектов |
MemoryException | Выдается при попытке выделения объектов при недостаточном объеме оперативной памяти. |
NotSupportedException | Выдается при попытке доступа к методу, который с учетом текущего состояния или переданных аргументов не поддерживается в текущей версии библиотеки или не поддерживается вообще |
Uninitialized Object Exception | Выдается при попытке доступа к несуществующему или неинициализированному объекту |
При возникновении исключений, выводятся сообщения, понятные пользователю, с помощью метода e.what().
Примечание
se::common::BaseException не является подклассом std::exception. Интерфейс Smart Code Engine не имеет зависимостей от STL
Оберткой для исключений Java API является общий класс java.lang.Exception. Тип исключения включен в текст сообщения.
При возникновении проблем, свяжитесь с нашей техподдержкой: sales@smartengines.ru or support@smartengines.ru.
Некоторые классы Smart Code Engine SDK содержат фабричные методы, возвращающие указатели на объекты, выделенные в куче. Необходимо удалять такие объекты.
ПОДСКАЗКА
В C++:
Для простоты управления памятью и предотвращения ее утечек пользуйтесь умными указателями std::unique_ptr<T> или std::shared_ptr<T> .
В Java API:
Удаляйте ненужные объекты с помощью метода .delete()
Движок распознает штрихкоды в определенном наборе кадров. По умолчанию эта функция отключена. Для ее включения, установите соответствующий параметр сессии:
// C++
settings->SetOption("barcode.enabled", "true");
// Java
settings.SetOption("barcode.enabled", "true");
ВНИМАНИЕ!
По умолчанию все символики штрихкодов исключены из процесса распознавания
Для включения символики в процесс распознавания, установите значения параметров:
// C++
settings->SetOption("barcode.<symbology>.enabled", "true");
// Java
settings.SetOption("barcode.<symbology>.enabled", "true");
Наборы поддерживаемых символик представлены в таблице:
Название | Символики штрихкодов | Описание |
COMMON | AZTEC | QR_CODE | DATA_MATRIX | PDF_417 | CODABAR | CODE_128 | EAN_8 | EAN_13_UPC_A | ITF | UPC_E | CODE_39 | CODE_93 | Наиболее часто используемые символики. Могут подключаться по отдельности |
ALL | AZTEC | QR_CODE | MICRO_QR | RMQR | DATA_MATRIX | PDF_417 | MICRO_PDF_417 | CODABAR | CODE_128 | EAN_8 | EAN_13_UPC_A | ITF | UPC_E | CODE_39 | CODE_93 | Все поддерживаемые символики. Могут подключаться по отдельности |
ALL_1D | CODABAR | CODE_128 | EAN_8 | EAN_13_UPC_A | ITF | UPC_E | CODE_39 | CODE_93 | Одномерные штрихкоды. Могут подключаться по отдельности |
ALL_2D | AZTEC | QR_CODE | MICRO_QR | RMQR | DATA_MATRIX | PDF_417 | MICRO_PDF_417 | Двумерные штрихкоды. Могут подключаться по отдельности |
Для включения набора штрихкодов COMMON в процесс распознавания:
// C++
settings->SetOption("barcode.COMMON.enabled", "true");
// Java
settings.SetOption("barcode.COMMON.enabled", "true");
Для включения набора штрихкодов ALL в процесс распознавания:
// C++
settings->SetOption("barcode.ALL.enabled", "true");
// Java
settings->SetOption("barcode.ALL.enabled", "true");
ВНИМАНИЕ!
Рекомендуется включать в процесс распознавания только необходимые символики для достижения максимальной производительности и качества распознавания
Результат распознавания содержит два поля:
Существует три основных сценария распознавания штрихкодов:
ВНИМАНИЕ!
Для платежных штрихкодов рекомендуется установить параметры: включение символик QR, Aztec и DataMatrix в процесс распознавания, режим распознавания “focused”, max code =1 — ограничение максимально возможного количества распознаваемых штрихкодов единицей
Для включения необходимого режима установите соответствующий параметр сессии:
// C++
settings->SetOption("barcode.roiDetectionMode", "focused");
// Java
settings.SetOption("barcode.roiDetectionMode", "focused");
По умолчанию установлен “одиночный” режим подачи штрихкода — single: распознавание до первого найденного штрихкода.
Чтобы распознать несколько штрихкодов, установите “последовательный” режим — sequence.
// C++
settings->SetOption("barcode.feedMode", "sequence");
// Java
settings.SetOption("barcode.feedMode", "sequence");
Существует набор структурированных текстовых сообщений, которые обычно кодируются с помощью штрих-кодов. Вы можете указать, какое структурированное сообщение вы ожидаете увидеть в своем сеансе. Эта подсказка обозначается как preset (пресет) и заполняет набор полей, в которые разбивается содержимое. По умолчанию данная функция отключена.
Для включения пресета, задайте следующий параметр сессии:
// C++
settings->SetOption("barcode.preset", "AAMVA");
// Java
settings.SetOption("barcode.preset", "AAMVA");
Можно задать сложный пресет:
// C++
settings->SetOption("barcode.preset", "URL | PAYMENT");
// Java
settings.SetOption("barcode.preset", "URL | PAYMENT");
где значение параметра содержит набор пресетов, разделенных знаком | . Если пресет настроен корректно, к результату добавляется параметр CodeField message_type, содержащий название пресета, а также соответствующий список CodeFields.
Полный список поддерживаемых пресетов: AAMVA, GS1, URL, EMAIL, VCARD, ICALENDAR, PHONE, SMS, ISBN, WIFI, GEO, PAYMENT. Каждый пресет содержит определенный набор полей:
Пресет | Поля |
---|---|
AAMVA | В соответствие сл спецификацией AAMVA, например, «AAMVA_VERSION», «ANSI», «DAC» и др. |
GS1 | «BATCH/LOT», «EXPIRY», «GTIN», «SERIAL», «SSCC/SSCI» и др. |
URL | «URL» |
«Body», «Recipients», «Subject», «URL mailto», «Carbon copy» и др. | |
VCARD | «vCard version», «ADR», «AGENT», «BDAY», «CATEGORIES», «CLASS», «LABEL», «EMAIL» и др. |
ICALENDAR | «EVENT0», «EVENT1» и др. |
PHONE | «Phone» |
SMS | «SMS_number», «Body» |
ISBN | «ISBN», «ISBN type», «Prefix», «Registration group» |
WIFI | «Authentication type», «Password», «SSID» и др. |
GEO | «Latitude», «Longitude», «Query» |
PAYMENT | «BIC», «BankName», «CorrespAcc», «Name», «PersonalAcc»и др. |
Настройки распознавания штрихкодов представлены в таблице.
Параметр | Тип возвращаемого значения |
Значе ние по умолчанию | Описание |
---|---|---|---|
barcode.enabled | «true» или «false» | «false» | Включает/отключает распознавание штрихкода |
barcode.ALL.enabled | «true» или «false» | «false» | Включает распознавание всех символик |
barcode.COMMON.enabled | «true» или «false» | «false» | Включает распознавание наиболее частых (common) символик |
barcode.maxAllowedCodes | целое число | “1” | Задает максимальное число распознаваемых кодов |
barcode.roiDetectionMode | «focused», «anywhere» или «dummy» | “focused” | Устанавливает режим ROI |
barcode.feedMode | «sequence» или «single» | “single” | Устанавливает режим подачи штрихкодов |
barcode.effortLevel | «low», «normal» или «high» | “normal” | Задает уровень усилий при распознавании |
barcode.<symbology>.enabled | «true» или «false» | «false» | Включает/исключает указанную символику |
barcode.<symbology>.minMsgLen | целое число | “1” | Минимальная длина сообщения со штрихкодом |
barcode.<symbology>.maxMsgLen | целое число | “999” | Максимальная длина сообщения со штрихкодом |
barcode.<symbology>.checkSumPresence | целое число | “0” | Задает наличие контрольной суммы (для 1d штрихкодов) |
barcode.<symbology>.extendedMode | «true» или «false» | «false» | Устанавливает расширенный режим распознавания (для 1d штрихкодов) |
barcode.<symbology>.barcodeColour | «black», «white» или «unknown» | «unknown» | Задает цвет ожидаемого штрихкода |
barcode.preset | имя пресета | __ | Задает пресет для интерпретации содержимого декодированного штрих-кода |
barcode.preset.PAYMENT.strictSpecCompliance | «true» или «false» | «false» | Определяет, точно ли пресет PAYMENT соответствует спецификации |
barcode.smartPaymentBarDecoding | «true» или «false» | «false» | Включает умное распознавание кодировки для платежных штрих-кодов |
Для включения умного распознавания кодировок платежных штрих-кодов, не соответствующих спецификации, установите параметры:
// C++
settings->SetOption("barcode.smartPaymentBarDecoding", "true");
// Java
settings.SetOption("barcode.smartPaymentBarDecoding", "true");
Будет создан объект CodeField smart_payment_bar_decoding_result, содержащий название кодировки. Этот объект можно использовать в пресете PAYMENT вместо спецификации. Полный список поддерживаемых кодировок: UTF8, CP1251, KOI8_R, ISO8859_5, CP932.
Движок bank_card распознает банковские карты в определенном наборе кадров. По умолчанию эта функция отключена. Чтобы ее включить, установите следующие значения параметров сессии:
// C++
settings->SetOption("bank_card.enabled", "true");
// Java
settings.SetOption("bank_card.enabled", "true");
Поддерживаются три типа банковских карт:
По умолчанию активированы все типы. Можно явно включить распознавание банковских карт с помощью опций:
// C++
settings->SetOption("bank_card.embossed.enabled", "true");
// Java
settings.SetOption("bank_card.embossed.enabled", "true");
Результат распознавания эмбоссированных карт и гравированных карт может содержать следующие поля:
Поле | Описание |
number | номер карты (обязательное поле) |
name | имя держателя карты |
expiry_date | срок действия в формате MM/ГГ (месяц/год) |
optional_data_0 | дополнительная строка любого формата |
optional_data_1 | дополнительная строка любого формата |
optional_data_2 | дополнительная строка любого формата |
Результат распознавания напечатанных карт (freeform) может содержать следующие поля:
Поле | Описание |
number | номер карты (обязательное поле) |
name | имя держателя карты |
expiry_date | срок действия в формате MM/ГГ (месяц/год) |
iban | IBAN (по ISO 13616) |
secret code | код VC/CVV |
Режим захвата определяет, как искать банковскую карту. Существуют два режима захвата:
По умолчанию установлен режим mobile.
Опции распознавания банковских карт:
Параметр | Тип возвращаемого значения |
Значе ние по умолча нию | Описание |
---|---|---|---|
bank_card.enabled | «true» или «false» | «false» | Включает/отключает распознавание банковской карты |
bank_card.captureMode | «mobile» или «anywhere» | «mobile» | Устанавливает режим распознавания банковской карты |
bank_card.enableStoppers | «true» или «false» | «true» | Включает интеллектуальные ограничители текстовых полей (стопперы) |
bank_card.extractBankCardImages | «true» или «false» | «false» | Извлекает исправленное изображение банковской карты и сохраняет его в соответствующем объекте CodeObject |
Движок МЧЗ распознает машиночитаемые зоны на определенном наборе кадров согласно спецификации ICAO, см. здесь. По умолчанию эта функция отключена. Чтобы ее включить, задайте соответствующие опции сессии:
// C++
settings->SetOption("mrz.enabled", "true");
// Java
settings.SetOption("mrz.enabled", "true");
Результат распознавания содержится в поле объекта full_mrz. Этот объект также содержит набор разделенных полей, имена которых зависят от типа МЧЗ.
Движок поддерживает распознавание следующих типов МЧЗ:
Тип МЧЗ | Документ | Описание |
---|---|---|
подтип ICAO 9303 MRZ MRP (TD3) | Машиночитаемый паспорт | 2 строки по 44 символа |
подтип ICAO 9303 MRZ MRVA | Машиночитаемая виза | Тип A, 2 строки по 44 символа |
подтип ICAO 9303 MRZ MRVB | Машиночитаемая виза | Тип B, 2 строки по 36 символов |
подтип ICAO 9303 MRZ TD1 | Машиночитаемый проездной документ | Тип 1, 3 строки по 30 символов |
подтип ICAO 9303 MRZ TD2 | Машиночитаемый проездной документ | Type 2, 2 строки по 36 символов |
МЧЗ-подобная зона | Болгарские свидетельства о регистрации транспортного средства | 3 строки по 30 символов |
МЧЗ-подобная зона | Водительские права Швейцарии | 3 строки по 9 символов в первой строке, 30 символов во второй и третьей строках |
МЧЗ-подобная зона | Удостоверение личности Эквадора | 3 строки по 30 символов |
МЧЗ-подобная зона | Удостоверение личности Франции | 2 строки по 36 символов |
МЧЗ-подобная зона | Удостоверение личности Кении | 3 строки по 30 символов |
МЧЗ-подобная зона | Российский внутренний паспорт | 2 строки по 44 символа |
МЧЗ-подобная зона | Российская виза | 2 строки по 44 символа |
В зависимости от типа МЧЗ результат распознавания содержит подмножество полей со следующими названиями:
Название поля | Описание |
---|---|
mrz_doc_type_code | Код типа документа |
mrz_number | Номер документа |
mrz_issuer | Кем выдан |
mrz_proprietor | Владелец |
mrz_vehicle_number | Номер транспортного средства |
mrz_line1 | Строка 1 |
mrz_line2 | Строка 2 |
mrz_line3 | Строка 3 |
full_mrz | МЧЗ полностью |
mrz_vin | VIN (Идентификационный номер транспортного средства) |
mrz_id_number | Идентификационный номер |
mrz_cd_number | Контрольное число номера |
mrz_cd_bgrvrd_1 | 1-е контрольное число регистрационного сертификата транспортного средства Болгарии |
mrz_cd_bgrvrd_2 | 2-е контрольное число регистрационного сертификата транспортного средства Болгарии |
mrz_birth_date | Дата рождения |
mrz_name | Имя |
mrz_nationality | Гражданство |
mrz_opt_data_1 | Персональный номер или другие дополнительные данные строки 1 |
mrz_opt_data_2 | Персональный номер или другие дополнительные данные строки 2 |
mrz_last_name | Фамилия |
mrz_gender | Пол |
mrz_expiry_date | Дата окончания срока действия |
mrz_issue_date | Дата выдачи |
photo | Фото |
mrz_cd_birth_date | Контрольное число даты рождения |
mrz_cd_composite | Составное контрольное число |
mrz_cd_expiry_date | Контрольное число даты окончания действия |
mrz_cd_opt_data_2 | Контрольное число строки 2 дополнительных данных |
mrz_authority_code | Код подразделения |
mrz_id_visa | ИД визы |
mrz_invitation_number | Номер приглашения |
mrz_cd_name | Контрольное число имени |
mrz_cd_invitation_number | Контрольное число номера приглашения |
mrz_cd_id_visa | Контрольное число ИД визы |
mrz_first_name | Имя |
mrz_cd_issue_date | Контрольное число даты вычета |
Движок code_text_line распознает строки кодированного текста, то есть строки с заранее заданным содержимым. По умолчанию эта функция отключена. Чтобы ее включить, задайте соответствующие опции сессии:
// C++
settings->SetOption("code_text_line.enabled", "true");
// Java
settings.SetOption("code_text_line.enabled", "true");
Существует два типа поддерживаемых кодированных текстовых строк: phone_number (номер телефона) и card_number (номер карты). По умолчанию оба типа не активированы.
ПРЕДУПРЕЖДЕНИЕ!
Типы phone_number и card_number являются взаимоисключающими
Укажите явно тип строки кодированного текста с помощью соответствующей опции сессии:
// C++
settings->SetOption("code_text_line.card_number.enabled", "true");
// Java
settings.SetOption("code_text_line.card_number.enabled", "true");
Движок code_text_line распознает как печатные, так и рукописные текстовые строки.
ВНИМАНИЕ!
Текстовая строка должна составлять не менее трети площади, занимаемой символами, обозначающими этот регион.
Поддерживаются номера в следующих форматах:
1) 11 цифр — номера, начинающиеся с 7 или 8, и кодами 3XX, 4XX, 7XX, 8XX, 9XX;
2) 10 цифр — номера, начинающиеся с 9 (сокращенная запись мобильных номеров)
Движок payment_details распознает платежные реквизиты, представленные в текстовой форме, которые необходимы для осуществления платежа в финансовой системе Российской Федерации. По умолчанию эта функция отключена. Чтобы ее включить, задайте соответствующие опции сессии:
// C++
settings->SetOption("payment_details.enabled", "true");
// Java
settings.SetOption("payment_details.enabled", "true");
Для включения распознавания определенного типа платежных реквизитов, задайте соответствующие опции сессии:
// C++
settings->SetOption("payment_details.<type>.enabled", "true");
// Java
settings.SetOption("payment_details.<type>.enabled", "true");
Полный список поддерживаемых типов: inn, kpp, rcbic, rus_bank_account, personal_account.
ВНИМАНИЕ!
По умолчанию включено распознавание всех типов платежных реквизитов
Технология Universal Pay, применяемая в Code Engine, позволяет распознавать объекты в платежном документе без указания типа.
Поддерживаемые объекты:
Клиент предоставляет на вход последовательность изображений, а сессия распознает и кладет в результат только те объекты, по которым можно произвести платеж (т.е. остальные двумерные штрихкоды не по ГОСТ будут игнорироваться).
В рамках одной сессии распознается один платежный объект. После обнаружения платежного объекта на последовательности кадров, сессия завершается. При этом для штрихкодов достаточно одного кадра, для остальных типов объектов требуется несколько кадров.
Примеры настроек параметров Universal Pay:
// C++
settings->SetOption("global.workflow", "universalPay");
settings->SetOption("barcode.enabled", "true");
settings->SetOption("barcode.QR_CODE.enabled", "true");
settings->SetOption("barcode.AZTEC.enabled", "true");
settings->SetOption("barcode.DATA_MATRIX.enabled", "true");
settings->SetOption("barcode.preset", "PAYMENT");
settings->SetOption("barcode.feedMode", "sequence");
settings->SetOption("bank_card.enabled", "true");
settings->SetOption("code_text_line.enabled", "true");
settings->SetOption("code_text_line.phone_number.enabled", "true");
settings->SetOption("code_text_line.card_number.enabled", "true");
// Java
settings.SetOption("global.workflow", "universalPay");
settings.SetOption("barcode.enabled", "true");
settings.SetOption("barcode.QR_CODE.enabled", "true");
settings.SetOption("barcode.AZTEC.enabled", "true");
settings.SetOption("barcode.DATA_MATRIX.enabled", "true");
settings.SetOption("barcode.preset", "PAYMENT");
settings.SetOption("barcode.feedMode", "sequence");
settings.SetOption("bank_card.enabled", "true");
settings.SetOption("code_text_line.enabled", "true");
settings.SetOption("code_text_line.phone_number.enabled", "true");
settings.SetOption("code_text_line.card_number.enabled", "true");
Каждой сессии распознавания можно задать определенный набор параметров с помощью методов класса CodeEngineSessionSettings.
Для получения имен параметров и их значений, выполните следующую процедуру:
// C++
for (auto it = settings->Begin(); it != settings->End(); ++it) {
// it.GetKey() возвращает имя параметра
// it.GetValue() возвращает значение параметра
}
// Java
for (StringsMapIterator it = settings.Begin();
!it.Equals(settings.OptionsEnd());
it.Advance()) {
// it.GetKey() возвращает имя параметра
// it.GetValue() возвращает значение параметра
}
Для изменения значений параметров, воспользуйтесь методом SetOption(…):
// C++
settings->SetOption("barcode.enabled", "true");
settings->SetOption("barcode.COMMON.enabled", "true");
// Java
settings.SetOption("barcode.enabled", "true");
settings.SetOption("barcode.COMMON.enabled", "true");
Значения параметров всегда представлены строкой (string). При необходимости передать целочисленное (integer) или булевое (bool) значение, преобразите их в строку.
Глобальные параметры:
Параметр | Тип возвращаемого значения |
Значе ние по умолчанию | Описание |
global.enableMultiThreading | «true» или «false» | «true» | Обеспечивает параллельное выполнение внутренних алгоритмов |
global.rgbPixelFormat | Строка символов R, G, B, и A | “RGB” для 3-канальных изображений, “BGRA” for 4-канальных изображений | Последовательность цветовых каналов в методе session.ProcessSnapshot() |
global.sessionTimeout | Double | “0.0” для серверных бандлов, “5.0” для мобильных бандлов | Таймаут сессии в секундах |
Smart Code Engine SDK поддерживает дополнительные обратные вызовы во время анализа документов (до завершения их обработки) — метода Process(…). Это позволяет пользователю получать больше информации о процессе распознавания, а также помогает создавать интерактивный графический интерфейс.
Для поддержки обратной связи, создайте подклассы класса CodeEngineWorkflowFeedback и CodeEngineVisualizationFeedback и выполните методы:
// C++
class MyWorkflowFeedback : public se::code::CodeEngineWorkflowFeedback {
public:
virtual ~OptionalWorkflowFeedBack() override = default;
public:
virtual void ResultReceived(const se::code::CodeEngineResult& result) override { }
virtual void SessionEnded() override { }
};
class MyVisualizationFeedback : public se::code::CodeEngineVisualizationFeedback {
public:
virtual ~OptionalVisualizationFeedBack() override = default;
public:
virtual void FeedbackReceived(
const se::code::CodeEngineFeedbackContainer& /*feedback_container*/) override { }
};
// Java
import com.smartengines.code.*
class MyWorkflowFeedback extends CodeEngineWorkflowFeedback {
public void ResultReceived(CodeEngineResult result) { }
public void SessionEnded() { }
}
class MyVisualizationFeedback extends CodeEngineVisualizationFeedback {
public void FeedbackReceived(CodeEngineFeedbackContainer feedback_container) { }
}
Создайте экземпляры классов MyWorkflowFeedback и MyVisualizationFeedback и передайте их в качестве параметров при инициализации сессии:
// C++
MyWorkflowFeedback my_workflow_feedback;
MyVisualizationFeedback my_visualization_feedback;
std::unique_ptr<se::code::CodeEngineSession> session(
engine->SpawnSession(*settings, signature, &my_workflow_feedback, &my_visualization_feedback));
// Java
import com.smartengines.code.*;
MyWorkflowFeedback my_workflow_feedback = new MyWorkflowFeedback();
MyVisualizationFeedback my_visualization_feedback = new MyVisualizationFeedback();
CodeEngineSession session = engine.SpawnSession(settings, signature, my_workflow_feedback,
my_visualization_feedback);
ВНИМАНИЕ!
Не удаляйте экземпляры подкласса CodeEngineWorkflowFeedback и CodeEngineVisualizationFeedback во время жизни сессии CodeEngineSession. Рекомендуется поместить их в одну область видимости
Smart Code Engine SDK включает в себя Java API, автоматически генерируемый из интерфейса C++ с помощью инструмента SWIG.
Интерфейс Java почти идентичен C++.
Несмотря на то, что сборка мусора присутствует и работает, рекомендуется вызывать метод obj.delete() для наших объектов API вручную, поскольку они являются обертками памяти, выделенной в куче. Размер их кучи неизвестен сборщику мусора, что может привести к задержке удаления объектов и, следовательно, высокому общему потреблению памяти.
CodeEngine engine = CodeEngine.CreateFromEmbeddedBundle(true); // или любой другой объект
// ...
engine.delete(); // гарантирует принудительное и немедленное освобождение обернутого объекта C++
ВНИМАНИЕ!
При использовании вспомогательного объекта обратной связи с помощью подклассов CodeEngineWorkflowFeedback или CodeEngineVisualizationFeedback убедитесь, что его экземпляр имеет ту же область видимости, что и CodeEngineSession. Причина этого в том, что наш API не содержит указатель на экземпляр объекта обратной связи. В результате, сборка мусора выполняется преждевременно, что приводит к сбою.
// Java
// Недостаток: может повлечь преждевременное удаление сборщиком мусора экземпляра объекта обратной связи (feedback)
class MyRecognizer {
private CodeEngine engine;
private CodeEngineSession session;
private void InitializeSmartCodeEngine() {
// ...
session = engine.SpawnSession(settings, signature, new MyWorkflowFeedback(), new MyVisualizationFeedback());
// объект обратной связи (feedback) мoжет быть удален сборщиком мусора, т.к. объект - вне сессии
}
}
// Java
// Преимущество: доступ к сессии распознавания
class MyRecognizer {
private CodeEngine engine;
private CodeEngineSession session;
private MyWorkflowFeedback workflow_feedback; //
private MyVisualizationFeedback visualization_feedback; // feedbacks has session's scope
private void InitializeSmartCodeEngine() {
// ...
workflow_feedback = new MyWorkflowFeedback();
visualization_feedback = new MyVisualizationFeedback();
session = engine.SpawnSession(settings, signature, workflow_feedback, visualization_feedback);
}
}
Можно скачать демо-версию в RuStore
Пользуйтесь примером из папки codeengine_sample*.
Мы предлагаем библиотеку в виде классического SDK и примеры интеграции. Установите один из наших примеров (они находятся в папке /samples).
Поддерживаются форматы:
PDF мы не поддерживаем и рекомендуем растеризовать его (привести в поддерживаемый формат) на своей стороне перед распознаванием.
Замените библиотеки в папке /bin и обертки (в папке /bindings). Все это содержится в поставляемом SDK.
Наш SDK зависит от платформы. Свяжитесь с нами по почте sales@smartengines.ru or support@smartengines.ru, и мы передадим подходящий SDK.
Не рекомендуется использовать SDK на несовместимых ОС. Свяжитесь с нами по почте sales@smartengines.ru or support@smartengines.ru, и мы передадим подходящий SDK.
Возможно, введена невалидная подпись.
Ни один движок не включен в настройках или ни один из включенных движков не содержится в бандле (например, если в бандле присутствуют только штрихкоды, а пользователь пытается включить банковские карты).
Нельзя использовать файл конфигурации версии, отличной от версии библиотеки. Они должны быть из одного SDK.
Во многих интеграциях необходима дополнительная сборка обертки для работы с библиотекой на С++. Эта ошибка возникает, когда обертка не может найти по указанному пути основную библиотеку. Ее необходимо либо поместить в область видимости кода через переменные окружения, либо скомпилировать обертку с корректными путями к библиотеке.
Такого файла или каталога нет: модуль, который вы используете, создан для другой версии python, /samples/codeengine_sample_*/ содержит скрипт для сборки модуля на вашей стороне. Не забудьте, что у вас должны быть установлены пакеты разработки для вашего языка.
Заказать продукт
Для заказа решений, получения подробной информации или триал версий
заполните приведенную ниже форму, и мы обязательно с Вами свяжемся.