LUNA PASS API#
Общий принцип работы LUNA PASS API следующий:
- на вход приходит кадр;
- LUNA SDK оценивает и проверяет кадр;
- последовательно выполняются плагины, если они включены:
- плагин FaceMatcher;
- плагин VirtualCameraChecker;
- плагин Bestshot;
- плагин Luna3DescriptorQualityCheck;
- плагин AggregateLiveness;
- плагин ActiveLiveness;
- анализируется полученный результат работы плагинов.
Процесс оценки кадра#
Процесс оценки кадра — последовательное выполнение проверок. Описание проверок представлено ниже (Таблица 4).
Таблица 4. Проверки для оценки кадра
Проверка |
Описание |
---|---|
Multiface |
— является ли лицо:
|
Качество изображения |
|
Размер и позиция лица в кадре |
— отступ границы лица от границы кадра:
— размер кадра:
— размер лица в кадре:
|
Положение головы |
|
Состояние глаз |
|
Статус рта |
|
Наличие очков |
|
AGS, общая метрика качества изображения |
\— |
Liveness |
|
Deepfake |
|
Если кадр не прошел одну из проверок, тогда анализируется следующий кадр. Пользователь при этом видит соответствующие подсказки на странице с LUNA PASS UI.
Принцип работы плагина FaceMatcher#
Плагин FaceMatcher включается в файле config.toml. Для этого в параметрах конфигурации LIVENESS необходимо установить параметр disallowMultipleFacesInSession
= 1. Позволяет обрывать сессию, если на двух кадрах в рамках одной сессии обнаружены несколько основных лиц.
Описание общего принципа работы плагина FaceMatcher:
Если пришел только первый кадр, Facematcher запоминает фотографию лица. Если пришел второй кадр, Facematcher сравнивает фотографию лица с пришедшего кадра с фотографией лица предыдущего кадра:
-
если на фотографиях с двух кадров разные лица, то дальнейшие проверки не проводятся;
-
если на фотографиях с двух кадров лица одинаковые, то кадр отправляется для дальнейших проверок
Описание работы плагина VirtualCameraChecker#
Плагин VirtualCameraChecker включается в файле config.toml. Позволяет обнаруживать использование пользователем виртуальной камеры вместо реальной камеры устройства. Данные об обнаружении виртуальной камеры фиксируются в логах.
Принцип работы плагина Bestshot#
Плагин Bestshot включается в файле config.toml. Позволяет выбрать в качестве bestshot кадр с наибольшей оценкой Liveness, путем сравнения оценки Liveness со значениями на предыдущих кадрах. Для bestshot не может быть выбран кадр, на котором оба глаза закрыты, за исключением случаев, когда разрешено использование солнцезащитных очков.
Принцип работы плагина Bestshot представлен на схеме (Рисунок 5). Описание общего принципа работы плагина представлено ниже (Таблица 6).

Таблица 6. Описание общего принципа работы плагина Bestshot
Шаг |
Описание |
---|---|
(1) |
Выполняется проверка значения Liveness текущего кадра: Если проверка текущего кадра на Liveness не пройдена, то процесс прекращается, текущий кадр далее не используется. Если проверка текущего кадра на Liveness пройдена, то переход к следующему шагу |
(2) |
Выполняется сравнение значения Liveness текущего кадра и значения Liveness у кадра, который ранее был выбран в данном плагине в качестве лучшего кадра. Если значение Liveness текущего кадра ниже, чем у существующего лучшего кадра, то процесс прекращается, текущий кадр далее не используется. Если текущий кадр — первый кадр, прошедший порог качества Liveness, то он автоматически становится лучшим кадром |
(3) |
Если значение Liveness текущего кадра выше, чем у существующего лучшего кадра, выбранного данным плагином, то текущий кадр становится лучшим кадром |
Принцип работы плагина Luna3DescriptorQualityCheck#
Плагин Luna3DescriptorQualityCheck включается в файле config.toml. Позволяет отправлять запрос к LUNA PLATFORM 3 на извлечение дескриптора и проверку его качества.
Плагин Luna3DescriptorQualityCheck работает только с LUNA PLATFORM версии 3.х.
Плагин позволяет снизить количество ошибок фильтрации по качеству дескриптора на стороне LUNA PLATFORM 3.
Принцип работы плагина Luna3DescriptorQualityCheck представлен на схеме (Рисунок 6). Описание общего принципа работы плагина представлено ниже (Таблица 7).

