Описание системы
В данном разделе вы узнаете, что представляет собой система распознавания, каковы основные принципы ее функционирования и возможности.
Наша система распознавания поставляется в виде скомпилированной библиотеки с заголовочными файлами на C++. Существует множество вариантов интеграции библиотеки:
- различные сервисы и десктоп-приложения;
- мобильные приложения (нативные и на базе популярных фреймворков);
- PWA и веб-страницы (WebAssembly-модуль).
Интерфейс на языке С++ позволяет создать обертки под любой популярный язык программирования. Мы предоставляем обертки для Java, C#, ObjC/Swift, Python3, PHP7/8 и так далее, под любые потребности клиента. Например:
- для С#, Java, Python, PHP используется SWIG;
- для ObjC дополнительные обертки не требуются;
- для работы в WASM используется emscripten.
Комплект поставки
- API на C, С++, C#, Java, Python, PHP, Javascript/webAssembly;
- Примеры использования на языках C/C++/C#/Java/PHP/Python/Javascript;
- Фреймворки: React Native, Flutter;
- REST API для low-code.
Интерфейс библиотеки
Интерфейс наших продуктов состоит из двух частей:
- интерфейс примитивов
secommon
, использующийся во всех продуктах; - интерфейс распознавания самого продукта.
Интерфейс примитивов secommon
отвечает за:
- работу с изображениями — создание, обрезка, трансформация, проективная коррекция, маскирование областей;
- работу с примитивами — создание примитивов для обрезки, извлечение примитивов из результата распознавания;
- итераторы для работы со строками;
- вывод ошибок.
Интерфейс распознавания для всех продуктов устроен по единому принципу. Он включает в себя пять основных объектов:
Движок распознавания
Движок распознавания — это объект, в котором хранятся и инициализируются все инструменты распознавания. Он создается на основе конфигурационного бандла, содержащего все возможные настройки: список документов, поддерживаемых конкретным SDK, их полей, список возможных проверок подлинности и так далее.
Примечание.
В особых случаях бандл может поставляться не отдельно, а в составе (внутри) библиотеки.
При создании данного объекта обычно указывается способ инициализации и путь до бандла (если он поставляется отдельно).
Инициализацию движка рекомендуется выполнять в единственном экземпляре. Один экземпляр позволяет создавать множество сессий распознавания.
Процесс инициализации является достаточно "тяжелой" операцией (как и сам анализ изображений), поэтому его следует выполнять вне потока пользовательского интерфейса.
Место инициализации
При старте приложения
Если предполагается постоянное использование движка, инициализацию удобно вынеси на старт приложения. Для серверных решений это стандартный вариант.
При первом обращении к функционалу распознавания
Это может быть открытие камеры устройства или момент открытия диалогового окна с выбором файла из файловой системы устройства. Открытие экрана с камерой занимает определенное время и во многих случаях оно совпадает со временем инициализации движка. На слабых устройствах и при очень большом размере бандла после открытия камеры может пройти несколько секунд перед готовностью движка начать распознавание.
Способ инициализации
- Ленивая — инициализация всех необходимых ресурсов во время первого обращения к ним (как правило, при обработке первого кадра);
- Отложенная — инициализация всех необходимых ресурсов при создании сессии распознавания;
- Не ленивая — инициализация всех ресурсов при создании движка.
Бандл
Конфигурационный бандл — файл, в котором хранятся все ресурсы, необходимые библиотеке распознавания для работы. Бандлы взаимозаменяемы в рамках одного продукта одной версии, а также могут быть вшиты внутрь библиотеки (например, если доступ к файловой системе устройства ограничен).
Сессия распознавания
Сессия распознавания — процесс распознавания физического документа, например, конкретного паспорта, водительских прав и так далее.
Под процессом распознавания физического документа подразумевается работа с одним или серией изображений одного и того же документа.
Система может распознать документ с высокой точностью и по одному изображению, однако, использование результатов распознавания нескольких изображений приводит к существенному повышению качества. Система комбинирует результаты распознавания, поступившие из разных кадров. Это позволяет уверенно распознавать документы в условиях плохого освещения, наличия бликов и других неблагоприятных факторов. Механизм, который принимает решение о необходимости распознавания дополнительных кадров или остановке процесса называется терминальностью.
Терминальность — автоматическая остановка процесса распознавания в видеопотоке. Принимает значение true
в двух случаях:
- добавление новых кадров не приведёт к изменению результата распознавания;
- исчерпалось ограничение времени сессии, заданное в настройках.
Сессия распознавания создается с заранее подготовленными настройками. Сессии независимы друг от друга, что позволяет использовать несколько сессий одновременно при необходимости (как с одинаковыми, так и с разными настройками).
Настройки сессии
При поставке продукта клиенту передается персональная подпись. Она содержится в файле README.html в директории /doc.
Каждый раз при создании экземпляра сессии распознавания подпись необходимо передавать в качестве одного из аргументов. Это подтверждает право вызывающего на использование библиотеки и разблокирует ее.
Проверка подписи осуществляется в оффлайн режиме. Библиотека не обращается ни к каким внешним ресурсам.
Настройки сессии — это объект, в котором хранится:
- список поддерживаемых документов для распознавания, сгруппированных по внутренним движкам. Их состав задается в конфигурационном бандле, с которым был создан движок (только чтение);
- список документов, переданных на распознавание (по умолчанию —
*
); - специальные опции сессии: количество потоков для распознавания и прочее. Полный список можно найти в документации.
Для Smart ID Engine:
- расширенная информация о документах в том числе ссылки на PRADO (только чтение и только для Smart ID Engine);
- список ожидаемых полей для распознавания (по умолчанию все);
- список наборов документов (Параметр
mode
. По умолчанию —default
);
Внутренние движки — это группы документов, организованные таким образом, чтобы алгоритм их поиска и распознавания работал максимально эффективно.
Список документов для распознавания формируется в рамках конфигурационного бандла. Внутри него документы могут быть сгруппированы, например, в следующие внутренние движки:
- все документы одной страны;
- паспорта всех стран;
- все документы, удостоверяющие личность, стран СНГ и так далее.
В бандлах могут пересекаться множества документов, находящихся в различных внутренних движках. Если в настройках сессии указаны такие документы для поиска, система не сможет самостоятельно определить, какой внутренний движок выбрать.
Для решения этой проблемы каждый внутренний движок имеет параметр "режим" (mode). Указав этот параметр вместе со списком ожидаемых для распознавания документов, вы сможете успешно создать сессию.
Внимание!
Указание нескольких типов документов за одну сессию возможно только в том случае, если они принадлежат к одному внутреннему движку
. Другими словами, одна сессия распознавания может работать только с одним внутренним движком.
Данные о внутренних движках, их составе и режимах содержатся в настройках сессии, а также в документации к каждому конкретному SDK.
Создание объекта Image
Для работы распознавания системе необходимо передать изображение специального класса se.common.image
. Создать его можно из следующих форматов:
Поддерживаемые форматы:
- jpeg, png;
- tiff (✔️TIFF_LZW, ✔️TIFF_PACKBITS,✔️TIFF_CCITT);
- base64 (форматы из пунктов выше);
- файловый буфер с предварительным указанием цветовой схемы, ширины\высоты\количества каналов.
Максимальный допустимый размер изображения по умолчанию — 15000x15000px. Предельный размер изображения может быть увеличен пользователем.
Работа с HEIC
Работа с HEIC в мобильных SDK не отличается от работы с другими форматами изображений. Чтение HEIC осуществляется системными средствами.
В серверных SDK необходимо самостоятельно открыть HEIC формат сторонними средствами и конвертировать либо в один из поддерживаемых нами форматов, либо передать непосредственно сырые пиксели в виде RGB буфера (рекомендуется).
Результат распознавания
Результат распознавания — это объект интерфейса, содержащий всю доступную информацию о результате работы системы распознавания. Каждый параметр выводится с помощью отдельного метода, что позволяет при встраивании оперировать только необходимыми данными. Состав полей в объекте зависит от типа сессии, в которой выполнялось распознавание, а тип сессии зависит от функционала используемого продукта.
Отрисовка обратной связи
Распознавание в видеопотоке — это сложный и зачастую не мгновенный процесс, который требует взаимодействия с пользователем. Предоставляя информацию о ходе распознавания на экране в процессе работы, мы помогаем пользователю лучше понять этапы функционирования системы. Именно поэтому технологии машинного зрения часто дополняются элементами дополненной реальности, что улучшает пользовательский опыт и делает взаимодействие более интуитивным.
В объекте результата распознавания находится информация о координатах четырехугольника шаблона документа (границы документа) и координаты четырехугольников шаблонов полей документа. По этим координатам, например, можно отрисовать границы найденного документа на экране с превью камеры.
Confidence
Несмотря на то, что структура результата определяется типом сессии, у всех полей ответа есть общее свойство — уверенность (confidence).
Confidence (уверенность распознавания) — это условная оценка результата распознавания, выражаемая числом типа float от нуля до единицы. Более высокое значение уверенности указывает на то, что система с большей вероятностью правильно определила местоположение документа на изображении (confidence шаблона) или корректно распознала поля и символы (confidence полей и символов).
isAccepted
isAccepted — это упрощенная версия confidence, которая принимает значение true
в случае, если система уверена в своем ответе.
Атрибуты
Каждый распознанный элемент имеет набор атрибутов, представляющих собой метаданные. Например, для найденного шаблона вычисляется его реальный DPI, для баркодов — исходная кодировка и так далее.
Общий процесс распознавания документов
Для того, чтобы распознать документ (или объект, или просто текст на изображении), сверить между собой лица или пройти процедуру проверки живости, необходимо совершить общий для всех продуктов набор действий:
- создание движка распознавания;
- задание настроек сессии распознавания;
- создание самой сессии распознавания или их набора;
- передача изображения в сессию распознавания;
- оценка результата распознавания;
- передача следующего изображения при необходимости;
- работа с итоговым результатом распознавания.
Типы сессий
Каждый тип сессии привязан к своему продукту.
Smart ID Engine
- IdSession — для распознавания документов, удостоверяющих лица;
- IdFileAnalysisSession — для анализа изображений на предмет вмешательства;
- IdFaceSession — для процесса небиометрической сверки лиц и проверки живости;
- IdVideoAuthenticationSession — для различных комплексных сценариев, таких как двустороннее сканирование документа.
Smart Code Engine
- CodeEngineSession для распознавания кодифицированных объектов. Тип объекта выбирается с помощью настроек сессии, это могут быть:
- банковские карты;
- баркоды;
- номера телефонов;
- номера банковских карт и счетов;
- автомобильные номера;
- показания счётчиков учёта воды/электроэнергии/газа/тепла и так далее;
- различные комбинации из списка выше.
Smart Document Engine
- DocSession для распознавания всех поддерживаемых жестких и гибких форм.
Smart Text Engine
- TextSession для распознавания текстов на изображениях. С помощью настроек сессии можно выбрать либо просто поиск текстовых строк и их распознавание, либо поиск с учётом особенностей геометрии (для случая, если подаётся фото листа бумаги с текстом на нём).