Таблица 7. Описание общего принципа работы плагина Luna3DescriptorQualityCheck
Шаг |
Описание |
---|---|
(1) |
Выполняется проверка включен ли плагин Bestshot. Если плагин Bestshot включен, то переход к шагу 6 |
Если плагин Bestshot выключен: |
|
(2) |
Если плагин Bestshot выключен, то выполняется проверка качества Liveness текущего кадра:
Если проверка текущего кадра на качество Liveness не пройдена, то процесс прекращается, текущий кадр далее не используется |
(3) |
Если проверка текущего кадра на качество Liveness пройдена, то выполняется проверка значения Liveness: сравнение значений Liveness текущего кадра и существующего лучшего кадра в данном плагине. Если у текущего кадра Liveness меньше, чем Liveness у лучшего кадра данного плагина, то процесс прекращается, текущий кадр далее не используется. Если текущий кадр — первый кадр, прошедший проверку качества Liveness (в текущем плагине или плагине Bestshot), то он становится лучший кадром |
(4) |
Если у текущего кадра Liveness больше, чем Liveness у лучшего кадра данного плагина, то выполняется запрос в LUNA PLATFORM 3 на извлечение дескриптора из текущего кадра и проверку качества его дескриптора. Если валидация в LUNA PLATFORM 3 не пройдена (качество дескриптора оказалось недостаточным), то процесс прекращается, текущий кадр далее не используется |
(5) |
Если валидация в LUNA PLATFORM 3 пройдена (качество дескриптора в норме), то текущий кадр становится лучшим кадром в данном плагине |
Если плагин Bestshot включен: |
|
(6) |
Выполняется проверка, выбран ли лучший кадр в плагине Bestshot. Если лучший кадр в плагине Bestshot не выбран, то текущий кадр передается далее, никаких изменений в текущем плагине не производится, процесс прекращается |
(7) |
Если лучший кадр в плагине Bestshot выбран, то сравнивается его значение Liveness со значением Liveness лучшего кадра данного плагина |
(8) |
Если Liveness лучшего кадра из Bestshot ниже, то лучший кадр из данного плагина становится лучшим в плагине Bestshot |
(9) |
Если Liveness лучшего кадра из Bestshot выше, то этот кадр отправляется в LUNA PLATFORM 3 на извлечение дескриптора и проверку качества его дескриптора. Если лучший кадр из Bestshot не прошел валидацию в LUNA PLATFORM 3 (качество дескриптора оказалось недостаточным), то лучший кадр из данного плагина становится лучшим в плагине Bestshot |
(10) |
Если лучший кадр из Bestshot прошел валидацию в LUNA PLATFORM 3 (качество дескриптора в норме), то лучший кадр из Bestshot становится лучшим в данном плагине |
Принцип работы плагина AggregateLiveness#
Плагин AggregateLiveness включается в файле config.toml. Позволяет рассчитывать агрегированное значение Liveness по нескольким кадрам.
Принцип работы плагина AggregateLiveness представлен на схеме (Рисунок 7). Описание общего принципа работы плагина представлено ниже (Таблица 8).

Таблица 8. Описание общего принципа работы плагина AggregateLiveness
Шаг |
Описание |
---|---|
(1) |
Выполняется проверка качества Liveness текущего кадра: Если проверка текущего кадра на качество Liveness не пройдена, то процесс прекращается, текущий кадр далее не используется. Если проверка текущего кадра на качество Liveness пройдена, то выполняется переход к следующему шагу |
(2) |
Плагин сохраняет значения качества liveness_score1 по кадрам в рамках сессии, количество таких значений ограничено переменной AGGREGATE_LIVENESS_FRAMES_COUNT. |
(3) |
Плагин формирует агрегированное значение Liveness из значений, сохраненных на шаге 2 |
Принцип работы плагина ActiveLiveness#
Плагин ActiveLiveness включается в файле config.toml. Позволяет подтвердить витальность человека по нескольким кадрам, на которых пользователь взаимодействует с Сервисом: моргает, поворачивает голову влево-вправо по оси Y, наклоняет голову вверх-вниз по оси X. Описание общего принципа работы плагина представлено ниже (Таблица 9).
Таблица 9. Описание общего принципа работы плагина ActiveLiveness
Шаг |
Описание |
---|---|
(1) |
Выбирается произвольный набор проверок, количество которых задаётся в настройках. |
(2) |
Если проверка текущего кадра на Liveness не пройдена, то плагин генерирует ошибки. Ошибки подскажут, что должен сделать пользователь, чтобы пройти проверку. |
(3) |
Если проверка текущего кадра на Liveness пройдена, то пропускается один или несколько кадров, чтобы
фото с полуоткрытыми глазами или в процессе поворачивания головы не засчитывались.
За количество пропускаемых кадров отвечает параметр Полученный кадр становится Bestshot. |
Проверки ActiveLiveness#
Моргание
Проверка начинается в момент, когда открыты оба глаза, либо открыт один глаз и включен параметр args.acceptOneEyed
. Для того, чтобы проверка считалась пройденной далее должны прийти два кадра: с закрытыми глазами и снова с открытыми, либо, при включенном параметре args.acceptOneEyed
, — кадр с одним закрытым глазом и кадр с открытым.
Повороты головы
Для начала проверки угол поворота головы должен быть меньше значения args.yawStartDeg
. Далее должны прийти два кадра: со значением угла поворота больше args.yawThresholdDeg
и со значением угла повороты меньше args.yawStartDeg
.
Запрокидывание головы
Для начала проверки угол запрокидывания головы должен быть меньше значения args.pitchStartDeg
. Далее должны прийти два кадра: со значением угла поворота больше args.pitchThresholdDeg
и со значением угла повороты меньше args.pitchStartDeg
.
Подробнее о значениях углов поворота и углов запрокидывания см. в параметрах конфигурации плагина ActiveLiveness
Обработка результатов#
Общий принцип работы LUNA PASS API представлен на схеме (Рисунок 8). Описание общего принципа работы представлено ниже (Таблица 10).

Таблица 10. Описание общего принципа работы LUNA PASS API
Шаг |
Описание |
---|---|
(0) |
В LUNA PASS API поступает кадр |
(1) |
LUNA PASS API выполняет оценку кадра с помощью LUNA SDK и сравнивает полученные значения с пороговыми. Подробнее см. "Проверки при процессе оценки кадра" |
(2) |
Если включен плагин FaceMatcher, то выполняется обработка в соответствии с процессом описанным в общем принципе работы плагина |
(3) |
Если включен плагин VirtualCameraChecker, то выполняется проверка на использование пользователем виртуальной камеры вместо реальной камеры устройства |
(4) |
Если включен плагин Bestshot, то выполняется обработка в соответствии с процессом описанным в общем принципе работы плагина |
(5) |
Если включен плагин Luna3DescriptorQualityCheck, то выполняется обработка в соответствии с процессом описанным в общем принципе работы плагина |
(6) |
Если включен плагин AggregateLiveness, то выполняется обработка в соответствии с процессом описанным в общем принципе работы плагина |
(7) |
Если включен плагин ActiveLiveness, то выполняется обработка в соответствии с процессом описанным в общем принципе работы плагина |
(8) |
После выполнения действий в указанных плагинах LUNA PASS API обрабатывает полученные результаты. LUNA PASS API проверяет, является ли поступивший кадр первым. В зависимости от результатов данной проверки выполняются шаги:
|
(9) |
Если поступивший кадр не первый, то лицо на текущем кадре сравнивается с лицом на первом кадре:
|
(10) |
Обнаружено нескольких основных лиц в рамках одной сессии, текущая сессия закрывается без успешного кадра. |
(11) |
LUNA PASS API проверяет является ли камера реальной. В зависимости от результатов данной проверки выполняются шаги:
|
(12) |
Обнаружено использование пользователем виртуальной камеры вместо реальной камеры устройства, текущая сессия закрывается без успешного кадра. |
(13) |
LUNA PASS API проверяет количество кадров, дошедших до проверки Liveness больше или равно значению В зависимости от данной проверки дальнейший анализ делится на две части:
|
Если на шаге 13 количество кадров, дошедших до проверки Liveness, меньше допустимого, выполняются следующие шаги: |
|
(14) |
LUNA PASS API проверяет включен ли плагин AggregateLiveness Если плагин включен, то выполняется переход к следующему шагу Если плагин выключен, то выполняется переход к шагу 15 |
(15) |
LUNA PASS API проверяет заполнено ли окно агрегации: количество полученных значений Liveness больше или равно значению
Если окно агрегации не заполнено, то выполняется переход к шагу 39. Если окно агрегации заполнено, то выполняется переход к следующему шагу |
(16) |
LUNA PASS API проверяет значение полученного агрегированного Liveness: агрегированный Liveness больше или равен значения
Если значение полученного агрегированного Liveness ниже порога, то выполняется переход к шагу 39 Если значение полученного агрегированного Liveness выше или равен порогу, то выполняется переход к следующему шагу |
(17) |
LUNA PASS API проверяет результат плагина Bestshot. Если в плагине Bestshot не удалось выбрать успешный кадр, то выполняется переход к шагу 39 |
(18) |
Если в плагине Bestshot удалось выбрать успешный кадр, то LUNA PASS API проверяет включен ли плагин ActiveLiveness |
(19) |
Если плагин ActiveLiveness включен, то выполняется проверка результата работы плагина ActiveLiveness. Сессия продолжается до прохождения кадром активного Liveness |
(20) |
Когда проверка результата работы плагина ActiveLiveness пройдена, то LUNA PASS API отправляет кадр в LUNA PASS UI как успешный |
(21) |
Если плагин ActiveLiveness выключен LUNA PASS API отправляет кадр в LUNA PASS UI как успешный |
(22) |
LUNA PASS API проверяет включен ли плагин Luna3DescriptorQualityCheck. Если плагин включен, то выполняется переход к следующему шагу Если плагин выключен, то выполняется переход к шагу 25 |
(23) |
LUNA PASS API выполняет проверку результата плагина Luna3DescriptorQualityCheck. Если по результатам работы плагина Luna3DescriptorQualityCheck не удалось выбрать успешный кадр, то выполняется обработка следующего кадра (переход к шагу 1) |
(24) |
Если по результатам работы плагина Luna3DescriptorQualityCheck удалось выбрать успешный кадр, прошедший проверку качества дескриптора, то LUNA PASS API отправляет в LUNA PASS UI именно этот кадр как успешный |
(25) |
LUNA PASS API проверяет включен ли плагин Bestshot. Если плагин включен, то выполняется переход к шагу 17 |
(26) |
Если плагин выключен, то LUNA PASS API отправляет в LUNA PASS UI первый кадр, прошедший все проверки |
Если на шаге 13 количество кадров, дошедших до проверки Liveness, больше или равно допустимому, выполняются следующие шаги: |
|
(27) |
LUNA PASS API проверяет включен ли плагин Luna3DescriptorQualityCheck Если плагин включен, то выполняется проверка наличия лучшего кадра в данном плагине (следующий шаг) Если плагин выключен, то выполняется переход к шагу 31 |
(28) |
Выполняется проверка наличия лучшего кадра в данном плагине |
(29) |
Если в плагине Luna3DescriptorQualityCheck выбран лучший кадр, то LUNA PASS API отправляет в LUNA PASS UI именно этот кадр как успешный |
(30) |
Если в плагине Luna3DescriptorQualityCheck не выбран лучший кадр, то сессия закрывается без успешного кадра |
(31) |
Выполняется проверка включен ли плагин Bestshot Если плагин включен, то выполняется переход к следующему шагу Если плагин выключен, то выполняется переход к шагу 32 |
(32) |
Выполняется проверка наличия лучшего кадра в плагине Bestshot |
(33) |
Если лучший кадр в плагине Bestshot не выбран, то сессия закрывается без успешного кадра |
(34) |
Если лучший кадр в плагине Bestshot выбран, то LUNA PASS API проверяет включен ли плагин ActiveLiveness |
(35) |
Если плагин ActiveLiveness включен, то выполняется проверка результата работы плагина ActiveLiveness Сессия продолжается до прохождения кадром активного Liveness |
(36) |
Когда проверка результата работы плагина ActiveLiveness пройдена, то LUNA PASS API отправляет кадр в LUNA PASS UI как успешный |
(37) |
Если плагин ActiveLiveness выключен LUNA PASS API отправляет кадр в LUNA PASS UI как успешный |
(38) |
Если плагин Bestshot выключен, то отправляется первый кадр, прошедший все проверки |
(39 ) |
|
(40) |
Текущая сессия закрывается без успешного кадра |
-
liveness_quality_score — оценка качества изображения для распознавания Liveness. ↩