Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
В версиях SDK для Android и iOS 8.0.0 мы добавили новый режим анализа – гибридный. Это комбинация анализов на устройстве и на сервере, сочетающая в себе плюсы обоих подходов. Если анализ на устройстве дает неоднозначный результат по поводу присутствия живого человека в кадре, система запускает анализ на сервере, в ином случае никаких дополнительных проверок не проводится.
Требования к вычислительной мощности ниже: в большинстве случаев анализа на устройстве достаточно, так что проверки на сервере не нужны, количество запросов также сокращается. На Android перепроверка требуется 8-9% анализов, на iOS – 4,5-5,5%.
Точность гибридного анализа практически такая же, как серверного: неоднозначный результат анализа на устройстве ведет к проверке на сервере.
Гибридный анализ, начиная с 8.0.0, встроен как один из режимов анализа по умолчанию, но вы можете реализовать и собственную логику такого анализа, комбинируя в своем коде анализы на устройстве и сервере в соответствии с вашими надобностями.
С релизом 8.3.0 появилось дополнительное преимущество – анализ выполняется быстрее, а данных передается меньше. Поскольку в большинстве случаев анализ на устройстве дает точный результат, загружать полноразмерное видео на сервер для анализа нужно редко, так что дополнительной передачи данных в большинстве случаев не требуется. Путь ваших клиентов станет короче.
Для запуска гибридного анализа нужна версия наших мобильных SDK 8.0.0 или выше. При этом серверный анализ будет запускаться в меньшинстве случаев, поскольку однозначный результат анализа на устройстве означает ненужность «второго мнения» от сервера – соответственно, ресурсов сервера потребуется меньше.
На Android при запуске анализа установите HYBRID
в Mode
. На iOS аналогично: hybrid
в mode
. Проще простого.
Если у вас остались вопросы, будем рады на них ответить.
В этой статье вы найдете описание основных типов анализов, которые может делать программное обеспечение Oz.
Liveness проверяет наличие живого человека на фото или видео.
Face Matching сравнивает два или более медиафайла, определяя уровень сходства между запечатленными на фото или видео людьми.
Black list ищет сходства между лицом человека, запечатленного на фото или видео, и лицами в заранее созданной базе фотографий.
Эти анализы доступны в Oz API как для модели SaaS, так и для локальной установки наших продуктов. Liveness и Face Matching также работают в режиме «на устройстве». Детальная информация по моделям использования находится здесь.
Проверка Liveness используется для защиты от двух видов атак.
Презентационная атака (или спуфинг-атака) – это попытка человека обмануть систему распознавания лиц «физически», демонстрируя камере видеоролик, фотографию или другой тип медиафайла, лицо на котором похоже на лицо нужного человека. К презентационным атакам относятся также использование реалистичных масок или цифровые манипуляции, такие как дипфейки.
Инъекционная атака – это попытка человека обмануть систему распознавания лиц программным образом, подменяя входящие данные с имеющейся камеры заранее снятым фото или видео или манипулируя выходными данными имеющейся камеры еще до передачи их системе распознавания лиц. Наиболее частый инструмент инъекционных атак – виртуальные камеры.
Oz Liveness распознает оба типа атак:
презентационные атаки – с помощью любых компонентов,
инъекционные атаки – с помощью Oz Liveness Web SDK.
Подробная информация о том, как противостоять описанным атакам, содержится в наших руководствах по интеграции:
Как интегрировать серверную проверку Liveness в ваше Web-приложение
Как интегрировать серверную проверку Liveness в ваше мобильное приложение
Как провести проверку медиафайла на Liveness без использования фронтенда Oz
По завершении проверки Liveness вы можете оценить качественные и количественные результаты.
Практика просить пользователей сделать что-либо на камеру во время записи видео, например улыбнуться или повернуть голову, достаточно распространена. Наши SDK тоже могут распознавать жесты, однако выполняемый жест никак не повлияет на проверку Liveness – при соответствующем анализе нейронные сети учитывают другие факторы. Более подробно это описано в статье Пассивный и активный Liveness.
Также при проверке Liveness может сохраняться best shot (лучший кадр) – это наиболее качественный кадр из всего видео, изображение, на котором лучше всего видно лицо.
С помощью биометрической проверки можно сравнить несколько медиафайлов и определить, принадлежат ли запечатленные на них лица одному и тому же человеку или нет. В качестве файлов-источников могут выступать видеоролики, изображения или скан-копии документов с фотографиями. Для успешного завершения проверки необходимо не менее двух медиафайлов.
Узнать о том, как внедрить технологию Face Matching в ваши процессы, вы можете в наших руководствах по интеграции.
В Oz API вы можете создать один или более черных списков, каждый из которых представляет собой коллекцию изображений лиц – то есть базу данных фотографий. Black list проводит сравнение лица с только что сделанного фото или только что снятого видео с лицами из этой базы данных и показывает, присутствует ли в ней этот человек.
Больше об типах анализов и о том, что они проверяют, вы можете прочитать здесь.
Цель проверки Liveness – подтвердить, что перед камерой находится реальный человек. Для пассивной проверки Liveness достаточно того, чтобы этот человек просто смотрел в камеру. Активная проверка подразумевает, что человек перед камерой также делает какой-то жест – например, улыбается, моргает или поворачивает голову. Пассивная проверка проще для пользователя, однако активная также может быть полезна в некоторых ситуациях – например, когда необходимо убедиться, что пользователь в курсе прохождения им Liveness-проверки.
В наших мобильных SDK, а также в Web SDK вы можете установить, что именно должен сделать пользователь перед камерой. Можно также объединить несколько действий в последовательность. Действия различаются по:
сложности для пользователя,
размеру итогового файла,
точности проверки Liveness,
возможности перепроверки результата оператором-человеком или в суде.
В большинстве случаев оптимальным выбором будет простое селфи, но вы можете выбрать любое другое действие в зависимости от ваших надобностей и предпочтений. Возможные действия:
Selfie (простое селфи)
Короткое видео длительностью около 0,7 секунды.
Рекомендовано в большинстве случаев. Этот вариант сочетает в себе высокую точность проверки с простотой исполнения для пользователя.
One shot (один кадр)
Аналогично Selfie, однако вместо видео для проверки берется изображение.
Рекомендуется, если самый важный фактор – размер итогового файла.
Человеку (оператору или судье) может быть затруднительно оценить результаты.
Scan (сканирование)
5-секундное видео, для которого пользователя просят проследить глазами за двигающимся текстом.
Рекомендуется в случаях, когда наиболее вероятны последующие проверки со стороны человека и требуется более длинное видео для оценки.
Улыбка
Моргание
Поднять голову
Опустить голову
Повернуть голову налево
Повернуть голову направо
Пользователю нужно сделать определенный жест в течение 5 секунд.
Используйте активный Liveness в случаях, когда вам необходимо явное подтверждение, что пользователь в курсе проводимой проверки. Продолжительность видео и размер файла зависят от того, как быстро пользователь сделает нужное действие.
Чтобы определить наличие тех или иных действий из списка для активного и пассивного Liveness, наши алгоритмы полагаются на теги. Эти теги соответствуют действиям, производимым пользователем во время записи видео. Узнать о тегах больше вы можете здесь. Таблица соответствия действий (или, другими словами, жестов) для различных компонентов Oz Liveness находится здесь.
Общая документация по работе с системой «Oz Forensics»
Oz Forensics специализируется на проверках Liveness и Face Matching (сравнении лиц): мы разрабатываем продукты, которые помогают вам удаленно идентифицировать ваших клиентов и защищаться от любых видов спуфинга – презентационных и инъекционных атак, в том числе 3D-масок, дипфейков, атак вида MITM. Вы можете добавить в свое программное обеспечение Liveness, Face Matching или и то, и другое в зависимости от того, какие именно проверки вам нужны и в каком объеме. Мы постоянно совершенствуем наши компоненты, повышая их качество и надежность их работы.
Oz Liveness распознает лицо живого человека в полученном медиафайле. Алгоритм отличает реального человека в сознании от спящего, маски, фотографии, видеоролика с изображением лица и других видов спуфинг-атак. Поддерживаются мобильные и десктопные устройства. Алгоритм сертифицирован по стандарту ISO-30137-3 и прошел тест iBeta лаборатории NIST со 100% точностью.
Наша технология Liveness защищает и от инъекционных, и от презентационных атак.
Обнаружение инъекционных атак происходит в два этапа. Сперва наш SDK проверяет среду пользователя: нет ли манипуляций с браузером, камерой, и так далее. Затем готовый медиафайл анализируют нейронные сети, обеспечивая надежную защиту даже от самых сложных инъекционных атак.
Вероятность наличия презентационной атаки мы проверяем с помощью нейронных сетей различных архитектур, используя при этом собственные алгоритмы ансамблирования для оптимальной продуктивности. На результат работы сетей влияет множество факторов: свет, отражение, четкость картинки, фон, паттерны движения и другие. Наш Liveness работает как с пассивными (без жестов), так и с активными (различные жесты) проверками – чтобы вашим клиентам было удобно эти проверки проходить, а вы при этом получали достоверные результаты. Тест iBeta проводился на пассивном Liveness, и с тех пор мы значительно улучшили качество наших проверок.
Oz Face Matching (Biometry) проводит биометрическую идентификацию человека, проверяя, принадлежит ли документ человеку, проходящему проверку, на основе биометрического сходства лиц. Модуль находит лучший кадр в снятом видео и сравнивает его с фотографией из документов. Точность в 99,99% подтверждена NIST FRVT.
Наши технологии основаны на алгоритмах машинного обучения. Мы поддерживаем и верификацию (1:1, Face Verification), и идентификацию лица (1:N, Face Identification). Для обучения нейронных сетей мы используем собственный фреймворк, построенный на новейших технологиях. Собственная база данных содержит более 4,5 миллионов уникальных лиц. В ней представлены различные этнические группы, кроме того, мы учитываем предполагаемые расу, возраст и т.д. Все это помогает нашим биометрическим моделям обеспечивать достоверные результаты сопоставления.
Наш детектор лиц работает как с фотографиями, так и с видео. Кроме того, детектор лиц превосходно справляется с обнаружением лиц на удостоверениях личности, где изображения могут быть перевернуты или иметь низкое качество.
Программное обеспечение Oz сочетает точность анализа с легкостью интеграции и использования. Чтобы дополнительно упростить процесс интеграции, мы предоставили подробное описание всех ключевых концепций нашей системы в этом разделе. Если вы готовы начать, обратитесь к нашим руководствам по интеграции: мы подготовили пошаговые инструкции, которые помогут вам легко и быстро встроить проверки Liveness и Face Matching в ваше ПО.
В этой статье вы найдете описание компонентов Oz, которые вы можете встроить в вашу инфраструктуру в различных сочетаниях – в зависимости от того, что вам требуется.
Самые распространенные сценарии интеграции описаны в разделе Краткие руководства по интеграции.
Oz API – центральный компонент системы, RESTful API-интерфейс для доступа к основной функциональности анализов Liveness и Face Matching. Преимущества Oz API:
Сохранение данных – ваши медиафайлы и анализы хранятся для будущего использования, пока вы самостоятельно их не удалите.
Возможность работать и с фото, и с видео.
Асинхронность анализов.
Безопасная аутентификация.
Гибкая настройка уровней доступа.
Дополнительную информацию вы можете найти в статьях Ключевые понятия Oz API и Руководство разработчика: Oz API. Проверить, как работает Oz API, можно с помощью нашей коллекции Postman.
«Под капотом» Oz API работают следующие компоненты:
Хранилище файлов и база данных, где сохраняется информация о медиафайлах, анализах и так далее,
Модуль Oz BIO – он отвечает за работу специально обученных нейронных сетей, распознающих лица,
Логика лицензирования.
Фронтенд-компоненты, такие как мобильные или Web SDK, подключаются к Oz API в процессе обработки серверных анализов. Они могут это делать и напрямую, и через бэкенд клиента.
iOS и Android SDK вместе называются мобильными (или нативными) SDK. Первый написан на SWIFT, второй – на Kotlin/Java. Оба они созданы для интеграции в ваши мобильные приложения.
Интерфейс мобильных SDK легко и гибко настраивается под ваши нужды, не влияя на основную функциональность: удобный для пользователей процесс съемки видео в оптимальном для последующих анализов качестве.
После записи Liveness-видео вы можете запустить анализы или на сервере, или на устройстве.
Анализ на сервере проводится либо с помощью соответствующих методов SDK, либо через Oz API – в этом случае вам нужно будет вызывать его методы из вашего мобильного приложения, либо опять же через Oz API, но уже с вашего бэкенда, куда предварительно передаются готовые видеоролики. Базовый сценарий интеграции описан здесь.
Анализ на устройстве (Liveness и Face matching) не требует взаимодействия с Oz API и даже подключения к интернету, он выполняется прямо на телефоне. Такой анализ применим при высоких требованиях к конфиденциальности, когда вы не хотите, чтобы какая-либо информация «ушла» с телефонов пользователей. Как работает такой анализ, описано здесь.
Web SDK состоит из Web Adapter и Web Plugin. Web SDK также разработан для интеграции в ваше приложение – в его веб-версию. Функциональность Web SDK аналогична таковой для iOS и Android: удобный для пользователей процесс съемки видео в оптимальном для последующих анализов качестве.
Web Adapter – часть Web SDK, которая устанавливается и конфигурируется на сервере. Web Plugin работает в контексте браузера: его вызывает ваше веб-приложение. Plugin взаимодействует с Adapter, а тот. В свою очередь – с Oz API. Дополнительное преимущество Web Plugin – защита от инъекционных атак:
Обнаружение атак путем сбора информации о контексте браузера и свойствах камеры – таким образом можно засечь виртуальную камеру или другие инструменты инъекционных атак.
Запись видео в формате, в котором запущенные на сервере нейронные сети могут наиболее эффективно отследить атаку в уже записанном видео.
Базовые сценарии интеграции Web SDK описаны здесь, а в этом разделе вы можете ознакомиться с руководством разработчика.
Web UI – веб-консоль для удобного просмотра хранящихся в API данных. Сама по себе она никакую информацию не записывает, а только предоставляет графический интерфейс для легкого взаимодействия с базой. Описание работы с интерфейсом Web UI вы найдете здесь.
Облегченное решение для биометрической идентификации личности по лицу и подтверждения подлинности присутствия с помощью Liveness.
Liveness и сравнение лиц также могут производиться с помощью модуля Oz API Lite. Этот модуль принципиально отличается от Oz API.
Никакие данные нигде не сохраняются,
Очень просто масштабировать горизонтально,
Отсутствует аутентификация и нельзя управлять доступом,
Работает только с изображениями.
Oz API Lite рекомендуется использовать для встраивания в ваш продукт при высоких требованиях к производительности (миллионы проверок в неделю).
Детальную информацию о модуле можно найти здесь.
Мы предлагаем различные модели использования компонентов Oz – в зависимости от ваших надобностей и предпочтений. Вы можете подключиться к одному из наших облаков и работать с SaaS или интегрировать наши компоненты в свою инфраструктуру – система функционирует одинаково, какую бы модель взаимодействия с ней вы ни предпочли. Здесь мы приводим несколько советов по выбору.
Работая по модели SaaS, вы подключаетесь к одному из наших облаков без необходимости установки нашего программного обеспечения у вас. SaaS в Oz – это:
Быстрый старт. Вам не нужно приобретать оборудование или выделять ресурсы для системы.
Нулевые затраты на инфраструктуру. Мы обеспечиваем все необходимые серверные компоненты.
Низкая стоимость обслуживания. Свое оборудование мы обслуживаем и обновляем сами.
Данные не отправляются за границу вашей страны. Это актуально для регионов расположения наших облаков.
В случае локальной установке все компоненты системы встраиваются в вашу инфраструктуру. Вы получаете:
Полный контроль над конфигурацией,
Хранение и обработку данных внутри вашей инфраструктуры – «наружу» информация не передается.
Анализом на устройстве вы можете воспользоваться в наших мобильных SDK для анализов Liveness и Face Matching. Применим такой анализ, например, в следующих случаях:
Медиафайлы с лицами представляют собой конфиденциальные данные и вы никуда не можете их пересылать.
Вы планируете использовать наши продукты в регионах с плохим покрытием интернет-сетями.
Какую модель выбрать, решаете только вы. Мы всегда готовы оказать помощь как в выборе, так и в сопровождении.
Для коммерческого использования нашего продукта необходима лицензия. Она определяет, какими функциями нашего ПО вы можете пользоваться – в соответствии с условиями договора. Лицензия выдается на ограниченное время и по необходимости продлевается.
Когда вы запускаете наши SDK или пользуетесь Oz BIO, система проверяет валидность лицензии. Это происходит в фоновом режиме и практически не влияет на взаимодействие пользователя с нашим продуктом.
Лицензия выписывается отдельно для каждого из компонентов:
Мобильные SDK для iOS и Android,
Web SDK (адаптер и плагин),
Oz BIO, который используется для серверных анализов при локальной установке.
Таким образом, если вы используете все три компонента нашего ПО, у вас будут три лицензии, каждая из которых будет привязана к своему компоненту.
Для выпуска лицензии на мобильные (нативные) SDK нам потребуется bundle (application) ID вашего приложения. Лицензия бывает двух видов: онлайн и офлайн. Любой из этих типов работает с любым режимом анализа: на устройстве, на сервере или гибридным.
Для онлайн-лицензии необходимо стабильное подключение к интернету. Такая лицензия в зависимости от условий вашего договора может иметь ограничения по количеству транзакций или устройств.
Счетчик транзакций увеличивается на 1 при каждом запуске съемки видео для анализа.
Счетчик устройств увеличивается на 1 при каждой установке нашего SDK на новое устройство.
При запуске SDK обращается к серверу лицензий и получает от него список параметров, в том числе показания счетчиков транзакций и устройств.
Основные преимущества онлайн-лицензии:
Не нужно перевыпускать приложение после обновления лицензии,
Не нужно перевыпускать приложение, если вы хотите добавить в лицензию новый bundle (application) ID. Все делается на лету.
Поскольку обмен данными происходит достаточно быстро, пользователи приложения с онлайн-лицензией практически не заметят разницы с тем, как если бы использовалась офлайн лицензия.
Обратите внимание: анализы на устройстве не требуют подключения к интернету, но оно все равно понадобится для проверки онлайн-лицензии.
По умолчанию мы выпускаем именно онлайн-лицензии. Если вам нужна офлайн-лицензия, пожалуйста, обратитесь к вашему менеджеру.
Этот тип лицензии может работать и без интернета: все нужные параметры содержатся в файле лицензии, и достаточно будет просо добавить этот файл в проект. Ограничений по транзакциям или устройствам для этого типа лицензии не предусмотрено.
Основное преимущество офлайн-лицензии – не нужно подключение к сети. С другой стороны, когда лицензия истечет, вам придется перевыпустить приложение, иначе SDK работать не будет.
Как добавить лицензию в SDK:
Лицензия для Web SDK аналогична офлайн-лицензии для iOS и Android. Она работает и без интернета, все параметры прописаны в самом файле лицензии, нет ограничений по транзакциям или устройствам.
Разница между офлайн-лицензией для мобильных SDK и лицензией для Web SDK – только в том, что при продлении лицензии для Web SDK приложение перевыпускать не нужно.
Для коммерческого использования мы подготовим новую лицензию и новые логин и пароль. Наши инженеры помогут вам с интеграцией и настройкой.
Гибкие возможности лицензирования нашего продукта позволяют подобрать оптимальную схему для вашего конкретного случая. Если у вас остались вопросы, будем рады на них ответить.
Из этой статьи вы узнаете, как интегрировать Oz Liveness Web SDK в клиентское Web-приложение: для съемки видео с лицом и дальнейшей его проверки на сервере.
Преимущества Oz Liveness Web SDK:
Готовый интерфейс для съемки видео, который легко встроить в приложение клиента.
Высокое качество видео, которое обеспечивает точность проверки Liveness.
Возможность обнаружения и презентационных, и инъекционных атак. Инъекционная атака – попытка выдать за свежеснятое видео другое, снятое ранее с помощью виртуальной камеры.
Возможность использования как SaaS-модели, так и локальной установки – с теми же функциями, но без необходимости слать какие-либо данные в облако.
«Под капотом» Web SDK взаимодействует с OZ API.
Мы рекомендуем начать с SaaS-модели и затем перейти к локальной установке – чтобы настроить бесшовную интеграцию Web SDK с вашими фронтендом и бэкендом. В этой инструкции приводятся шаги, благодаря которым процесс интеграции будет простым и ясным.
Получите доступ к персональной копии Web Adapter
Передайте нам информацию о доменных именах тех страниц, откуда планируется вызывать Web SDK, а также адрес электронной почты для создания аккаунта администратора. Пример:
Доменные имена:
www.yourbrand.com
www.yourbrand2.com
Электронная почта:
ivan.ivanov@yourcompany.com
Мы направим вам ссылки и логин с паролем для дальнейшей интеграции и использования Web SDK.
Логин: ivan.ivanov@yourcompany.com
Пароль: …
API: https://sandbox.ohio.ozforensics.com
Web-консоль: https://sandbox.ohio.ozforensics.com
Web Adapter: https://web-sdk.cdn.sandbox.ozforensics.com/your_company_name/
Добавьте Web Plugin на вашу страницу
В HTML-коде страницы разместите следующее. web-adapter-url
необходимо заменить на полученную от нас ссылку.
Реализуйте собственную логику для использования Web Plugin
Добавьте код, который будет запускать плагин и обрабатывать результаты:
Настройка внешнего вида плагина
Добавление дополнительного языка
Настройка поведения плагина
Настройка параметров и коллбэк-функций
Рекомендации по безопасности
Для Angular и React нужно заменить https://web-sdk.sandbox.ohio.ozforensics.com
в index.html.
Oz API обеспечивает полноценный REST API-интерфейс для биометрии лица: как сравнения лиц, так и Liveness-проверок. В этой статье описаны основные концепции Oz API.
В целях безопасности каждый вызов Oz API требует наличия в заголовке токена доступа. Чтобы получить этот токен, вызовите метод POST /api/authorize/auth
с полученными от нас логином и паролем. В ответе вы получите токен доступа. Его нужно будет указывать в заголовке X-Forensics-Access-Token
во всех последующих вызовах методов Oz API. Подробнее процесс аутентификации описан .
Для пользователей системы есть набор ролей, различающихся по предоставляемым возможностям: от роли CLIENT
, которая дает возможность проводить проверки и скачивать отчеты без прав администратора, до ADMIN
с полным доступом практически ко всем объектам системы. Детальная информация по ролям находится .
Основная сущность в Oz API – это папка (заявка): в папку вы можете загружать медиафайлы, запускать для них анализы и получать результаты не только для отдельных анализов, но и для папки в целом. В одной папке может быть любое количество медиафайлов, для каждого из которых можно назначить любое количество анализов. Анализы также могут назначаться для нескольких медиафайлов сразу.
Oz API работает и с фото-, и с видеофайлами. Видео при этом может быть как файлом в «обычном» понимании, то есть контейнером в формате MP4 или MOV, так и последовательностью кадров в ZIP-архиве. Чтобы определить тип медиафайла, Oz API использует MIME-тип файла.
Кроме типа файла, важно также понимать, что именно запечатлено на фото или видео: например, это может быть фотография лицевой стороны документа или селфи-видео, снятое человеком. Для описания содержания фото или видео используются теги, и на основе этих тегов система решает, какие анализы будут назначены для того или иного медиафайла. Наиболее часто используемые теги:
photo_id_front
– для лицевой стороны документа
photo_selfie
– для референтного фото, не являющегося документом
video_selfie_blank
– для Liveness-видео, снятого не средствами Oz Liveness SDK
если фото или видео снято средствами нашего SDK, теги выставляются автоматически
В этом разделе собраны инструкции по интеграции серверных проверок Liveness.
Для выпуска лицензии Web SDK потребуется URL ваших доменов / поддоменов, где SDK будет использоваться. Для добавления лицензии в SDK поместите файл в тот же контейнер, как описано . В редких случаях добавления лицензии возможно и .
Для локальных установок мы выпускаем отдельную лицензию с ограничением по количеству активаций, где каждая активация соответствует отдельному экземпляру установки Oz BIO. Такая лицензия может работать и онлайн, и офлайн: это зависит от того, подключены ли к интернету соответствующие сервера. При онлайн-лицензировании SDK подключается к серверу лицензий для проверки, при офлайн потребуется. Мы поможем при установке сервера и активации лицензии.
Для тестовой интеграции мы предоставляем бесплатную пробную лицензию: ее достаточно для первоначального общего знакомства с продуктом, например, проверки точности анализов на ваших наборах данных. Для мобильных SDK месячную пробную лицензию вы можете сгенерировать самостоятельно по . Если вам требуется лицензия для веб-приложения, пожалуйста, : мы выпустим лицензию и поможем вам настроить ваш экземпляр Web SDK. Вместе с лицензией вы получите логин и пароль для доступа к нашим сервисам.
Пожалуйста, обратите внимание: в целях безопасности мы рекомендуем настроить логику принятия решений на стороне вашего бэкенда. Более детальную информацию и примеры кода вы можете найти .
Шаги выше помогут вам в базовой интеграции Web SDK в ваше веб-приложение. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь или API-запросами (получение и ).
Дальнейшие шаги описаны в :
Образец кода Oz Liveness Web SDK находится . Чтобы все работало корректно, нужно заменить <web-adapter-url>
на полученную от нас ссылку на Web Adapter.
Образец кода для
Образец кода для
Поскольку анализ видео может занять несколько секунд, анализы проводятся асинхронно. Сначала вы запускаете анализ (POST /api/folders/{{folder_id}}/analyses/
), а затем следите за результатами, периодически запрашивая их с сервера, пока обработка не закончится (GET /api/analyses/{{analyse_id}}
для определенного анализа или GET /api/folders/{{folder_id}}/analyses/
для всех анализов, назначенных на папку). Кроме того, можно использовать вебхуки. С примером опроса и использования вебхука можно ознакомиться .
Более детальная информация о возможностях Oz API содержится в .
Из этой статьи вы узнаете, как интегрировать Oz Liveness Mobile SDK в клиентское мобильное приложение: для съемки видео с лицом и дальнейшей его проверки на устройстве без отправки данных на сервер.
Oz Liveness Mobile SDK – это:
Готовый интерфейс для съемки видео, который легко встроить в приложение клиента.
Высокое качество видео, которое обеспечивает точность проверки Liveness.
Для работы Oz Liveness Mobile SDK нужна лицензия, которая привязывается к bundle_id приложения, например com.yourcompany.yourapp
. Тестовую лицензию на месяц вы можете оформить самостоятельно на нашем веб-сайте, если вам требуется лицензия на более длительный срок – свяжитесь с нами.
В build.gradle
проекта добавьте строки:
В build.gradle
модуля добавьте строки
Переименуйте файл лицензии в forensics.license и поместите его в папку res/raw в вашем проекте.
Для начала съемки используйте метод startActivityForResult:
Для получения готового видео используйте метод onActivityResult
:
Готовые видео содержатся в объекте sdkMediaResult
.
Для запуска анализов используйте код ниже. mediaList
– массив объектов, полученных из sdkMediaResult
или извне (если вы снимали видео без использования нашего SDK).
Установите OZLivenessSDK через CocoaPods. Чтобы встроить SDK в проект Xcode, в Podfile добавьте:
Переименуйте файл лицензии в forensics.license и поместите его в проект.
Создайте контроллер, который будет снимать видео:
В делегате используйте протокол OZLivenessDelegate:
Для запуска анализов используйте AnalysisRequestBuilder
.
Шаги выше помогут вам в базовой интеграции наших мобильных SDK в ваше приложение. Данные анализов, выполненных в режиме «на устройстве» никуда не отправляются, поэтому, в отличие от данных серверных проверок, они не будут доступны через API или в веб-консоли. Однако обратите внимание: для проверки лицензии потребуется подключение к интернету. Мы также рекомендуем использовать наш сервис логирования – телеметрию. Записи телеметрии помогают в расследовании деталей атак. Необходимые учетные данные мы предоставим.
В этом разделе находятся инструкции по интеграции для проверок, связанных с сопоставлением лиц.
Oz API – это API для распознавания лиц: как для проверки Liveness, так и для биометрической проверки, то есть сравнения лиц между собой.
Ключевые преимущества Oz API:
Сохранение данных – ваши медиафайлы и анализы хранятся для будущего использования, пока вы самостоятельно их не удалите
Возможность работать и с фото, и с видео
Асинхронность анализов
Безопасная аутентификация
Гибкая настройка уровней доступа
Основная сущность в Oz API – это папка: в папку вы можете загружать медиафайлы, запускать для них анализы и получать результаты не только для отдельных анализов, но и для папки в целом.
Здесь мы приводим пошаговую инструкцию по проведению проверки Liveness для фото или видео лица, которое вы уже сняли с помощью бэкенда Oz.
Создание папки
Загрузка медиафайла в папку
Проверка Liveness
Получение результатов
Для вашего удобства и повышения точности анализов мы рекомендуем использовать для съемки медиа наши Web или Mobile SDK. Как это сделать, описано здесь:
Чтобы начать, вам понадобятся логин и пароль. Напишите нам, и вы отправим вам всю необходимую информацию, включая ссылки:
Логин: ivan_ivanov@yourcompany.com
Пароль: …
API: https://sandbox.ohio.ozforensics.com
Web Console: https://sandbox.ohio.ozforensics.com
Со всеми методами Oz API можно ознакомиться здесь: коллекция Postman.
Мы рекомендуем использовать токен доступа вместо логина и пароля, так как это более безопасно. Вызовите метод POST /api/authorize/auth
. В теле запроса укажите логин и пароль
В ответе вам придет токен доступа. В дальнейшем его нужно будет указывать в поле X-Forensic-Access-Token.
Внимание: если вы используете API версии 5.0.0 или новее, пропустите этот шаг.
В версии 4.0.8 и ниже проверка Oz Liveness может производиться либо по видео, либо по последовательности кадров в архиве. Таким образом, если вы хотите запустить проверку по одной фотографии, ее необходимо добавить в ZIP-архив. Oz API будет обрабатывать этот архив так же, как видео. Обратите внимание: теги к этому архиву необходимо указывать из списка тегов для видео.
Чтобы создать папку и добавить в нее ваши фото и видео, вызовите метод POST /api/folders/
и добавьте медиафайлы в тело запроса.
В поле payload
укажите следующие теги:
В случае успеха вернется код 201. В ответе будет идентификатор папки folder_id
– он понадобится в дальнейшем.
Для запуска анализа вызовите метод POST /api/folders/{{folder_id}}/analyses/
и укажите в нем folder_id из предыдущего шага. В теле запроса укажите анализ Liveness (Quality).
Метод вернет analyse_id
, который потребуется на следующем шаге.
Раз в секунду отправляйте запрос GET /api/analyses/{{analyse_id}}
с полученным ранее analyse_id
, пока состояние анализа не изменится с PROCESSING
на какое-либо другое. Когда анализ завершится, вы сможете оценить результаты:
качественные – в resolution (SUCCESS
или DECLINED
).
количественные – в results_media[0].results_data.confidence_spoofing. confidence_spoofing
; они варьируются от 0.0 до 1.0, где 0.0 означает, что на фото или видео реальный человек, а 1.0 – что система обнаружила спуфинг-атаку.
Коллекция Postman для описанных в статье шагов:
Шаги выше помогут вам выполнить Liveness-проверку через Oz API. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь веб-консолью или API-запросами.
Детальную информацию о том, как применять инструменты Oz API, вы можете найти в руководстве разработчика.
Из этой статьи вы узнаете, как интегрировать Oz Liveness Mobile SDK в клиентское мобильное приложение: для съемки видео с лицом и дальнейшей его проверки на сервере.
Oz Liveness Mobile SDK – это:
Готовый интерфейс для съемки видео, который легко встроить в приложение клиента.
Высокое качество видео, которое обеспечивает точность проверки Liveness.
«Под капотом» Oz SDK взаимодействует с OZ API.
Для интеграции необходимо связаться с нами для получения всех нужных ссылок и доступов:
Логин: ivan.ivanov@yourcompany.com
Пароль: …
API: https://sandbox.ohio.ozforensics.com
Web-консоль: https://sandbox.ohio.ozforensics.com
Для работы Oz Liveness Mobile SDK нужна лицензия, которая привязывается к bundle_id приложения, например com.yourcompany.yourapp
. Тестовую лицензию на месяц вы можете оформить самостоятельно на нашем веб-сайте, если вам требуется лицензия на более длительный срок – свяжитесь с нами.
Мы также рекомендуем использовать наш сервис логирования – телеметрию. Записи телеметрии помогают в расследовании деталей атак. Для пользователей Oz API логирование подключается автоматически. Для локальных установок мы предоставим вам необходимые учетные данные.
В build.gradle проекта добавьте строки:
В build.gradle модуля добавьте строки:
Переименуйте файл лицензии в forensics.license и поместите его в папку res/raw в вашем проекте.
Вам потребуются полученные от нас логин, пароль и адрес API-сервера.
На стадии продакшна рекомендуется использовать в коде не логин и пароль, а полученный с помощью метода авторизации на их основе токен доступа access_token
. Передайте токен в приложение:
Для начала съемки используйте метод startActivityForResult
:
Для получения готового видео используйте onActivityResult
:
Готовые видео содержатся в объекте sdkMediaResult
.
Для запуска анализов используйте код ниже. mediaList
– массив объектов, полученных из sdkMediaResult
или извне (если вы снимали видео без использования нашего SDK).
Установите OZLivenessSDK через CocoaPods. Чтобы встроить SDK в проект Xcode, в Podfile добавьте:
Переименуйте файл лицензии в forensics.license и поместите его в проект.
Вам потребуются полученные от нас логин, пароль и адрес API-сервера.
На стадии продакшна рекомендуется использовать в коде не логин и пароль, а полученный с помощью метода авторизации на их основе токен доступа access_token
. Передайте токен в приложение:
Создайте контроллер, который будет снимать видео:
В делегате используйте протокол OZLivenessDelegate:
Для запуска анализов используйте AnalysisRequestBuilder
. Метод run
«под капотом» обратится к Oz API.
Шаги выше помогут вам в базовой интеграции наших мобильных SDK в ваше приложение. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь веб-консолью или API-запросами.
В руководстве разработчика вы также найдете инструкции по настройке внешнего вида SDK и список методов SDK как для iOS, так и для Android:
В этой статье вы узнаете, как сравнить лицо из готового Liveness-видео с лицом на референтной фотографии, сохраненной в вашей базе данных.
Если вы хотите провести сравнение с использованием фото документа вместо изображения из базы данных, соответствующая инструкция находится .
К этому моменту вы, скорее всего, уже разобрались с тем, как снимать видео и проводить Liveness-проверки. Если нет, пожалуйста, ознакомьтесь со статьями:
В данном сценарии описывается, как загрузить референтное фото в ту же папку, где находится снятое ранее Liveness-видео, запустить анализ BIOMETRY и получить результаты.
folder_id
Сравнение лиц должно происходить в одной папке, поэтому вам необходим идентификатор папки, где лежит нужное вам Liveness-видео. Получите идентификатор папки, как показано ниже, и передайте его на свой бэкенд.
Для видео, записанного через наши мобильные SDK, получите идентификатор папки из результатов анализа:
Android:
iOS:
Установите в запросе теги в соответствии с тем, что за фото вы загружаете – фото документа или селфи. Это нужно сделать в поле Payload.
качественные – в resolution (SUCCESS
или DECLINED
).
количественные – в analyses.results_data.min_confidence
Коллекция Postman для описанных в статье шагов.
Пожалуйста, обратите внимание: в мобильных SDK Oz отсутствует интерфейс для съемки документов. Для этого вам потребуется ПО стороннего производителя или ваше собственное. В Web SDK возможность съемки документа есть.
Ниже описаны шаги, которые потребуется пройти для добавления сравнения лиц к Liveness-проверке.
К этому моменту вы, скорее всего, уже разобрались с тем, как снимать видео и проводить Liveness-проверки. Если нет, пожалуйста, ознакомьтесь со статьями:
Добавьте photo_id_front
в список действий для плагина.
Внимание: в данном случае мы предполагаем, что фотография (например, документа) хранится на устройстве под названием reference.jpg
.
Измените код, запускающий анализ:
Для анализа на устройстве вместо Analysis.Mode.SERVER_BASED
укажите Analysis.Mode.ON_DEVICE
.
Внимание: в данном случае мы предполагаем, что фотография (например, документа) хранится на устройстве под названием reference.jpg
.
Измените код, запускающий анализ:
Для анализа на устройстве вместо .serverBased
укажите .onDevice
.
В этом разделе вы найдете описание API.
Oz API является центральным компонентом системы, который связывает между собой все остальные компоненты. В том числе:
предоставляет единый Rest API для запуска Liveness и Biometry анализов
ведет базу запросов и выполненных анализов
архивирует входящие медиаданные
собирает телеметрию с подключенных мобильных приложений
предоставляет возможность настроить специфичные модели устройств
генерирует подробные отчеты о результатах выполнения анализов
Описание основных методов Rest API схемы:
Коллекция Postman, включающая в себя все имеющиеся на данный момент методы:
В этом разделе описано, как выполнять проверки в рамках основных сценариев использования.
Liveness – проверка «живости», того, что человек, снятый на видео, действительно живой реальный человек в сознании.
Биометрия – сравнение двух или более лиц с различных фотографий или видеороликов с целью ценить степень их схожести (один и тот же это человек или разные люди).
Лучший кадр – выбор лучшего кадра из видеоролика для использования его в бизнес-процессах как результата Liveness-проверки, «видео в виде картинки».
Проверка по ЧС (черному списку) – проверка, присутствует ли человек, чье фото или видео загружается в систему, в базе заранее загруженных фотографий.
Результаты анализов – получение результатов анализов через API в численной форме.
Информация о том, как интерпретировать результаты каждого анализа, содержится в статье .
для Android
для iOS
Android
iOS
в PlayMarket
в TestFlight
для Android
для iOS
Android
iOS
в PlayMarket
в TestFlight
Для видео, записанного через Web SDK, процесс получения идентификатора папки описан .
Вызовите POST /api/folders/{{folder_id}}/media/
. Замените folder_id
на полученный на предыдущем шаге идентификатор папки. Так ваше изображение попадет в папку с нужным видео.
Для запуска анализа вызовите POST /api/folders/{{folder_id}}/analyses/
. Замените folder_id
на полученный ранее идентификатор папки. В теле запроса укажите анализ BIOMETRY.
Раз в секунду отправляйте GET /api/analyses/{{analyse_id}}
с полученным ранее analyse_id
, пока состояние анализа не изменится с PROCESSING
на какое-либо другое. Когда анализ завершится, вы можете оценить результаты:
Эти шаги помогут вам провести сравнение лиц с использованием Oz API. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь или API-запросами.
Детальную информацию о том, как применять инструменты Oz API, вы можете найти в .
Код образца для Android находится .
Код образца для iOS находится .
Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь или API-запросами.
Методы как API, так и SDK могут гибко комбинироваться. Подробнее об этом вы можете прочитать в .
проводит и
Алгоритм "лучший кадр" выбирает из видеозаписи наиболее качественный и удачный кадр с лицом. Алгоритм вызывается дополнительно к анализу liveness.
Внимание: в некоторых случаях конфигурация позволяет использовать "лучший кадр" только для определенных жестов.
Порядок действий:
3. Запустите анализ. Убедитесь, что параметр "extract_best_shot"
имеет значение True
, как показано ниже.
В source_media
указывается media_id
из ответа предыдущего запроса. Это опционально, если требуется проверить одно из двух заранее загруженных в папку видео.
Сохраните analyse_id
из ответа.
4а. Через некоторое время проверьте результат. Дождитесь, когда поля resolution_status
и resolution
изменят статус на любой, кроме PROCESSING
, – этот статус и будет результатом.
4б. Еще один вариант: добавьте вебхук, который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint
:
В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.
Подробно статусы анализов описаны здесь.
5. Лучший кадр можно получить из ответа results_media -> output_images -> original_url
В этой статье рассказывается, как создать коллекцию методами API, как добавить в нее персону и фотографии, как потом все это удалить, а также удалить саму коллекцию. Все это можно также сделать через веб-консоль, однако здесь мы описываем только соответствующие методы API.
Коллекция в Oz API – это база фотографий лиц (персон), которые используются в анализе Blacklist для сравнения с лицом человека с только что снятого фото или видео.
Персона – это сущность в коллекции, соответствующая одному человеку. Для одной персоны может быть загружено несколько фотографий.
Коллекция создается в рамках определенной компании, таким образом, для добавления новой коллекции необходим идентификатор компании company_id
.
Если вы его не знаете, найдите компанию поиском с помощью метода GET /api/companies/?search_text=test
, где test – наименование компании или его часть. Сохраните полученный company_id
.
Для создания коллекции вызовите метод POST /api/collections/
. В теле запроса укажите название своей коллекции (alias) и company_id
нужной компании, как показано ниже:
В ответе на запрос будет идентификатор коллекции collection_id
. Он понадобится на следующем шаге.
Для добавления новой персоны в коллекцию вызовите метод POST /api/collections/{{collection_id}}/persons/
, где collection_id
– идентификатор коллекции из предыдущего шага. В запросе передайте фото персоны (или несколько фото). В Payload укажите соответствующие фото теги, как показано ниже.
В ответе вам придет идентификатор персоны person_id
- это идентификатор отдельного человека в коллекции.
В этом же запросе через payload можно добавить данные о персоне:
Вы также можете загрузить дополнительные фото персоны после ее добавления: используйте метод POST {{host}}/api/collections/{{collection_id}}/persons/{{person_id}}/images/
с соответствующим person_id
. Тело запроса заполните так же, как для метода POST /api/collections/{{collection_id}}/persons/
.
Чтобы получить информацию о всех персонах в коллекции, вызовите метод GET /api/collections/{{collection_id}}/persons/
.
Если вам нужен список фотографий для отдельной персоны, воспользуйтесь методом GET /api/collections/{{collection_id}}/persons/{{person_id}}/images/
. Обратите внимание: для каждого фото будет указан идентификатор фото person_image_id
– он потребуется вам, например, для удаления фото.
Чтобы удалить персону со всеми соответствующими ей фотографиями, используйте метод DELETE /api/collections/{{collection_id}}/persons/{{person_id}}
, указав идентификаторы коллекции и персоны. Все фото этой персоны удалятся автоматически. Персону нельзя удалить, если с ней связаны анализы – то есть если эта персона участвовала в анализе Black list и с ней были найдены совпадения. Для удаления такой персоны сперва нужно удалить соответствующие анализы методом DELETE /api/analyses/{{analyse_id}}
(потребуется analyse_id
анализа collection (Black list)).
Для удаления всех связанных с коллекцией анализов запросите список всех папок с анализом Black list: call GET /api/folders/?analyse.type=COLLECTION
. Для каждой папки из списка (GET /api/folders/{{folder_id}}/
), найдите analyse_id
нужного анализа, а затем удалите анализ – DELETE /api/analyses/{{analyse_id}}
.
Для удаления определенной фотографии той или иной персоны вызовите метод DELETE /api/collections/{{collection_id}}/persons/{{person_id}}/images/{{person_image_id}}
и укажите идентификаторы коллекции, персоны, фотографии.
Перед удалением коллекции нужно удалить информацию о всех входящих в нее персонах, а затем стереть саму коллекцию с помощью метода DELETE /api/collections/{{collection_id}}/
.
Биометрический алгоритм позволяет сравнить несколько фотографий и оценить уровень схожести людей на них. В качестве источников проверки можно передавать фото, видео и документы (с фото).
Порядок действий:
3. Запустите анализ.
Не указывайте source_media
, если хотите провести анализ всех медиа в папке в соответствии с установленными им тегам.
Сохраните analyse_id
из ответа.
4а. Через некоторое время проверьте результат.
Дождитесь, когда поля resolution_status
и resolution
изменят статус на любой, кроме PROCESSING
, – этот статус и будет результатом.
4б. Еще один вариант: добавьте вебхук, который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint
:
В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.
Подробно статусы анализов описаны здесь.
Определение живости
Алгоритм определения живости предназначен для проверки наличия живого человека по короткому видео фрагменту.
Порядок действий:
3. Запустите анализ.
В source_media
указывается media_id
из ответа предыдущего запроса. Это опционально, если требуется проверить одно из двух заранее загруженных в папку видео.
Сохраните analyse_id
из ответа.
4а. Через некоторое время проверьте результат.
Дождитесь, когда поля resolution_status
и resolution
изменят статус на любой, кроме PROCESSING
, – этот статус и будет результатом.
4б. Еще один вариант: добавьте вебхук, который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint
:
В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.
Подробно статусы анализов описаны здесь.
Здесь вы узнаете, как через API получить результаты выполненных анализов.
Результат любого анализа представляет собой число. Для анализа Biometry это число отражает степень совпадения/несовпадения лиц в загруженных вами медиафайлах по сравнению с референсами – теми файлами, которые хранятся в базе. Для анализа Liveness – возможность того, что на загруженном медиафайле не реальный живой человек в сознании, а какое-то его изображение или deepfake. Результаты анализов можно узнать и без захода в каждую заявку по отдельности – API предоставляет возможность извлечь их из JSON-ответа.
Сделайте запрос к заявке или списку заявок. Параметр with_analyses
должен быть установленTrue
.
Для типа анализа Biometry ищите значение параметра min_confidence
:
Этот параметр отражает уверенность системы в том, что на представленных медиа фигурирует один и тот же человек.
4. Для типа анализа Liveness Analysis ищите значение параметра confidence_spoofing
для нужного медиафайла:
Этот параметр показывает вероятность спуфинг-атаки – того, что на полученном видео, например, использовалась технология deepfake или вместо человека программе показали видеоролик с этим человеком.
Если нужно обработать несколько результатов анализов, запросите список заявок и сделайте парсинг JSON-ответа.
Виды и назначение биометрических анализов медиаданных в Oz Api, как интерпретировать результат.
В Oz Api существует несколько видов анализов:
Возможные качественные результаты анализов описаны здесь: Статусы API.
У каждого из анализов есть пороговое значение, определяющее статус анализа на выходе. По умолчанию этот порог равен 0.5 или 50%, для Blacklist и Biometry (Face Matching) – 0.85 или 85%.
Biometry: значение не ниже порога означает, что лица совпадают.
Blacklist: значение не ниже порога означает, что лицо с проанализированного медиафайла совпало с одним из лиц в черном списке.
Quality: значение не ниже порога означает наличие атаки.
Чтобы настроить пороговое значение под ваши нужды, обратитесь к нам.
Больше информации по интерпретации численных результатов анализов вы можете найти здесь: Результаты анализов.
Биометрический алгоритм позволяет сравнить несколько фото и оценить уровень схожести запечатленных на них людей. В качестве источников проверки можно передавать фото, видео и страницы документов с фото. Для корректной работы нужно как минимум 2 файла-источника (подробности смотрите на странице Правила назначения анализов).
Анализ выдает уровень схожести изображений лиц в процентах от 100 до 0% (1->0), где:
100% (1) – максимальная схожесть,
0% (0) – схожесть отсутствует.
Алгоритм определения живости Liveness (анализ Quality) предназначен для проверки наличия живого человека в коротком видеоролике или на фото.
Алгоритм "лучший кадр" (best shot) выбирает из видеозаписи наиболее качественный и удачный кадр с лицом. Алгоритм вызывается дополнительно к анализу liveness.
Анализ выдает возможность спуфинга*/атаки в процентах, где:
100% (1) – атака, перед камерой не живой человек,
0% (0) – перед камерой реальный человек в сознании.
*Спуфинг в биометрической области – (англ. spoofing – подмена) это ситуация, в которой человек маскируется под другого человека, используя программные и не программные средства (виртуальная камера, демонстрация изображения лица с экрана смартфона или фотографии, маски или силиконовой головы).
Анализ распознавания и проверки документов предназначен для базового определения наличия документа в кадре и проверки корректности полей документа согласно его типу. Параллельно проводится биометрический анализ (сверка фотографии из документа и селфи, сделанного человеком).
В Oz Api интегрирован сервис OCR-анализа документов от партнера. Также возможно использование другого сервиса OCR по желанию клиента. Свяжитесь с отделом продаж.
Анализ документов выдает два варианта результатов:
Документы успешно проверены,
Документы не прошли проверку.
Также выводится набор полей документа с результатами распознавания по каждому полю и результат биометрического анализа.
Алгоритм проверки по черному списку предназначен для проверки присутствия человека в базе заранее загруженных фото.
База заранее загруженных фото может называться как "Черным списком", если туда внесены фотографии лиц мошенников или других нежелательных для бизнеса людей, так и "Белым списком", если она содержит фотографии лиц VIP-персон.
Анализ по черному списку выдает процент схожести от 100 до 0% (1->0), где:
100% (1) – это максимальная схожесть, алгоритм нашел совпадения с изображениями из черного списка.
0% (0) – минимальная схожесть, алгоритм не нашел совпадений с изображениями из черного списка.
В данном разделе описаны все возможные статусы анализов в API.
INITIAL
-
-
начальное состояние
начальное состояние
PROCESSING
начальное состояние
начальное состояние
анализы в процессе
анализы в процессе
FAILED
ошибка системы
ошибка системы
ошибка системы
ошибка системы
FINISHED
успешное завершение
-
успешное завершение
DECLINED
-
отрицательный анализ
-
отрицательный анализ
OPERATOR_REQUIRED
-
требуется перепроверка
-
требуется перепроверка
SUCCESS
-
положительный анализ
-
положительный анализ
Ниже приведены разъяснения по каждому статусу.
Состояние выполнения анализа принимает следующие значения:
PROCESSING
– в обработке;
FAILED
– анализ выполнить не удалось, произошла ошибка;
FINISHED
– выполнение анализа завершено.
Если выполнение анализа завершено, результат выполнения может принимать следующие значения:
SUCCESS
– проверка пройдена успешно;
OPERATOR_REQUIRED
(кроме анализа Liveness) – требуется оператор (т.е. дополнительная проверка человеком);
Наличие/отсутствие статуса OPERATOR_REQUIRED
зависит от настроек биометрии.
DECLINED
– проверка не пройдена (лицо не совпало или совпало с лицом из ЧС в зависимости от настроек, атака, лицо не совпало с лицом в документах).
Если анализ не завершен, результат наследует значение из analyse.state
: PROCESSING
(еще в обработке) / FAILED
(возникли ошибки, завершить анализ не удалось).
Заявка – это папка, в которой лежат медиафайлы для анализа. Если анализы еще не завершены, в resolution_status
вы увидите одно из следующих значений:
INITIAL
– анализы не назначены;
PROCESSING
– анализы выполняются;
FAILED
– выполнить анализы не удалось (произошли ошибки);
FINISHED
– папка обработана, выполнение анализов завершено.
Результат заявки – консолидированный результат всех анализов, назначенных для медиафайлов из этой папки. Обратите внимание: результат заявки представляет собой результат группы анализов, завершившейся последней. Если все назначенные анализы выполнены, результат будет:
SUCCESS
– все хорошо, проверки пройдены успешно;
OPERATOR_REQUIRED
(кроме анализа Liveness) – анализы со статусом DECLINED
отсутствуют, но один или больше анализов завершились со статусом OPERATOR_REQUIRED
;
DECLINED
– один или больше анализов завершились с результатом DECLINED
, то есть проверка не прошла.
Анализы, которые вы отправляете в одном POST
-запросе, объединяются в группу. Результат группы анализов определяется по "худшему" из результатов анализов в этой группе: INITIAL
> PROCESSING
> FAILED
> DECLINED
> OPERATOR_REQUIRED
> SUCCESS
, где SUCCESS
означает, что все проверки прошли успешно без каких-либо ошибок.
Каждый загружаемый медиафайл требуется маркировать специальными тегами. Это необходимо для корректной работы алгоритмов распознавания. Теги для видео и фото отличаются друг от друга.
Для видеофайлов в Системе должны быть указаны следующие типы тегов:
Тег, определяющий тип данных «видео»:
video_selfie
Тег, определяющий ориентацию видео:
orientation_portrait
– портретная ориентация;
orientation_landscape
– ландшафтная ориентация.
Тег, определяющий действие на видео:
video_selfie_left
– поворот головы налево;
video_selfie_right
– поворот головы направо;
video_selfie_down
– наклон головы вниз;
video_selfie_high
– наклон головы вверх;
video_selfie_smile
– улыбка;
video_selfie_eyes
– моргание;
video_selfie_scan
– сканирование;
video_selfie_oneshot
– анализ по одному кадру;
video_selfie_blank
– нет действия.
Алгоритмы распознают файлы с тегами из этого списка как подходящие для выполнения анализов Quality (Liveness) и Biometry.
Важно: в версии API 4.0.8 или старше, чтобы отправить на анализ Quality (Liveness) изображение, а не видео, необходимо поместить его в архив .zip, установить тип файла SHOTS_SET
и поставить один из тегов video_
, иначе Quality изображение проигнорирует.
Пример корректного набора тегов видеофайла с действием «моргание»:
Для фотофайлов в Системе должны быть указаны следующие типы тегов:
Тег для селфи:
photo_selfie
– тег, определяющий тип фотографии «селфи»
Теги для фотографий или сканов удостоверений личности:
photo_id
– тег, определяющий тип фотографии «документы»;
photo_id_front
– фото лицевой стороны документа;
photo_id_back
– фото обратной стороны документа (любые другие анализы, кроме Документов, файлы с этим тегом игнорируют).
Важно: в версии API 4.0.8 или старше, чтобы отправить на анализ Quality (Liveness) изображение, а не видео, необходимо поместить его в архив .zip, установить тип файла SHOTS_SET
и поставить один из тегов video_
, иначе Quality изображение проигнорирует.
Пример корректного набора тегов фотофайла «селфи»:
Пример корректного набора тегов фотофайла с лицевой стороной документа:
Пример корректного набора тегов фотофайла с обратной стороной документа:
Роли указываются при создании новых пользователей и созданы для ограничения доступа к API при интеграции с прямым доступом.
Каждая роль комбинируется с флагами is_admin
и is_service
и в зависимости от них может менять поведение.
Флаг is_service
предназначен для создания сервисных пользователей учётных записей для входа автоматизированным способом. При авторизации под таким пользователем выдаётся токен с долгим временем жизни (по умолчанию 5 лет). Время жизни токенов для обычных пользователей составляет 15 минут (параметризуется), по умолчанию время жизни токенов продлевается при каждом обращении (параметризуется).
ADMIN
– Администратор системы. Имеет неограниченный доступ ко всем ресурсам системы через API, кроме принятия решений по анализам;
OPERATOR
– Системный оператор. Имеет неограниченный доступ на просмотр заявок и может принимать решения по анализам, с помощью кнопки Принять решение (обычно используется в случае появления статуса OPERATOR_REQUIRED)
;
CLIENT
– Клиентская учетная запись. В рамках своей компании имеет доступ к загрузке медиафайлов, запуску анализов, просмотру результатов в своих папках, выгрузке отчетности по заявке;
is_admin
– если установлен, пользователь получает доступ к данным всех пользователей внутри своей компании
can_start_analyse_biometry
– дополнительный флаг для ограничения доступа к проведению биометрии (по умолчанию разрешено)
can_start_analyse_quality
– дополнительный флаг для ограничения доступа к проведению анализов Liveness (по умолчанию разрешено)
CLIENT ADMIN
– администратор компании, который может управлять пользователями и аккаунтом своей компании. CLIENT ADMIN
может просматривать данные всех пользователей и редактировать их, просматривать статистику, удалять файлы в папках, шаблоны отчетов вместе с вложениями, сами отчеты и отдельные анализы, а также может добавлять шаблоны отчетов и изображения в ЧС. Роль есть только в Web UI, вне Web UI она заменяется на роль CLIENT
c флагом is_admin = true
.
CLIENT OPERATOR
– имеет такие же права, как и OPERATOR
, но в рамках своей компании.
Подробное описание уровней доступа приведено ниже.
Создание
Чтение
Обновление
Удаление
ADMIN
+
+
+
+
OPERATOR
-
+
-
-
CLIENT
-
данные своей компании
-
-
CLIENT SERVICE
-
данные своей компании
-
-
CLIENT OPERATOR
-
данные своей компании
-
-
CLIENT ADMIN
-
данные своей компании
данные своей компании
данные своей компании
Создание
Чтение
Обновление
Удаление
ADMIN
+
+
+
+
OPERATOR
+
+
+
-
CLIENT
свои папки
свои папки
свои папки
-
CLIENT SERVICE
в рамках своей компании
в рамках своей компании
в рамках своей компании
-
CLIENT OPERATOR
в рамках своей компании
в рамках своей компании
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Обновление
Удаление
ADMIN
+
+
+
+
OPERATOR
+
+
+
-
CLIENT
-
в рамках своей компании
-
-
CLIENT SERVICE
-
в рамках своей компании
-
-
CLIENT OPERATOR
в рамках своей компании
в рамках своей компании
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Удаление
ADMIN
+
+
+
OPERATOR
+
+
-
CLIENT
-
в рамках своей компании
-
CLIENT SERVICE
-
в рамках своей компании
-
CLIENT OPERATOR
в рамках своей компании
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Удаление
ADMIN
+
+
+
OPERATOR
+
+
-
CLIENT
по своим папкам
в своих папках
-
CLIENT SERVICE
в рамках своей компании
в рамках своей компании
-
CLIENT OPERATOR
в рамках своей компании
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Обновление
Удаление
ADMIN
+
+
+
+
OPERATOR
+
+
+
-
CLIENT
в своих папках
в своих папках
-
-
CLIENT SERVICE
в рамках своей компании
в рамках своей компании
в рамках своей компании
-
CLIENT OPERATOR
в рамках своей компании
в рамках своей компании
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Обновление
Удаление
ADMIN
+
+
+
+
OPERATOR
-
+
-
-
CLIENT
-
в рамках своей компании
-
-
CLIENT SERVICE
в рамках своей компании
в рамках своей компании
-
-
CLIENT OPERATOR
-
в рамках своей компании
-
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Удаление
ADMIN
+
+
+
OPERATOR
-
+
-
CLIENT
-
в рамках своей компании
-
CLIENT SERVICE
в рамках своей компании
в рамках своей компании
-
CLIENT OPERATOR
-
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Удаление
ADMIN
+
+
+
OPERATOR
-
+
-
CLIENT
-
в рамках своей компании
-
CLIENT SERVICE
-
в рамках своей компании
-
CLIENT OPERATOR
-
в рамках своей компании
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
Создание
Чтение
Обновление
Удаление
ADMIN
+
+
+
+
OPERATOR
-
+
свои данные
-
CLIENT
-
свои данные
свои данные
-
CLIENT SERVICE
-
в рамках своей компании
свои данные
-
CLIENT OPERATOR
-
в рамках своей компании
свои данные
-
CLIENT ADMIN
в рамках своей компании
в рамках своей компании
в рамках своей компании
в рамках своей компании
Анализы могут быть назначены медиафайлам как вручную пользователем – например, через выбор сценария Liveness в приложении – так и автоматически, когда выбор не производится и пользователь запускает все возможные анализы для папки с медиафайлами.
В последнем случае система автоматически определяет, какие именно анализы должны запускаться для того или иного медиафайла. При этом она исходит из того, какие теги указаны при загрузке файлов. Если файлы загружаются через web-консоль, теги расставляет пользователь, если ведется съемка через SDK – теги проставляются в процессе съемки также автоматически. Также роль играет тип медиафайлов: IMAGE
(фото)/VIDEO
/SHOTS_SET
(приравнивается к видео). Если медиафайл не подходит под требования того или иного анализа, этот анализ такой медиафайл игнорирует.
Список настроек по умолчанию приведен ниже. Для изменения конфигурации, пожалуйста, напишите нам.
Анализ выполняется для всех медиафайлов вне зависимости от воспроизводимого в них жеста (теги жестов начинаются с video_selfie
).
Внимание: в версии API 4.0.8 и ниже, чтобы отправить на анализ Quality (Liveness) изображение, а не видео, необходимо поместить его в архив .zip, установить тип файла SHOTS_SET
и поставить один из тегов video_
, иначе Quality изображение проигнорирует.
Анализ выполняется для всех фото и видео.
Если в папке будет менее двух подходящих медиафайлов, система вернет ошибку. Если более двух, то будут сравниваться все возможные пары, и система выдаст результат по паре с наименьшим сходством.
Анализ выполняется только при наличии заранее созданного черного списка для всех присутствующих в папке / указанных в качестве источника фото и видео.
Это дополнительная опция к анализу Quality. Анализ выполняется для всех медиафайлов, подходящих для анализа Quality. Соответствующую настройку можно отключить.
Сверка лица с документами (анализ “Documents”) выполняется для медиафайлов с тегами photo_id_front
, photo_id_back
(документы) и photo_selfie
(селфи). Результат сверки будет положительным, если есть фото лица и хотя бы один валидный документ (с фотографией того же лица) из списка ниже:
паспорт
водительские права
заграничный паспорт
Код ошибки
Сообщение
Описание
202
Could not locate face on source media [media_id]
Лицо на медиа не найдено. Это может быть результатом неправильно выставленных (например photo_id_back
) или отсутствующих тегов.
202
Biometry. Analyse requires at least 2 media objects to process
Алгоритмы не нашли хотя бы двух файлов для сравнения. Возможно, найден только один медиафайл или медиафайлам не установлены теги.
202
Processing error - did not found any document candidates on image
Документы на прилагаемых медиа не найдены – либо подгружено не фото документа, либо теги подгруженных медиафайлов отсутствуют / некорректны (не содержат photo_id
в начале).
5
Invalid/missed tag values to process quality check
Установленные для медиафайлов теги относятся к тем, которые анализ Quality игнорирует (скорее всего, они начинаются с photo_
, а не video_*
).
5
Invalid/missed tag values to process blacklist check
Установленные для медиафайлов теги не могут быть обработаны алгоритмами Blacklist. Возможно, медиафайлам не установлены теги.
Как получить и обновить токены доступа.
Чтобы получить токены доступа, нужно выполнить POST
-запрос на /authorize/auth/
. В теле запроса нужно указать полученные от нас электронную почту и пароль в составе credentials
, а также API-адрес в качестве адреса хоста.
Body
Результатом аутентификации пользователя является пара access_token
и expire_token
.
access_token – ключ (набор символов), предъявление которого является пропуском к ресурсам системы. Обращение к ним происходит с указанием в заголовках полученного access_token
.
headers = {‘ X-Forensic-Access-Token’: <access_token>}
Действие access_token ограничено во времени и регулируется настройками:
для сервисных учетных записей – OZ_SESSION_LONGLIVE_TTL
(по умолчанию 5 лет),
для всех остальных – OZ_SESSION_TTL
(по умолчанию 15 минут).
expire_token предназначен для обновления пары access_token и expire_token.
если expire_date
> текущей даты, то expire_date
сессии устанавливается в значение текущей даты + временная дельта настроек, описанных выше.
Чтобы обновить пару access_token
и expire_token
, нужно выполнить POST
-запрос на адрес authorize/refresh/
c expire_token
в теле запроса и X-Forensic-Access-Token
в заголовках.
Положительным результатом будет ответ с новой парой access_token
и expire_token
.
Предыдущая пара access_token
и expire_token
будет удалена из базы данных при первой аутентификации по новой паре access_token
и expire_token
.
Код ошибки
Сообщение об ошибке
Причина
400
Could not locate field for key_path expire_token from provided dict data
expire_token
отсутствует в теле запроса.
401
Session not found
Не существует сессии с переданным expire_token
.
403
You have not access to refresh this session
Пользователь, который делает запрос, не является владельцем сессии переданного expire_token
.
Чтобы провести анализы для ваших медиафайлов, необходимо поместить их в папку – либо существующую, либо новую, созданную с помощью Oz API. Для каждого файла необходимо указать теги: они описывают, что это за файл и какие анализы к нему применимы.
Если у вас версия API 4.0.8 или старше, обратите внимание: если вы хотите загрузить фото с тем, чтобы позднее отправить его на анализ Liveness, поместите это фото в ZIP-архив и укажите для него теги, специфичные для видео.
Создание папки и добавление в нее медиафайлов: POST
/api/folders/
Добавление файлов в существующую папку: POST
/api/folders/{{folder_id}}/media/
Файлы должны быть добавлены в теле запроса, теги – в поле payload.
Пример заполнения payload для пассивного Liveness и фотографии лицевой стороны документа:
Пример использования (Postman):
В случае успеха в ответе вернется информация о папке.
Вебхуки (webhook) упрощают процесс получения результатов анализов. После запуска анализов не нужно инициировать опрос с проверкой, завершены ли анализы. Вместо этого в запросе на анализы добавьте вебхук, который обратится к вашему веб-сайту, когда результаты будут готовы.
При создании папки добавьте нужный веб-адрес (resolution_endpoint
) в раздел payload в теле запроса:
Каждый раз, когда анализы для этой папки будут готовы, вам будет приходить уведомление. Вебхук-запрос будет содержать результаты анализов и информацию о папке, для которой они выполнялись.
Объекты системы имеют иерархическую структуру подчинения.
На верхнем уровне находится Компания. Это значит, что один экземпляр установки Oz API может обслуживать пользователей нескольких не зависящих друг от друга компаний.
Пользователь является инициатором любого запроса. В зависимости от роли пользователя могут присутствовать определенные ограничения на те или иные действия.
При выполнении Пользователем запроса на Анализ система автоматически создает Папку, помещает туда все отправленные пользователем Медиафайлы, а затем запускает собственно Анализ (один или несколько). Анализы применяются к медиафайлам из папки в соответствии с Правилами назначения анализов. Требования к медиафайлам перечислены здесь.
Каждый объект имеет набор полей для работы и идентификации на уровне REST API запросов.
Поле
Тип
Описание
time_created
Timestamp
время создания объекта (кроме пользователя и компании)
time_updated
Timestamp
время изменения объекта
meta_data
Json
technical_meta_data
Json
технические поля, зарезервированные для работы модулей
Поле
Тип
Описание
company_id
UUID
код компании в системе
name
String
наименование компании в системе
Поле
Тип
Описание
user_id
UUID
код пользователя в системе
user_type
String
first_name
String
имя
last_name
String
фамилия
middle_name
String
отчество
String
email, который является логином пользователя
password
String
can_start_analyze_*
String
company_id
UUID
код компании пользователя
is_admin
Boolean
is_service
Boolean
Поле
Тип
Описание
folder_id
UUID
код папки в системе
resolution_status
ResolutionStatus
Поле
Тип
Описание
media_id
UUID
код медиа
original_name
String
оригинальное имя файла (в файловой системе клиента)
original_url
Url
HTTP-ссылка на файл на сервере API
tags
Array(String)
Поле
Тип
Описание
analyse_id
UUID
код анализа
folder_id
UUID
код папки
type
String
results_data
Json
данные результата анализа
Для работы с Oz API Lite вы можете использовать свободно распространяемое ПО Postman. Скачайте клиентскую часть Postman по и установите ПО.
Загрузите JSON-файл с коллекцией Postman:
После запуска клиента необходимо импортировать актуальную коллекцию для Postman, для этого в клиенте нажмите кнопку Import:
Нажмите files для выбора файла, найдите нужный JSON и нажмите Открыть:
Импортированная коллекция со всеми методами взаимодействия появится в интерфейсе Postman:
Рассказываем, как работать с Oz API Lite.
Oz API Lite – это версия Oz API, менее требовательная к ресурсам, более простая и производительная. Повышение производительности достигается благодаря отсутствию дополнительных функций (таких, как хранение данных или сбор статистики), а также тому, что анализы запускаются на уровне образа API Lite.
Только один компонент, который нужно кластеризовать.
Нет хранилища данных – более высокий уровень защиты информации.
Более простая архитектура – более короткие сроки реализации проекта.
Для проверки корректности работы процессора Liveness используйте GET /v1/face/liveness/health
.
Для проверки корректности работы процессора Biometry используйте GET /v1/face/pattern/health
.
Чтобы выполнить liveness-проверку лица на изображении, вызовите POST /v1/face/liveness/detect
(на вход принимает изображение, на выходе выводит оценку присутствия презентационной атаки на этом изображении).
Для сравнения лиц на двух изображениях вызовите POST /v1/face/pattern/extract_and_compare
(принимает два изображения, извлекает из них биометрические шаблоны и сравнивает эти шаблоны). Также возможно сравнение одного изображения с несколькими с помощью POST /v1/face/pattern/extract_and_compare_n
.
Полный список методов Oz API Lite с детальной информацией по ним вы можете найти .
При создании какого-либо у вас может возникнуть необходимость хранить для него дополнительные данные, те, которые отсутствуют в базовом списке его параметров. Такие данные называются метаданными. Вы можете хранить любую нужную вам информацию в разделе meta_data
в приведенном ниже формате ("название поля": "соответствующие полю данные"):
Метаданные можно добавить к большинству объектов системы. Список объектов с соответствующими им методами для добавления метаданных приведен ниже. Также метаданные можно указать при создании объекта.
Метаданные могут вам потребоваться, например, если вы захотите группировать папки (заявки) по людям или лидам. Например, для подсчета конверсии в случаях, когда один лид делает несколько попыток пройти анализ Liveness, добавьте идентификатор этого лида в метаданные соответствующих папок.
Чтобы добавить идентификатор клиента iin
к объекту папки, в тело запроса внесите соответствующую запись:
Вы можете передать в это поле идентификатор клиента и затем использовать его для получения запросов по одному и тому же клиенту или подсчета уникальных клиентов (одинаковый идентификатор = один и тот же клиент, разные идентификаторы = разные клиенты). Идентификатор может быть номером телефона, документа или любым другим уникальным идентификатором. Идентификатор будет отображаться в отчете отдельной колонкой.
Если вы храните в метаданных персональные данные, убедитесь, что при этом не нарушаются соответствующие законы.
Метаданные можно также добавить через SDK, а затем работать с ними с помощью методов API. Добавление метаданных через SDK описано в соответствующих разделах:
В этом разделе вы найдете описание SDK для десктопных и мобильных устройств.
Начиная с версии 1.1.0, Oz API Lite может принимать изображения и шаблоны в формате base64, а также возвращать в этом формате шаблоны биометрических проверок. Для включения этой опции необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
С помощью этого метода можно узнать, какие версии компонентов используются (начиная с версии 1.1.1).
Call GET /version
Входные параметры
-
GET localhost/version
В случае успешного ответа метод возвращает сообщение со следующими параметрами.
Тип контента HTTP-ответа: “application/json”.
С помощью этого метода можно проверить, корректно ли работает процессор.
Вызов метода: GET /v1/face/pattern/health
Входные параметры
-
GET localhost/v1/face/pattern/health
В случае успешного ответа метод возвращает сообщение со следующими параметрами.
Тип контента HTTP-ответа: “application/json”.
Метод предназначен для извлечения биометрического шаблона из изображения. Тип контента HTTP-запроса: “image/jpeg” или “image/png”
Вызов метода: POST /v1/face/pattern/extract
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает биометрический шаблон.
Тип контента HTTP-ответа: “application/octet-stream”.
Если в headers запроса передавалось поле Content-Transfer-Encoding со значением base64, то шаблон тоже вернется в base64.
Метод предназначен для сравнения двух биометрических шаблонов.
Тип контента HTTP-запроса: “multipart/form-data”.
Вызов метода: POST /v1/face/pattern/compare
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает результат сравнения двух шаблонов.
Тип контента HTTP-ответа: “application/json”.
Метод объединяет два описанных выше метода extract и compare – извлекает биометрический шаблон из изображения и сравнивает его с другим биометрическим шаблоном, который также передается в запросе.
Тип контента HTTP-запроса: “multipart/form-data”.
Вызов метода: POST /v1/face/pattern/verify
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает результат сравнения двух биометрических шаблонов.
Тип контента HTTP-ответа: “application/json”.
Метод объединяет два описанных выше метода extract и compare. Он извлекает биометрические шаблоны из двух изображений, сравнивает их и в качестве ответа передает результат сравнения.
Тип контента HTTP-запроса: “multipart/form-data”.
Вызов метода: POST /v1/face/pattern/extract_and_compare
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает результат сравнения двух извлеченных биометрических шаблонов.
Тип контента HTTP-ответа: “application/json”.
Метод предназначен для сравнения биометрических шаблонов в режиме 1:N.
Тип контента HTTP-запроса: “multipart/form-data”.
Вызов метода: POST /v1/face/pattern/compare_n
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает результаты сравнений 1:N .
Тип контента HTTP-ответа: “application/json”.
Метод объединяет два описанных выше метода extract и compare_n. Метод извлекает биометрический шаблон из изображения и сравнивает его cо списком биометрических шаблонов, которые также передаются в запросе.
Тип контента HTTP-запроса: “multipart/form-data”.
Вызов метода: POST /v1/face/pattern/verify_n
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает результаты сравнений 1:N .
Тип контента HTTP-ответа: “application/json”.
Метод объединяет два описанных выше метода extract и compare_n. Он извлекает биометрические шаблоны из изображения-кандидата и изображений из списка, а затем сравнивает их в режиме 1:N.
Тип контента HTTP-запроса: “multipart/form-data”.
Вызов метода: POST /v1/face/pattern/extract_and_compare_n
Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64
.
В случае успешного ответа метод возвращает результаты сравнений 1:N .
Тип контента HTTP-ответа: “application/json”.
Тип контента HTTP-ответа: “application/json”.
Вызов метода: GET /v1/face/liveness/health
Входные параметры отсутствуют.
GET localhost/v1/face/liveness/health
В случае успешного ответа метод возвращает сообщение со следующими параметрами.
Тип контента HTTP-ответа: “application/json”.
Метод detect
предназначен для обнаружения презентационных атак. Он ищет лицо на каждом изображении или видео (с версии 1.2.0), отправляет найденные лица на анализ и возвращает результат.
Поддерживаются следующие Content-Type:
image/jpeg
или image/png
для изображения;
multipart/form-data
для изображений, видео или архивов. Для добавления дополнительных параметров, влияющих на анализ, используйте payload
.
Запуск метода:POST /{version}/face/liveness/detect
.
Принимает изображение в формате JPEG или PNG; без payload
.
Принимает запрос multipart/form-data.
Название каждого медиафайла должно быть уникальным, например, media_key1
, media_key2
.
Параметры payload
должны быть в виде JSON, помещенного в поле payload
.
Временные идентификаторы будут удалены после выполнения запроса.
Для извлечения лучшего кадра укажите в блоке analyses
в payload
extract_best_shot
= true
(как в примере запроса ниже). В таком случае API Lite после анализа ваших медиафайлов вернет в ответе лучший кадр – изображение в base64 будет в analysis->output_images->image_b64
. Лучший кадр можно извлекать только из видео или архивов.
Также в блоке analyses
вы можете изменить порог для прохождения Liveness в параметре threshold_spoofing
: если итоговая оценка выше значения этого параметра, результат анализа будет DECLINED, в ином случае проверка Liveness будет считаться пройденной.
Тип контента HTTP-ответа: “application/json”.
Исправили ошибку, иногда возникавшую при генерации параметров time_created
и folder_id
метода Detect.
Обновления безопасности.
Обновили модели.
С помощью метода Liveness detect теперь можно отправить не более 10 файлов в одном запросе, при этом размер каждого файла не должен превышать 15 МБайт.
Обновили список жестов, которые поддерживают отправку лучшего кадра (best_shot): включили повороты, наклон и подъем головы, а также улыбку и моргание.
Обновили метод : теперь он работает также и с видео и архивами.
Добавили
API Lite теперь работает и с base64
Улучшили биометрическую модель
Добавили режим 1:N
Добавили политику CORS
Подготовили первую версию документации
Переработали сообщения об ошибках, теперь они более информативны
Упростили операции Liveness/Detect
Переработали ядро
Добавили операции для защиты от спуфинга
Добавили операцию extract_and_compare
Для работы с Oz API вы можете использовать свободно распространяемое ПО Postman. Скачайте клиентскую часть Postman по и установите ПО.
Загрузите JSON-файл с нужной коллекцией Postman:
Oz API 5.1.0 работает с этой же коллекцией.
3.33
После запуска клиента необходимо импортировать актуальную коллекцию для Postman, для этого в клиенте нажмите кнопку Import:
Нажмите files для выбора файла, найдите нужный JSON и нажмите Открыть:
Импортированная коллекция со всеми методами взаимодействия появится в интерфейсе Postman:
Полный список запросов вы можете найти в , в приведен порядок запросов в наиболее распространенных случаях. В данной статье перечислены коды ответов на запросы и ошибки при обработке запросов.
Коды ответов в диапазоне 2XX соответствуют корректно отработавшему запросу (например, при получении данных возвращается код 200, при добавлении новой сущности – 201, при корректном удалении – 204 и так далее);
Коды ответов в диапазоне 4XX соответствуют ошибке при обработке запроса, произошедшей на стороне вызывающего клиента (например, 404 – обращение к несуществующему ресурсу);
Коды ответов в диапазоне 5XX соответствуют ошибке при обработке запроса на стороне самой системы (например, при временной недоступности базы данных).
Каждая ошибка, возникшая при обработке запроса на стороне системы, помимо соответствующего HTTP-кода ошибки содержит также описание самой ошибки в теле ответа с указанием следующих JSON-полей:
error_code
– целочисленный код ошибки;
error_message
– сообщение с описанием возникшей ошибки (используется только для отладочных задач и расследования инцидентов);
details
– детали ошибки (приводятся в произвольном формате, специфичном для каждого отдельного типа ошибки). Необязательное поле.
Пример ответа сервера:
Коды ошибок:
Журнал изменений API Core.
API теперь может извлекать из видеороликов, на которых пользователь делает жесты, кадры с действиями. Доработка выполнена в связи с вводом новых регуляторных требований к биометрической идентификации в Казахстане. Требования к версиям других компонентов описаны .
Подготовили новый шаблон отчета, который также соответствует этим требованиям.
Миниатюры для нового отчета генерируются на основе кадров с действиями.
Обновили коллекцию Postman. Опубликовали новую коллекцию и на .
Добавили метод проверки настроек таймзоны: GET {{host}}/api/config
Добавили параметры к методу GET {{host}}/api/event_sessions
:
time_created
time_created.min
time_created.max
time_updated
time_updated.min
time_updated.max
session_id
session_id.exclude
sorting
offset
limit
total_omit
При создании папки с SHOT_SET соответствующее видео будет в media.video_url
.
Исправили ошибку, из-за которой CLIENT ADMIN не мог установить новый пароль для пользователя из своей компании.
Обновления безопасности.
Добавили возможность сравнения лица с большой базой фотографий, содержащей миллион фото и более, – Face Identification 1:N.
Анализ Liveness (QUALITY) теперь игнорирует фото с тегами photo_id
, photo_id_front
или photo_id_back.
Обновления безопасности.
Анализ Liveness (QUALITY) теперь работает и с изображениями.
Исправили ошибку, из-за которой анализ Liveness мог завершиться с успехом при отсутствии медиафайлов в папке (заявке).
Для extract_best_shot
изменили значение по умолчанию на True
.
Архивы RAR больше не поддерживаются.
По умолчанию в analyses.results_media.results_data
теперь один параметр: confidence_spoofing
. Если для обратной совместимости нужны все три (confidence_replay
, confidence_liveness
и confidence_spoofing
), это можно настроить.
Обновили PDF-отчет, который грузится по умолчанию.
Название PDF-отчета теперь содержит folder_id
.
Обновления безопасности.
Настроили авторотацию логов.
Добавили консольную команду для удаления пользователя.
Генерацию предпросмотра видео теперь можно отключить.
Токен доступа для роли ADMIN теперь действителен 5 лет.
Добавили идентификатор папки folder_id
к названию отчета.
Исправили ошибки и оптимизировали работу API.
Система теперь удаляет ненужные кадры, оставшиеся после раскадровки видео.
Добавили новые методы GET and POST для media/<media_id>/snapshot/
Заменили шаблон отчета по умолчанию.
Превью для набора кадров теперь показывается с исходным соотношением сторон.
ADMIN и OPERATOR автоматически добавляются в system_company.
Для User, Folder, Analyse, Media добавили атрибут company_id
.
Для Analysis добавили атрибут group_id
.
Для Folder и Analysis добавили атрибут system_resolution
.
resolution_status
теперь возвращает значение system_resolution
.
Убрали метод PATCH для коллекций.
Добавили фильтр по resolution_status
для Folder Analyses [LIST] и по analyse.resolution_status
для Folder [LIST].
Для Folder, User, Company добавили журналирование.
Обновили алгоритм удаления компании.
Улучшили логику обработки черных списков.
Исправили несколько багов.
Модули Photo Expert и KYC удалены.
Обновили конечную точку для изменения пароля пользователя: POST
users/user_id/change-password вместо PATCH
.
Доступен лог для Celery.
Добавили в параметры запроса Folder [LIST] фильтры: analyse.time_created
, analyse.results_data
для анализа Documents, results_data
для анализа Biometry, results_media_results_data
для анализа QUALITY. Для включения фильтра установите True
в параметре запроса with_results_media_filter
.
Добавили новый атрибут для пользователей – is_active
(по умолчанию True). Если выставлено False, пользователь не может совершать никакие действия.
Добавили новую ошибку, которая выводится в ответ на попытку заблокированного пользователя что-либо сделать.
Добавили превью наборов изображений.
Теперь наборы можно сохранять на диск через атрибуты original_local_path
, original_url
.
Добавили атрибут original_info
для набора изображений – в нем хранятся сумма md5, размер, mime-тип.
Исправили отчет для наборов изображений.
Добавили “проверку здоровья” системы - метод GET api/healthcheck
. Можно задать перечень имен / очередей задач на проверку активности.
Поправили ссылку на миниатюру для набора изображений.
Первое изображение в наборе теперь устанавливается как миниатюра для превью набора.
Поменяли политики – максимальное количество попыток анализа увеличили до 3 и ввели настраиваемую задержку.
Поменяли алгоритм вызова callbacks
.
Переработали и описали инструменты командной строки.
Провели рефакторинг модулей.
Поменяли подметод и метод для удаления персональных данных – с delete_pi
на /pi
и с POST на DELETE соответственно.
Улучшили алгоритм удаления персональных данных.
В папки, которые были очищены, теперь нельзя добавлять медиа.
Поменяли название подметода авторизации с auth
на auth_restore
.
Добавили тег video_selfie_oneshot.
Добавили настройки валидации пароля.
Добавили задержки для auth
, rest_unauthorized
, rps_with_token
(OZ_THROTTLING_RATES
в настройках, по умолчанию отключено).
Теперь можно проверять доступы пользователя к статичным файлам (OZ_USE_PERMISSIONS_FOR_STATIC
в настройках, по умолчанию – False).
Добавили новый подметод для заявки - /delete_pi
. С его помощью можно удалить в заявке все персональные данные и связанные с ними анализы.
Добавили ошибку, которая появляется при попытке синхронизировать пустые коллекции.
Добавили параметр fields_to_check
к анализу документов (по умолчанию проверяет все поля).
Добавили параметр double_page_spread
к анализу документов (по умолчанию включен).
Поправили синхронизацию коллекций.
Теперь можно продлить токен авторизации с помощью expire_token
.
Добавили поддержку application/x-gzip.
Переименовали shots_set.images в shots_set.frames.
Добавили набор функций по управлению сессиями пользователя.
Пользователи могут менять владельцев заявок (в соответствии со своими доступами).
Поменяли правила зависимостей.
Поправили баг с продлением авторизации.
Переместили функционал синхронизации коллекций в oz_core
.
Упростили работу с наборами изображений. Один набор – один архив.
Улучшено распознавание документов для Dockered-версии.
Переместили проверку тега ориентации в анализ Quality.
Добавили шаблон отчета по умолчанию для ролей Admin и Operator.
Обновили биометрическую модель.
Исправили ошибку с созданием объекта набора изображений без изображений.
Добавили новый формат обмена данными для модуля распознавания документов.
Если для персон в коллекции проводились какие-либо анализы, коллекцию теперь нельзя удалить.
Добавили к анализам временные метки time_task_send_to_broker
, time_task_received
, time_task_finished
.
Добавили новый механизм авторизации – соединение с Active Directory через LDAP.
Добавили новый тип медиа в заявку: "shots_set"
Персону в коллекции теперь нельзя удалить, если с ней производились какие-либо анализы.
Переименовали поле заявки resolution_suggest в operator_status.
Добавили к заявке текстовое поле operator_comment.
Доступ на редактирование полей заявки operator_status и operator_comment есть у Admin, Operator, Client Service, Client Operator и Client Admin.
Доступ на удаление заявки, медиа из заявки, шаблонов отчетов и их вложений, самих отчетов и анализов теперь есть только у Admin и Client Admin (в рамках компании).
Исправили удаление отчетов – теперь они удаляются при удалении их автора.
Поправили доступы – Client теперь может просматривать только свой профиль.
Client Operator теперь может редактировать только свой профиль.
Client больше не может удалять свои заявки, любые медиа, отчеты или анализы.
Client Service может создавать персон в коллекциях и просматривать отчеты в рамках компании.
У ролей Client, Client Admin, Client Operator теперь есть доступы на просмотр профилей пользователя только внутри компании.
Запустили альфа/бета-тестирование.
Теперь поддерживаем заголовок с датой просрочки токена авторизации.
Добавили поддержку модуля распознавания документов для стенделона и Docker.
Добавили роль Client Operator – это Client Admin, но без доступа к управлению аккаунтом и компанией.
И Client Admin, и Client Operator могут менять статус анализа.
Создавать, редактировать и удалять что-либо в моделях Collection и CollectionPerson в рамках компании теперь могут только Admin и Client Admin.
При создании отчета по заявке теперь проверяются доступы пользователя к шаблонам.
Поправили код статуса, который возвращается при создании коллекции, с 200 на 201.
Oz Mobile SDK – Software Developer’s Kit системы Oz Forensics, обеспечивающий удобную интеграцию с мобильными приложениями для регистрации и биометрической идентификации клиентов.
В настоящее время мобильные SDK работают в портретном режиме.
Мастер-лицензия – это оффлайн-лицензия, с которой можно использовать мобильные SDK без ограничений по bundle_id
, в отличие от обычных лицензий. Для получения мастер-лицензии нужно создать пару ключей, как описано ниже. Отправьте нам публичный ключ по электронной почте, и вскоре после этого мы отправим вам мастер-лицензию.
Вашему приложению нужно будет подписать свой bundle_id
приватным ключом. Мобильные SDK проверяют подпись с помощью публичного ключа из мастер-лицензии. Действие таких лицензий ограничено по времени.
В этом разделе описано, как создавать приватный и публичный ключи.
Чтобы создать приватный ключ, последовательно запустите следующие команды:
Вы получите два файла:
privateKey.der – приватный ключ .der;
privateKey.txt – privateKey.der в кодировке base64. Содержимое этого файла используется в качестве подписи bundle_id хостового приложения.
Чтобы создать публичный ключ, запустите команду:
Вы получите публичный ключ publicKey.pub. Отправьте его нам по электронной почте. В ответ мы пришлем вам лицензию.
Инициализация SDK:
Для Android 6.0 (API 23) и старше:
Добавьте зависимость implementation 'com.madgag.spongycastle:prov:1.58.0.0'
;
Перед созданием подписи вызовите Security.insertProviderAt(org.spongycastle.jce.provider.BouncyCastleProvider(), 1)
Перед инициализацией SDK создайте закодированную base64 подпись для bundle_id
хостового приложения с помощью приватного ключа.
Пример создания подписи:
Передайте подпись как параметр masterLicenseSignature
во время инициализации SDK.
Если подпись невалидна, инициализация продолжится по стандартной схеме: проверка включенных в лицензию bundle_id
.
любые
пароль, указывается при добавлении нового пользователя или при изменении пароля. Если пользователя не admin
, необходимо указать поле password_old
см.
статус последнего папки
список для этого файла
(BIOMETRY\QUALITY\DOCUMENTS)
Метаданные можно также и менять, и удалять. Все нужные методы описаны в нашей
Еще один частый случай использования метаданных связан с безопасностью: вы обрабатываете результат анализа на своем бэкенде, но не хотите при этом использовать идентификатор папки при обращении к ней. Добавьте отдельный идентификатор (transaction_id
) в метаданные папки, и вы сможете искать нужную информацию по нему. Подробно этот случай использования описан .
Спецификация команд OpenSSL:
Наименование параметра
Тип
Описание
core
String
Версия API Lite.
tfss
String
Версия TFSS.
models
[String]
Массив версий моделей, где каждая запись содержит информацию о названии модели и ее версии.
Наименование параметра
Тип
Описание
status
Int
0 – биометрический процессор работает корректно.
3 – биометрический процессор неработоспособен.
message
String
Сообщение.
Наименование параметра
Тип
Описание
Не указывается*
Stream
Обязательный параметр. Изображение для извлечения биометрического шаблона. В заголовочном поле “Content-Type” должен быть указан тип контента.
Наименование параметра
Тип
Описание
Не указывается*
Stream
Биометрический шаблон, полученный из изображения
Наименование параметра
Тип
Описание
bio_feature
Stream
Обязательный параметр. Первый биометрический шаблон.
bio_template
Stream
Обязательный параметр. Второй биометрический шаблон.
Наименование параметра
Тип
Описание
score
Float
Результат сравнения двух шаблонов
decision
String
Рекомендуемое решение по полученному score.
approved – положительный результат. Лица совпадают.
operator_required – требуется дополнительная проверка оператора.
declined – негативный результат. Лица не совпадают.
Наименование параметра
Тип
Описание
sample
Stream
Обязательный параметр. Изображение для извлечения биометрического шаблона.
bio_template
Stream
Обязательный параметр. Биометрический шаблон, с которым производится сравнение.
Наименование параметра
Тип
Описание
score
Float
Результат сравнения двух шаблонов
decision
String
Рекомендуемое решение по полученному score.
approved – положительный результат. Лица совпадают.
operator_required – требуется дополнительная проверка оператора.
declined – негативный результат. Лица не совпадают.
Наименование параметра
Тип
Описание
sample_1
Stream
Обязательный параметр. Первое изображение.
sample_2
Stream
Обязательный параметр. Второе изображение
Наименование параметра
Тип
Описание
score
Float
Результат сравнения двух извлеченных шаблонов
decision
String
Рекомендуемое решение по полученному score.
approved – положительный результат. Лица совпадают.
operator_required – требуется дополнительная проверка оператора.
declined – негативный результат. Лица не совпадают.
Наименование параметра
Тип
Описание
template_1
Stream
Обязательный параметр.
Биометрический шаблон – кандидат(1).
templates_n
Stream
Обязательный параметр.
Список(N) биометрических шаблонов. Каждый биометрический шаблон должен быть передан отдельно, но необходимо чтобы имя параметра было templates_n. Также требуется, чтобы в заголовке был передан filename.
Наименование параметра
Тип
Описание
results
List[JSON]
Список результатов сравнения кандидата со списком(N). Для каждого сравнения из списка(N) результат имеет следующие поля:
*filename
String
Значение filename в заголовке соответствующего шаблона из списка(N).
*score
Float
Результат сравнения кандидата с соответствующим шаблоном из списка(N).
*decision
String
Рекомендуемое решение по полученному score.
approved - положительный результат. Лица совпадают.
operator_required - требуется дополнительная проверка оператора.
declined - негативный результат. Лица не совпадают.
Наименование параметра
Тип
Описание
sample_1
Stream
Обязательный параметр.
Изображение - кандидат(1).
templates_n
Stream
Обязательный параметр.
Список(N) биометрических шаблонов. Каждый биометрический шаблон должен быть передан отдельно, но необходимо чтобы имя параметра было templates_n. Также требуется, чтобы в заголовке был передан filename.
Наименование параметра
Тип
Описание
results
List[JSON]
Список результатов сравнения кандидата со списком(N). Для каждого сравнения из списка(N) результат имеет следующие поля:
*filename
String
Значение filename в заголовке соответствующего шаблона из списка(N).
*score
Float
Результат сравнения кандидата с соответствующим шаблоном из списка(N).
*decision
String
Рекомендуемое решение по полученному score.
approved - положительный результат. Лица совпадают.
operator_required - требуется дополнительная проверка оператора.
declined - негативный результат. Лица не совпадают.
Наименование параметра
Тип
Описание
sample_1
Stream
Обязательный параметр.
Изображение – кандидат(1).
samples_n
Stream
Обязательный параметр.
Список(N) изображений. Каждое изображение должно быть передано отдельно, но необходимо чтобы имя параметра было samples_n. Также требуется, чтобы в заголовке был передан filename.
Наименование параметра
Тип
Описание
results
List[JSON]
Список результатов сравнения кандидата со списком(N). Для каждого сравнения из списка(N) результат имеет следующие поля:
*filename
String
Значение filename в заголовке соответствующего изображения из списка(N).
*score
Float
Результат сравнения кандидата с соответствующим изображением из списка(N).
*decision
String
Рекомендуемое решение по полученному score.
approved – положительный результат. Лица совпадают.
operator_required – требуется дополнительная проверка оператора.
declined – негативный результат. Лица не совпадают.
Коды ответов HTTP
Значение параметра “code”
Описание
400
BPE-002001
Неверный Content-Type HTTP-запроса
400
BPE-002002
Неверный метод HTTP-запроса
400
BPE-002003
Не удалось прочитать *биометрический образец
400
BPE-002004
Не удалось прочитать биометрический шаблон
400
BPE-002005
Неверный Content-Type части multiparted HTTPзапроса
400
BPE-003001
Не удалось извлечь биометрический шаблон
400
BPE-003002
На биометрическом образце* отсутствует лицо
400
BPE-003003
На биометрическом образце* присутствует более одного лица
500
BPE-001001
Внутренняя ошибка биопроцессора
400
BPE-001002
Ошибка TFSS. Необходимо вызвать метод biometry health.
Наименование параметра
Тип
Описание
status
Int
0 - биометрический процессор работает корректно.
3 - биометрический процессор неработоспособен.
message
String
Сообщение.
Коды ответов HTTP
Значение параметра “code”
Описание
400
LDE-002001
Неверный Content-type HTTP-запроса
400
LDE-002002
Неверный метод HTTP-запроса
400
LDE-002004
Не удалось прочитать биометрический образец*
400
LDE-002005
Неверный Content-Type части multiparted HTTP-запроса
500
LDE-001001
Внутренняя ошибка БП обнаружения витальности
400
LDE-001002
Ошибка TFSS. Необходимо вызвать метод liveness health.
Код ошибки
Значение
Описание
0
UNKNOWN
Неизвестная серверная ошибка.
1
NOT ALLOWED
Вызван недопустимый метод, обычно сопровождается 405 статусом HTTP-ответа при вызове HTTP-метода, не поддерживаемого ресурсом (например PATCH, если ресурс поддерживает только GET/POST).
2
NOT REALIZED
Вызван web-сервис, который не реализован на сервере, может встретиться в случае, если сервис по документации присутствует, однако фактически не реализован (временно или на постоянной основе).
3
INVALID STRUCTURE
Некорректная структура запроса, обычно встречается, если не удается найти обязательный параметр или тело запроса передано в некорректном формате.
4
INVALID VALUE
Некорректное значение параметра, например может возникать в случаях: передана строка, которая должна иметь формат UUID, но при этом она не конвертируется корректно, передано отрицательное значение смещения/ширины окна при постраничном запросе.
5
INVALID TYPE
Некорректный тип данных для параметра.
6
AUTH NOT PROVIDED
Не указан токен авторизации.
7
AUTH INVALID
Указан несуществующий авторизационный токен.
8
AUTH EXPIRED
Авторизационный токен просрочен.
9
AUTH FORBIDDEN
Недостаточно прав для запрошенной операции.
10
NOT EXIST
Запрашиваемый ресурс не существует (аналог HTTP status_code = 404).
11
EXTERNAL SERVICE
Ошибка взаимодействия с внешней информационной системой.
12
DATABASE
Критическая ошибка работы с базой данных на стороне сервера.
Объект
Метод API
Пользователь
PATCH /api/users/{{user_id}}
Папка (заявка)
PATCH /api/folders/{{folder_id}}/meta_data/
Медиафайл
PATCH /api/media/{{media_id}}/meta_data
Анализ
PATCH /api/analyses/{{analyse_id}}/meta_data
Коллекция
PATCH /api/collections/{{collection_id}}/meta_data/
and, for a person in a collection,
PATCH /api/collections/{{collection_id}}/persons/{{person_id}}/meta_data
Для авторизации в Oz API используйте адрес API и токен доступа, как показано ниже.
Мы рекомендуем указывать адрес API в вашем приложении на экране, предшествующем проверке Liveness. После установки адреса происходит служебный вызов API, и если вы устанавливаете адрес при запуске или инициализации приложения, нагрузка на сервер может быть слишком высокой.
Второй вариант: логин и пароль.
Мы рекомендуем использовать метод аутентификации по токену доступа, как более безопасный.
По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для телеметрии:
Очистка авторизации:
Проверка наличия сохраненного access-токена Oz API:
LogOut:
Сгенерируйте тестовую лицензию самостоятельно здесь (внимание, страница на английском языке) или свяжитесь с нами по email для выпуска продуктивной лицензии. Для подготовки лицензии потребуется applicationId
(bundle id
).
Для добавления файла лицензии в SDK вызовите метод OzLivenessSDK.init
с одним из параметров LicenseSources
:
LicenseSource.LicenseAssetId
должен содержать путь к файлу forensics.license
, расположенному в проекте в папке res/raw.
LicenseSource.LicenseFilePath
должен содержать пусть к файлу на устройстве (вне проекта).
Если при обработке лицензии возникнут ошибки, вы получите сообщение с описанием этих ошибок. Если ошибок нет, система выведет данные о лицензии. Вы также можете запросить эти данные с помощью метода getLicensePayload
.
License error. License at (your_URI) not found
Отсутствует файл лицензии. Проверьте наименование и путь к файлу.
License error. Cannot parse license from (your_URI), invalid format
Файл лицензии поврежден. Пожалуйста, отправьте его нам по электронной почте.
License error. Bundle company.application.id is not in the list allowed by license (bundle.id1, bundle.id2)
Идентификатор приложения отсутствует в списке разрешенных для данной лицензии идентификаторов. Проверьте написание, если все корректно, нужна новая лицензия.
License error. Current date yyyy-mm-dd hh:mm:ss is later than license expiration date yyyy-mm-dd hh:mm:ss
Срок действия лицензии истек. Пожалуйста, свяжитесь с нами.
License is not initialized. Call 'OzLivenessSDK.init before using SDK
Лицензия не устанавливалась. Вызовите метод OzLivenessSDK.init
, как показано выше в этой статье
Для старта записи видео используется метод startActivityForResult
:
actions
– перечень действий пользователя при записи видео.
Для представления Fragment код приведен ниже. LivenessFragment
– Fragment для экрана Liveness.
Для получения результатов записи видео используется метод onActivityResult
:
sdkMediaResult
– объект с результатами записи видео (OzAbstractMedia) для дальнейшего использования при взаимодействии с Oz API.
sdkErrorString
– описание ошибок в случае их возникновения.
Если наш SDK используется только для съемки, пропустите шаг "Выполнение проверок".
Если пользователь прервет запись видео (закроет экран), resultCode
примет значение Activity.RESULT_CANCELED
.
Пример кода для обработки:
Если наш SDK используется только для съемки, пропустите этот шаг.
Чтобы выполнить проверку, нужно загрузить в систему медиафайлы, а затем запустить для них анализы.
Как интерпретировать результаты анализов, описано здесь: Типы анализов.
Пример работы:
Для удаления медиафайлов после выполнения всех проверок используйте метод clearActionVideos
.
Для добавления метаданных используйте метод addFolderMeta
.
В структуре Analysis можно передать дополнительные параметры, например, для извлечения на сервере лучшего кадра.
Чтобы использовать медиафайлы, снятые не Oz Android SDK, укажите путь к ним в структуре OzAbstractMedia:
Для добавления медиафайлов в определенную папку используйте метод setFolderId:
Применять настройки рекомендуется при старте приложения.
Чтобы настроить интерфейс Oz Liveness, воспользуйтесь UICustomization
. Полный список полей находится здесь.
По умолчанию SDK использует локаль устройства. Чтобы сменить локаль, используйте код ниже:
В build.gradle
проекта добавьте строки:
В build.gradle
модуля добавьте строки (VERSION – версия, которую вы планируете добавить. Список версий можно найти в Журнале изменений):
Обратите внимание: размер выходного файла будет больше.
Вне зависимости от выбранного режима, добавьте еще:
Если вы при обновлении с прежних версий (до 6.4.2 включительно) хотите сохранить привычный для клиентов дизайн, сбросьте настройки интерфейса экрана съемки до значений по умолчанию и примените следующие параметры (приведены только те параметры, которые нужно изменить):
Для работы SDK требуется лицензия. Сгенерируйте тестовую лицензию самостоятельно здесь (внимание, страница на английском языке) или свяжитесь с нами по email для выпуска продуктивной лицензии. Для подготовки лицензии потребуется bundle id
. Есть два способа добавить лицензию в проект:
Переименуйте файл в forensics.license и поместите его в проект. Прописывать путь в этом случае не нужно.
Обновление лицензии для уже работающего приложения или в том случае, если вы хотите держать лицензию вне проекта:
или
LicenseSource
– источник лицензии, LicenseData
– информация о лицензии. В этот метод встроена проверка наличия активной лицензии, если такая лицензия есть – будет использоваться она, а не та, путь к которой вы указали. Для принудительной замены лицензии используйте метод setLicense
.
Если при обработке лицензии возникнут ошибки, вы получите сообщение с описанием этих ошибок. Если ошибок нет, система выведет данные о лицензии. Вы также можете запросить эти данные с помощью OZSDK.licenseData
.
License error. License at (your_URI) not found
Отсутствует файл лицензии. Проверьте наименование и путь к файлу.
License error. Cannot parse license from (your_URI), invalid format
Файл лицензии поврежден. Пожалуйста, отправьте его нам по электронной почте.
License error. Bundle company.application.id is not in the list allowed by license (bundle.id1, bundle.id2)
Идентификатор приложения отсутствует в списке разрешенных для данной лицензии идентификаторов. Проверьте написание, если все корректно, нужна новая лицензия.
License error. Current date yyyy-mm-dd hh:mm:ss is later than license expiration date yyyy-mm-dd hh:mm:ss
Срок действия лицензии истек. Пожалуйста, свяжитесь с нами.
License is not initialized.
Лицензия не устанавливалась. Добавьте лицензию в проект.
Для добавления OZLivenessSDK в ваше приложение через менеджер зависимостей CocoaPods и интеграции OZLivenessSDK в проект Xcode добавьте в Podfile:
VERSION (опционально, по умолчанию устанавливается последняя версия) – версия, которую можно найти в Журнале изменений.
Начиная с версии 8.1.0, можно использовать упрощенный код:
По умолчанию устанавливается полная версия SDK (с режимами анализа на сервере и на устройстве). Если нужен только серверный анализ, код будет выглядеть так:
Для версий 8.1.0 и выше:
Установка через SPM возможна для SDK версий 8.7.0 и новее.
Добавьте через SPM зависимости пакетов по ссылке: https://gitlab.com/oz-forensics/oz-mobile-ios-sdk (здесь описано, как добавить зависимости). Файл OzLivenessSDK обязателен для добавления, OzLivenessSDKOnDevice можно не добавлять, если вы не используете анализы на устройстве.
Вы также можете добавить файлы SDK в проект вручную.
Скачайте отсюда следующие файлы и добавьте их в проект:
OZLivenessSDK.xcframework,
OZLivenessSDKResources.bundle,
OZLivenessSDKOnDeviceResources.bundle (если вы не используете анализы на устройстве, этот файл можно не скачивать).
Скачайте TensorFlow здесь: потребуется версия 2.11.
Убедитесь, что:
оба файла xcframework отображаются в Target-Build Phases -> Link Binary With Libraries и Target-General -> Frameworks, Libraries, and Embedded Context;
файл(ы) bundle отображаются в Target-Build Phases -> Copy Bundle Resources.
Создайте контроллер для съемки видео:
action
– перечень действий пользователя при записи видео.
По окончании съемки вызывается метод onOZLivenessResult(results:[OZMedia])
:
Метод возвращает результаты съемки в виде массива объектов[
OZMedia
]
, которые используются на следующем шаге для выполнения проверок.
Если наш SDK используется только для съемки, пропустите шаг "Выполнение проверок".
Если пользователь прервет запись видео (закроет экран), появится ошибка failedBecauseUserCancelled
.
Журнал изменений для Android.
Исправили ошибку, из-за которой некоторые записанные SDK видео были зелеными.
Исправили проблемы с кодеками, появлявшиеся на некоторых моделях смартфонов.
Обновления доступности для пользователей с инвалидностью согласно требованиям WCAG: можно настроить озвучивание подсказок SDK и элементов управления.
Упростили прохождение проверки для жестов, включающих движение головы.
Сжатие больших видео теперь происходит позже: на этапе закрытия экрана Liveness.
Исправили ошибку, из-за которой изображение с закрытыми глазами могло быть выбрано в качестве лучшего кадра.
Исправили незначительные ошибки.
Обновления телеметрии.
Обновления безопасности и телеметрии.
Обновления безопасности.
Обновления безопасности.
Обновления безопасности и телеметрии.
Исправили ошибку RuntimeException
, появлявшуюся в режиме серверного Liveness на некоторых моделях телефонов.
Обновления безопасности.
Обновления безопасности.
Исправили ошибки.
Подняли версию плагина Android Gradle до 8.0.0.
Улучшили работу SDK.
Улучшили работу SDK.
Обновления безопасности.
Обновления безопасности.
Обновления безопасности.
Обновления безопасности.
При попытке передать пустую строку в качестве аргумента для метода setFolderId
теперь показывается информативная ошибка.
Исправили ошибку с бесконечно крутящимся спиннером, который появлялся при переключении пользователя на другое приложение во время прохождения проверки Liveness.
Исправили несколько ошибок, появлявшихся только на определенных моделях смартфонов.
Улучшили модель Liveness для проверки на устройстве.
Обновления безопасности.
Длительность жеста Селфи теперь можно менять (размер видеофайла также изменится).
Вы можете заменить логотип Oz своим, если ваша лицензия это предусматривает.
Убрали паузу после жеста Сканирование.
Если размер записанного видеофайла больше 10 Мбайт, видео будет сжато.
Обновления безопасности и журналирования.
Изменили алгоритм валидации для мастер-лицензии.
Снизили требования к compileSdkVersion
с 34 до 33.
Обновления безопасности.
Обновили модель Liveness для проверки на устройстве.
Исправили ошибки.
Улучшили работу механизмов лицензирования.
Улучшили работу SDK.
Исправили ошибки.
Добавили возможность использования мастер-лицензии, которая работает с любым bundle_id
.
Исправили ошибку со сжатием видео при гибридном анализе, которая возникала на некоторых моделях телефонов.
Исправили ошибки.
Добавили в структуру Analysis
поле sizeReductionStrategy
. Оно определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа.
Настройка toFrameGradientColor
для кастомизации подсказки hintAnimationCustomization
больше не используется. Вместо нее используйте hintGradientColor
.
Сообщения для получаемых из API ошибок теперь детализированы.
Если несколько анализов назначаются на папку одновременно, система отправляет их группой. Таким образом, выбирается “худший” результат среди всех анализов, а не последний назначенный. Прочитать про отправку анализов группой можно здесь.
В анализе Liveness для количественного результата теперь берется максимальный из вычисленных. Прочитать о результате можно здесь.
Обновили модель Liveness для проверки на устройстве.
Добавили португальский язык (бразильский вариант).
Вы теперь можете добавить язык или изменить текущие переводы самостоятельно. Как это сделать, описано здесь.
Если медиафайл по каким-то причинам не загрузился, система повторяет загрузку.
Добавили новый метод для получения идентификатора телеметрии (логирования): getEventSessionId
.
Методы auth
и login
больше не используются. Вместо них, пожалуйста, используйте метод setApiConnection
.
OzConfig.baseURL
и OzConfig.permanentAccessToken
больше не используются.
Если пользователь закрывает экран во время съемки видео, соответствующая ошибка обрабатывается SDK.
Исправили ошибки и улучшили работу SDK.
Исправили ошибки.
При установке baseURL
= null
SDK теперь работает корректно.
Версии зависимостей SDK приведены в соответствие с версией Kotlin.
Добавлен новый тип анализа – гибридный (сейчас работает только для Liveness). В случае спорных результатов анализа на устройстве проводится дополнительная проверка на сервере.
Требования к версии Kotlin понижены до 1.7.21.
Обновлены модели для анализов на устройстве.
На некоторых моделях телефонов исправлена ошибка fatal device.
Текст подсказки теперь может выходить за границы рамки для лица по горизонтали (для основной камеры).
Фото, снятые во время однокадрового анализа, теперь передаются на сервер в оригинальном размере.
Удален класс OzAnalysisResult
. В параметре onSuccess
метода AnalysisRequest.run
вместо списка OzAnalysisResult
теперь передается структура RequestResult
.
Все исключения перенесены в папку com.ozforensics.liveness.sdk.core.exceptions
(детальная информация ниже).
Связанные с AnalysisRequest классы перенесены в com.ozforensics.liveness.sdk.analysis
(детальная информация ниже).
Прекращена поддержка методов:
Удаленный метод
Замена
OzLivenessSDK.uploadMediaAndAnalyze
AnalysisRequest.run
OzLivenessSDK.uploadMedia
AnalysisRequest.Builder.uploadMedia
OzLivenessSDK.runOnDeviceBiometryAnalysis
AnalysisRequest.run
OzLivenessSDK.runOnDeviceLivenessAnalysis
AnalysisRequest.run
AnalysisRequest.build(): AnalysisRequest
-
AnalysisRequest.Builder.addMedia
AnalysisRequest.Builder.uploadMedia
Обновили экран настроек.
Добавили настройки для фона подсказки.
Добавили новые формы рамки (круг, квадрат).
Добавили виджет для защиты от мошенничества и набор настроек к нему. С помощью этого виджета вы можете уведомлять пользователей, что ведется съемка видео для, например, отправления заявки на кредит. Таким образом вы сможете защитить пользователей, если мошенники попытаются убедить их подтвердить такой запрос.
Метод OzLivenessSDK::init
при передаче параметра StatusListener
теперь работает корректно.
Изменили анимацию жеста "Сканирование".
Обратите внимание: с этой версии используется Kotlin 1.8.20.
Улучшили работу алгоритмов SDK.
Обновили модель для выполнения анализов на устройстве.
Обновили анимацию для солнечных очков / маски.
Немного уменьшили размеры овала для Liveness.
Исправили ошибку, появлявшуюся при выполнении серверных анализов после использования для авторизации permanentAccessToken.
Добавили возможность анимации подсказки.
Полосу статуса и системные кнопки теперь можно скрывать (работает с версии 7.0.0).
В метод OzLivenessSDK.init
теперь нужно первым параметром передавать context
.
OzAnalysisResult
теперь корректно показывает оценки по серверным анализам.
Исправлены ошибки инициализации и некорректного отображения настроек кастомизации, а также ошибки некорректной авторизации на версиях Android < 7.1.1.
Исправили ошибку с вылетами на версиях Android <6.
Поправили расположение овала для некоторых моделей телефонов.
Улучшили работу SDK.
Обновили систему безопасности.
Добавили некоторые внутренние улучшения.
Метод addMedia
больше не работает. Для загрузки медиафайлов воспользуйтесь методом uploadMedia
.
Из соображений безопасности мы теперь поставляем два типа библиотек: sdk только для серверного анализа и full для серверного анализа и анализа на устройстве.
Заменили OzCustomization
на UICustomization
.
Значительно расширили список настроек кастомизации SDK и обновили дизайн. Если вы хотите вернуть дизайн из прошлых версий, соответствующие настройки описаны здесь.
Добавили испанский язык.
Исправили ошибку с зависаниями на некоторых моделях телефонов.
SDK теперь снимает видео в разрешении 720p (с 6.4.2.3).
Наименование режимов анализа приведено в соответствие с iOS: SERVER_BASED и ON_DEVICE.
Исправили ошибку с отображением настроек локализации.
Теперь в качестве Liveness-экрана можно использовать Fragment.
Добавили новое поле params
в структуру Analysis
– с его помощью можно задавать дополнительные параметры, например, для извлечения на сервере лучшего кадра. Алгоритм "лучший кадр" выбирает из видеозаписи наиболее качественный и удачный кадр с лицом.
Жесты отдаления и приближения больше не поддерживаются.
Обновили биометрическую модель.
Добавили новую упрощенную структуру AnalysisRequest
– теперь конструировать запросы на анализы стало проще и удобнее.
Добавили модуль для выполнения анализов локально на устройстве. Подключите модуль:
Для запуска анализов biometry и liveness используйте соответствующие методы класса OzLivenessSDK
: runOnDeviceBiometryAnalysis
и runOnDeviceLivenessAnalysis
.
Liveness теперь работает плавнее.
На устройствах Xiaomi больше не зависает камера.
Оптимизировали преобразования изображений с камеры.
В OzLivenessSDK.uploadMedia
добавили параметр metadata
и методы OzLivenessSDK.uploadMediaAndAnalyze
для передачи metadata
в папки.
Добавили функции для инициализации SDK с лицензиями LicenseSources
: LicenseSource.LicenseAssetId
иLicenseSource.LicenseFilePath
. Для инициализации используйте метод OzLivenessSDK.init
.
Добавили возможность получения информации о лицензии после инициализации val licensePayload = OzLivenessSDK.getLicensePayload().
Добавили киргизский язык.
Добавили функции для локальных анализов.
Добавили конфигурацию рамки вокруг лица.
Номер версии на экране Liveness теперь отображается корректно.
Добавили поддержку основной камеры.
Добавили жест OneShot
.
Добавили состояний в OzAnalysisResult.Resolution
.
Добавили метод uploadMediaAndAnalyze
– он загружает список изображений/видео на сервер и сразу отправляет их на анализ.
OzMedia
превратили в OzAbstractMedia
и добавили подклассы изображений и видео.
Исправили ошибки камеры на некоторых устройствах.
Токен доступа теперь обновляется автоматически.
Переименовали accessToken
в permanentAccessToken
.
Добавили правила R8.
Упростили процесс конфигурации. Свойства config
теперь можно менять.
Исправили овальную рамку.
Убрали неиспользуемые параметры params из AnalyseRequest
.
Убрали лимит по умолчанию на количество попыток.
Убрали свойства конфигурации - baseURL
, accessToken
и так далее. Заменили их на свойство config, которое нужно инициализировать с помощью OzConfig.Builder.
Добавили поддержку лицензий. Их нужно устанавливать как raw ресурсы и передавать в OzConfig
через setLicenseResourceId.
Убрали методы, которым нужен был контекст. Заменили аналогами.
Анализ изображений теперь работает лучше.
Убрали ненужные зависимости.
Поправили ошибки журналирования.
Работа с OZ Mobile SDK в операционной системе «Android»
Чтобы начать пользоваться нашим SDK, нужно выполнить следующие шаги.
Добавьте SDK в проект, как описано здесь.
Получите лицензию на SDK – сгенерируйте тестовую самостоятельно на нашем сайте или запросите «боевую» по электронной почте. Для лицензии потребуется application id
. Добавьте лицензию в проект, как описано здесь.
Подключите SDK к API. Это необязательный шаг, он выполняется, только если вам нужно обрабатывать какие-либо данные на сервере. Если вы используете режим анализа на устройстве, никакие данные никуда не передаются, и подключение к API не нужно.
Для съемки видео используйте методы, описанные здесь – вы получите медиафайлы, которые потом можно будет отправить на анализ.
Запустите нужные вам проверки для полученных на предыдущем шаге медиафайлов. Здесь описано, как выполнять проверки.
Если вы хотите настроить внешний вид SDK, здесь написано, как это делается.
Рекомендуемая версия Android: 5+ (чем новее смартфон, тем быстрее выполняются анализы).
Рекомендуемые версии компонентов:
Версия Gradle
7.5.1
Версия Kotlin
1.7.21
Версия AGP
7.3.1
Java Target Level
1.8
Версия JDK
17
Мы не поддерживаем эмуляторы.
Доступные языки: EN, RU, ES, HY, KK, KY, TR.
Исходные коды примеров приложений с использованием Oz Liveness SDK расположены в репозитории GitLab:
Список методов и полей SDK:
Актуальную сборку демо-приложения Вы можете загрузить по ссылке.
Синглтон (шаблон-одиночка) для Oz SDK.
Удаляет все видеоролики.
Параметры
-
Возвращает
-
Создает намерение (intent) для запуска Liveness.
Параметр
Тип
Описание
actions
Список возможных действий
Возвращает
-
Запрашивает ошибку из намерения (intent) OnActivityResult (при наличии).
Параметр
Тип
Описание
data
Intent
Проверяемое намерение
Возвращает
Текст ошибки.
Запрашивает информацию о лицензии SDK.
Параметры
-
Возвращает
Полную информацию о лицензии – объект LicensePayload.
Запрашивает медиафайлы из намерения (intent) OnActivityResult.
Параметр
Тип
Описание
data
Intent
Проверяемое намерение
Возвращает
Массив объектов OzAbstractMedia.
Инициализирует SDK, используя данные лицензии.
Параметр
Тип
Описание
context
Context
Базовый класс Context
licenseSources
Список источников лицензий
statusListener (опционально)
StatusListener
Обработчик для проверки результата
Возвращает
-
Включает журналирование, запуская соответствующие механизмы Oz Liveness SDK.
Параметр
Тип
Описание
tag
String
Метка сообщения
log
String
Тело сообщения
Возвращает
-
Подключение к API.
Параметр
Тип
Описание
connection
Тип подключения
statusListener
StatusListener<String?>
Обработчик
Подключение к серверу телеметрии.
Параметр
Тип
Описание
connection
Тип подключения
statusListener
StatusListener<String?>
Обработчик
Удаляет сохраненный токен.
Параметры
-
Возвращает
-
Запрашивает идентификатор сессии телеметрии.
Параметры
-
Возвращает
Идентификатор сессии телеметрии (String).
Запрашивает версию SDK.
Параметры
-
Возвращает
Номер версии SDK (String).
Создает payload
с подписями медиафайлов.
Параметр
Тип
Описание
media
Массив медиафайлов
folderMeta (опционально)
[String: any]
Дополнительные метаданные папки
Возвращает
payload
для загрузки вместе с медиафайлами, для которых он был сгенерирован.
Класс для выполнения проверок.
Запускает анализы.
Параметр
Тип
Описание
onStatusChange
,
Callback-функция:
onStatusChange(status: AnalysisRequest.AnalysisStatus) { handleStatus() }
onError
Callback-функция:
onError(error: OzException) { handleError() }
Вызывается в случае ошибки.
onSuccess
Callback-функция:
onSuccess(result: RequestResult) {
handleResults() }
Конструктор для AnalysisRequest.
Создает AnalysisRequest.
Параметры
-
Возвращает
Экземпляр класса AnalysisRequest.
Добавляет в запрос анализ.
Параметр
Тип
Описание
analysis
Структура с данными об анализе
Возвращает
Ошибку в случае ее появления.
Добавляет в запрос список анализов (можно назначить несколько анализов для одной папки).
Параметр
Тип
Описание
analysis
Массив структур Analysis
Возвращает
Ошибку в случае ее появления.
Добавляет метаданные в создаваемую папку (только для анализа на сервере).
Параметр
Тип
Описание
key
String
Ключ
value
String
Значение
Возвращает
Ошибку в случае ее появления.
Добавляет один или несколько медиафайлов в папку для последующего выполнения проверок.
Параметр
Тип
Описание
mediaList
Объект или массив объектов OzAbstractMedia
Возвращает
Ошибку в случае ее появления.
Устанавливает идентификатор для ранее созданной папки. Эта папка должна существовать на сервере, иначе создастся новая.
Параметр
Тип
Описание
folderID
String
Идентификатор папки
Возвращает
Ошибку в случае ее появления.
Конфигурация OzLivenessSDK (используйте OzLivenessSDK.config
).
Устанавливает длительность жеста Селфи (в миллисекундах).
Параметр
Тип
Описание
selfieLength
Int
Длительность жеста Селфи (в миллисекундах). Должна быть в пределах 500-5000, по умолчанию – 700
Возвращает
Ошибку в случае ее появления.
Возможность отображать дополнительную отладочную информацию при нажатии на текст версии.
Параметр
Тип
Описание
allowDebugVisualization
Boolean
Включает / выключает отображение дополнительной информации
Количество попыток выполнить анализы, после которого SDK выдаст ошибку.
Параметр
Тип
Описание
attemptsSettings
Количество попыток
URL сервера API для работы с телеметрией.
Параметр
Тип
Описание
baseURL
String
Адрес сервера
Время, в течение которого нужно поместить лицо в рамку и выполнить жест (в миллисекундах).
Параметр
Тип
Описание
faceAlignmentTimeout
Long
Значение тайм-аута
Настройки повторной отправки медиафайлов.
Parameter
Type
Description
uploadMediaSettings
Устанавливает количество попыток и интервал между ними
Интерфейс для обработки ошибок.
Параметр
Тип
Описание
livenessErrorCallback
ErrorHandler
Callback для обработки ошибок
Локализация текста.
Параметр
Тип
Описание
localizationCode
Код языка SDK
Настройки журналирования.
Параметр
Тип
Описание
logging
Настройки журналирования
Включает использование основной (задней) камеры для съемки вместо фронтальной.
Параметр
Тип
Описание
useMainCamera
Boolean
True
– используется основная камера,
False
– фронтальная
Настройки кастомизации OzLivenessSDK (используйте OzLivenessSDK.config.customization
).
Скрывает системные части экрана: полосу статуса и кнопки. По умолчанию имеет значение True
.
Настройки кастомизации верхней панели.
Параметр
Тип
Описание
closeIconRes
Int (@DrawableRes)
Иконка кнопки закрытия
closeIconTint
Цвет кнопки закрытия
titleTextFont
Int (@FontRes)
Шрифт текста на верхней панели
titleTextFontStyle
Int (значения из android.graphics.Typeface
, например Typeface.BOLD
)
Стиль шрифта текста на верхней панели
titleTextSize
Int
Размер текста на верхней панели (в sp, 12-18)
titleTextAlpha
Int
Непрозрачность текста на верхней панели (в %, 0-100)
titleTextColor
Цвет текста на верхней панели
backgroundColor
Цвет фона верхней панели
backgroundAlpha
Int
Непрозрачность фона верхней панели (в %, 0-100)
isTitleCentered
Boolean
Центрирует текст на верхней панели
title
String
Текст на верхней панели
Настройки кастомизации текста подсказки, ориентируясь на который, пользователь снимает фото или видео.
Параметр
Тип
Описание
textFont
String
Шрифт текста подсказки
textStyle
Int (значения из android.graphics.Typeface
, например Typeface.BOLD
)
Стиль текста подсказки
textSize
Int
Размер шрифта текста подсказки (в sp, 12-34)
textColor
Цвет текста подсказки
textAlpha
Int
Непрозрачность текста подсказки (в %, 0-100)
verticalPosition
Int
Положение подсказки по вертикали (от нижнего края экрана, в %, 0-100)
backgroundColor
Цвет фона
backgroundOpacity
Int
Непрозрачность фона
backgroundCornerRadius
Int
Радиус скругления углов рамки фона (в dp, 0-20)
Настройки кастомизации для анимации подсказки.
Параметр
Тип
Описание
hintGradientColor
Цвет градиента
hintGradientOpacity
Int
Непрозрачность градиента
animationIconSize
Int
Размер квадрата, в который вписан значок анимации
hideAnimation
Boolean
Настройки скрытия анимации, при значении True
анимация скрывается
Настройки кастомизации рамки вокруг лица.
Параметр
Тип
Описание
geometryType
Форма рамки (oval, rectangle, circle или square)
cornerRadius
Int
Угловой радиус прямоугольника (в dp, 0-20)
strokeDefaultColor
Цвет рамки, когда лицо не в кадре
strokeFaceInFrameColor
Цвет рамки, когда лицо в кадре
strokeAlpha
Int
Непрозрачность рамки (в %, 0-100)
strokeWidth
Int
Толщина линии (в dp, 0-20)
strokePadding
Int
Отступ от рамки до овала, куда нужно поместить лицо (в dp, 0-10)
Настройки кастомизации фона за рамкой.
Параметр
Тип
Описание
backgroundColor
Цвет фона
backgroundAlpha
Int
Непрозрачность фона (в %, 0-100)
Настройки кастомизации текста версии SDK.
Параметр
Тип
Описание
textFont
Int (@FontRes)
Шрифт текста версии SDK
textSize
Int
SDK version text size (в sp, 12-16)
textColor
Цвет текста версии SDK
textAlpha
Int
Непрозрачность текста версии SDK (в %, 20-100)
Настройки кастомизации для защиты от мошенничества (сообщение о том, что идет запись).
Параметр
Тип
Описание
textMessage
String
Текст сообщения
textFont
String
Шрифт текста сообщения
textSize
Int
Размер шрифта сообщения (в px, 12-18)
textColor
Цвет текста сообщения
textAlpha
Int
Непрозрачность текста сообщения (в %, 0-100)
backgroundColor
Цвет фона сообщения
backgroundOpacity
Int
Непрозрачность фона сообщения
cornerRadius
Int
Радиус скругления углов рамки фона (в px, 0-20)
flashColor
Цвет мигающего индикатора рядом с сообщением
Параметры настройки логотипа, если лицензия предусматривает возможность его изменения.
Parameter
Type
Description
image
Bitmap (@DrawableRes)
Изображение для лого
size
Size
Размер лого (в dp)
Действие, представленное на видео.
Значение
Описание
OneShot
Лучший кадр из снятого видео
Blank
Селфи с проверкой позиционирования лица
Scan
Сканирование
HeadRight
Поворот головы направо
HeadLeft
Поворот головы налево
HeadDown
Наклон головы вниз
HeadUp
Подъем головы вверх
EyeBlink
Моргание
Smile
Улыбка
Содержит расширенную информацию о параметрах лицензии.
Параметр
Тип
Описание
expires
Float
Период времени, спустя который срок действия лицензии истечет
features
Features
Особенности лицензии
appIDS
[String]
Массив идентификаторов приложений
Класс для снятого фото или видео, может быть:
Фото документа.
Параметр
Тип
Описание
tag
Тег для фото документа
photoPath
String
Абсолютный путь к фото
additionalTags (опционально)
String
Дополнительные теги, если требуются (в том числе не из перечисления OzMediaTag)
metaData
Map<String, String>
Метаданные медиафайла
Набор кадров (shot set) в архиве.
Параметр
Тип
Описание
tag
Тег для shot set
archivePath
String
Путь к архиву
additionalTags (опционально)
String
Дополнительные теги, если требуются (в том числе не из перечисления OzMediaTag)
metaData
Map<String, String>
Метаданные медиафайла
Видео с проверкой Liveness.
Параметр
Тип
Описание
tag
Тег видео
videoPath
String
URL видео с проверкой Liveness
bestShotPath (optional)
String
URL лучшего кадра в формате PNG
preferredMediaPath (optional)
String
URL медиаконтейнера API
additionalTags (опционально)
String
Дополнительные теги, если требуются (в том числе не из перечисления OzMediaTag)
metaData
Map<String, String>
Метаданные медиафайлам
Тег в соответствии с жестом на видео.
Значение
Описание
Blank
Видео без определенного жеста
PhotoSelfie
Селфи-фото
VideoSelfieOneShot
Видео с извлекаемым лучшим кадром
VideoSelfieScan
Видео с жестом «сканирование»
VideoSelfieEyes
Видео с жестом «моргание»
VideoSelfieSmile
Видео с жестом «улыбка»
VideoSelfieHigh
Видео с жестом «подъем головы наверх»
VideoSelfieDown
Видео с жестом «наклон головы вниз»
VideoSelfieRight
Видео с жестом «поворот головы направо»
VideoSelfieLeft
Видео с жестом «поворот головы налево»
PhotoIdPortrait
Фото, извлеченное из документа
PhotoIdBack
Фото оборотной стороны документа
PhotoIdFront
Фото лицевой стороны документа
Класс для хранения лицензии, может быть:
Содержит идентификатор лицензии.
Параметр
Тип
Описание
id
Int
Идентификатор лицензии
Содержит путь к лицензии.
Параметр
Тип
Описание
path
String
Абсолютный путь к лицензии
Класс для статуса анализа, может быть:
Статус означает, что анализы запущены.
Параметр
Тип
Описание
analysis
Информация о том, какие анализы и к каким медиафайлам применять.
Статус означает, что в настоящее время загружаются медиафайлы.
Параметр
Тип
Описание
media
Объект, который загружается в данный момент
index
Int
Номер объекта в списке
from
Int
Количество объектов
percentage
Int
Процент завершения
Тип анализа.
Значение
Описание
BIOMETRY
Позволяет сравнить несколько фото или видео и оценить уровень схожести запечатленных на них людей.
QUALITY
Проверяет наличие живого человека в кадре
DOCUMENTS
Определяет наличие документа в кадре и проверяет корректность полей документа согласно его типу.
В настоящее время для типа DOCUMENTS
режим ON_DEVICE
не поддерживается.
Режим анализа.
Значение
Описание
ON_DEVICE
Анализ на устройстве
SERVER_BASED
Анализ на сервере
HYBRID
Гибридный анализ для Liveness: если итоговая оценка анализа на устройстве больше определенного порога, медиафайл дополнительно анализируется на сервере
Содержит информацию о том, какие анализы и к каким медиафайлам применять.
Параметр
Тип
Описание
type
Тип анализа
mode
Режим анализа
mediaList
Массив объектов OzAbstractMedia
params (опционально)
Map<String, Any>
Дополнительные параметры
sizeReductionStrategy
Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа
Сводный статус по выполненным анализам.
Значение
Описание
FAILED
Один или более анализов не удалось завершить из-за ошибок
DECLINED
Проверка не пройдена (лица не совпадают или замечена спуфинг-атака)
SUCCESS
Проверка успешно пройдена
OPERATOR_REQUIRED
Результат анализов должен быть дополнительно перепроверен оператором
Количество попыток выполнения анализов, после которого SDK выдаст ошибку.
Параметр
Тип
Описание
singleCount
Int
Количество попыток для одного действия/жеста
commonCount
Int
Суммарное количество попыток для всех действий/жестов, если используется последовательность (комбо)
Код языка SDK в соответствии с ISO 639-1.
Значение
Описание
EN
Английский
RU
Русский
HY
Армянский
KK
Казахский
KY
Кыргызский
TR
Турецкий
ES
Испанский
PT-BR
Португальский
Настройки журналирования.
Параметр
Тип
Описание
allowDefaultLogging
Boolean
Включает запись в LogCat
allowFileLogging
Boolean
Включает запись в файл
journalObserver
StatusListener
Обработчик для получения событий на стороне приложения
Настройки цвета, в зависимости от принимаемого значения могут быть:
Параметр
Тип
Описание
resId
Int
Ссылка на цвет в системе ресурсов Android
Параметр
Тип
Описание
hex
String
Цвет в формате HEX (например #FFFFFF)
Параметр
Тип
Описание
color
Int
Int-значение цвета в Android
Форма рамки.
Значение
Описание
Oval
Овал
Rectangle
Прямоугольник
Circle
Круг
Square
Квадрат
Класс для описания ошибок.
Параметр
Тип
Описание
apiErrorCode
Int
Код ошибки
message
String
Сообщение
Описывает отправленный на анализ медиафайл.
Параметр
Тип
Описание
mediaId
String
Идентификатор медиафайла
mediaType
String
Тип медиа
originalName
String
Первоначальное название файла
ozMedia
Медиафайл
tags
List<String>
Теги файла
Описывает результат анализа для одного медиафайла.
Параметр
Тип
Описание
confidenceScore
Float
Итоговая оценка
isOnDevice
Boolean
Режим анализа
resolution
Общий результат анализа
sourceMedia
Анализируемый медиафайл
type
Тип анализа
Сводный результат анализа для всех медиафайлов.
Параметр
Тип
Описание
analysisResults
Результат анализа
folderId
String
Идентификатор
resolution
Общий результат анализа
Описывает результаты анализов для всех медиафайлов в папке.
Параметр
Тип
Описание
resolution
Общий результат анализа
type
Тип анализа
mode
Режим анализа
resultMedia
Список результатов отдельных анализов
confidenceScore
Float
Итоговая оценка
analysisId
String
Идентификатор анализа
params
@RawValue Map<String, Any>
Дополнительные параметры папки
error
Ошибка
serverRawResponse
String
Ответ сервера
Определяет метод авторизации.
Авторизация по токену.
Параметр
Тип
Описание
host
String
Адрес сервера API
token
String
Токен доступа
Авторизация по логину и паролю.
Параметр
Тип
Описание
host
String
Адрес сервера API
username
String
Логин
password
String
Пароль
Настройки повторной отправки медиафайлов.
Параметр
Тип
Описание
attemptsCount
Int
Количество попыток отправки медиафайлов
attemptsTimeout
Int
Интервал времени между попытками
Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа. По умолчанию отправляется сжатое видео.
Значение
Описание
UPLOAD_ORIGINAL
Исходное видео
UPLOAD_COMPRESSED
Сжатое видео
UPLOAD_BEST_SHOT
Полученный из видео лучший кадр
UPLOAD_NOTHING
Ничего (в этом случае на сервер не отправляется ничего, папка не создается)
Код ошибки
Сообщение
Описание
ERROR = 3
Error.
Неизвестная ошибка
ATTEMPTS_EXHAUSTED_ERROR = 4
Error. Attempts exhausted for liveness action.
VIDEO_RECORD_ERROR = 5
Error by video record.
Ошибка записи видео
NO_ACTIONS_ERROR = 6
Error. OzLivenessSDK started without actions.
FORCE_CLOSED = 7
Error. Liveness activity is force closed from client application.
Клиент закрыл экран Liveness во время работы
DEVICE_HAS_NO_FRONT_CAMERA = 8
Error. Device has not front camera.
Фронтальная камера на устройстве не найдена
DEVICE_HAS_NO_MAIN_CAMERA = 9
Error. Device has not main camera.
Задняя (основная) камера на устройстве не найдена
DEVICE_CAMERA_CONFIGURATION_NOT_SUPPORTED = 10
Error. Device camera configuration is not supported.
Liveness не поддерживает конфигурацию камеры на устройстве
FACE_ALIGNMENT_TIMEOUT = 12
Error. Face alignment timeout in OzLivenessSDK.config.faceAlignmentTimeout milliseconds
Время подготовки, выделенное на съемку, истекло
ERROR = 13
The check was interrupted by user
Пользователь закрыл экран Liveness во время проверки
Журнал изменений для iOS.
Обновления доступности для пользователей с инвалидностью согласно требованиям WCAG: можно настроить озвучивание подсказок SDK и элементов управления.
Упростили прохождение проверки для жестов, включающих движение головы.
Исправили незначительные ошибки.
Обновления телеметрии.
При использовании основной (задней) камеры яркость экрана теперь не меняется.
Исправили ошибку записи видео, появлявшуюся на некоторых моделях смартфонов.
Обновления безопасности и телеметрии.
Улучшили работу SDK.
Добавили поддержку Xcode 16.
Обновления безопасности и телеметрии.
Обновления безопасности.
Исправили ошибки.
Для работы SDK теперь нужен Xcode 15 и новее.
Обновления безопасности.
Исправили ошибки.
Улучшили работу SDK.
Улучшили работу SDK.
Исправили ошибки.
Обновления журналирования.
Обновления безопасности.
При попытке передать пустую строку в качестве аргумента для метода addFolderId
теперь показывается информативная ошибка.
Исправили ошибки.
Синхронизировали с Android сообщения, которые SDK показывает после загрузки медиафайла.
Исправили баг с задержками запуска анализа, которые иногда возникали для анализа по одному кадру.
Убрали паузу после жеста Сканирование.
Обновления безопасности и журналирования.
Обновления безопасности.
Изменили поведение для отсутствующих переводов при добавлении новых ключей в локализацию: теперь вместо названия ключа показывается текст на языке по умолчанию (английском).
Исправили ошибки.
Улучшили работу механизмов лицензирования.
Добавили возможность использования мастер-лицензии, которая работает с любым bundle_id
.
Исправили ошибку с мигающим фоном при съемке.
Исправили ошибки.
Добавили в структуру Analysis
поле sizeReductionStrategy
. Оно определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа.
Сообщения для получаемых из API ошибок теперь более информативны.
Настройка toFrameGradientColor
для кастомизации подсказки hintAnimationCustomization
больше не используется. Вместо нее используйте hintGradientColor
.
Вернули поддержку iOS 11.
Обновили модель Liveness для проверки на устройстве.
Добавили португальский язык (бразильский вариант).
Если медиафайл по каким-то причинам не загрузился, система теперь повторяет загрузку.
Добавили новый метод для получения идентификатора телеметрии (логирования): getEventSessionId
.
Методы setPermanentAccessToken
, configure
и login
больше не используются. Вместо них, пожалуйста, используйте метод setApiConnection
.
Метод setLicense(from path:String)
больше не используется. Вместо него, пожалуйста, используйте метод setLicense(licenseSource: LicenseSource)
.
Исправили ошибки и улучшили работу SDK.
Исправили ошибки, улучшили работу алгоритмов SDK.
Добавлен новый тип анализа – гибридный (сейчас работает только для Liveness). В случае спорных результатов анализа на устройстве проводится дополнительная проверка на сервере.
Обновлены модели для выполнения анализов на устройстве.
Обновили метод run
.
Добавили новые структуры RequestStatus
(статус анализа), ResultMedia
(статус анализов для одного медиафайла) и RequestResult
(сводный результат анализа для всех медиа).
Структура OzAnalysisResult
больше не используется; вместо нее – обновленная структура AnalysisResult
.
Для объекта OZMedia
теперь можно добавить дополнительные теги не из списка основных.
Длительность видео для жеста “Селфи” снижена до 0,7 секунд, соответственно, уменьшились размер файла и время его загрузки на сервер.
Текст подсказки теперь может выходить за границы рамки для лица по горизонтали (для основной камеры).
Прекращена поддержка методов:
Добавили настройки для фона подсказки.
Добавили новые формы рамки (круг, квадрат).
Добавили виджет для защиты от мошенничества и набор настроек к нему. С помощью этого виджета вы можете уведомлять пользователей, что ведется съемка видео для, например, отправления заявки на кредит. Таким образом вы сможете защитить пользователей, если мошенники попытаются убедить их подтвердить такой запрос.
Синхронизировали значения настроек кастомизации по умолчанию с Android.
Добавили испанский язык.
iOS 11 больше не поддерживается; минимальная необходимая версия – 12.
Исправили ошибки, связанные с проведением однокадрового анализа на стороне сервера.
Улучшили работу алгоритмов SDK.
Исправлен баг с серверными анализами при отсутствии видео: если по каким-то причинам видео не загрузилось в папку (например, при потере интернет-соединения), папка будет пустой – без видео и назначенных анализов.
Улучшили работу Liveness-анализов на устройстве.
Обновили анимацию для солнечных очков / маски.
Исправили ошибку с добавлением анализа.document
.
Обновили версию TensorFlow до 2.11.
Исправили несколько багов, в том числе ошибки биометрической проверки, возникавшие на некоторых моделях телефонов.
Добавили возможность управлять цветом анимации.
Обновили модель для выполнения анализов.
Добавили метод uploadMedia
в AnalysisRequest
. Метод addMedia
больше не используется.
Исправили ошибку в жесте Комбо.
Добавили кнопку для сброса настроек языка и темы SDK.
Увеличили тайм-аут сетевых запросов до 90 с.
Добавили возможность управлять размером значка анимации.
Исправили баги.
Синхронизировали нумерацию версий с Android SDK.
Добавили новое поле params
в структуру Analysis
– с его помощью можно задавать дополнительные параметры, например, для извлечения на сервере лучшего кадра. Алгоритм "лучший кадр" выбирает из видеозаписи наиболее качественный и удачный кадр с лицом.
Исправили ошибки локализации.
Поменяли жест Комбо.
Теперь можно запускать проверку Liveness на устройстве для анализа изображений, снятых вне SDK.
Жесты отдаления и приближения больше не поддерживаются.
Добавили новую упрощенную структуру анализа AnalysisRequest.
Добавили методы для локального анализа: runOnDeviceLivenessAnalysis
и runOnDeviceBiometryAnalysis
.
Версию для установки можно выбрать: стандартная установка дает доступ ко всем функциям, а в версии core
(OzLivenessSDK/Core
) отсутствует возможность делать анализы локально на устройстве.
Добавили универсальный метод для загрузки данных на сервер и немедленного запуска анализов: uploadAndAnalyse
.
Дополнили процесс лицензирования: теперь лицензию можно указать при инициализации SDK. Воспользуйтесь методом OZSDK(licenseSources: [LicenseSource], completion: @escaping ((LicenseData?, LicenseError?) -> Void))
, где LicenseSource
– путь до лицензии, LicenseData
– информация о лицензии.
Добавили метод setLicense
для принудительной установки лицензии.
Добавили турецкий язык.
Добавили киргизский язык.
Добавили Completion Handler
для результатов анализа.
Добавили в телеметрию передачу Error User Info
, теперь можно узнавать подробности об ошибке, которая происходит в работе анализа.
Добавили локальные анализы – теперь анализ можно делать прямо на устройстве.
Добавили рамки для лица, теперь их две – овал и прямоугольник.
Теперь поддерживаем Xcode 12.5.1+.
Добавили конфигурацию SDK через лицензии.
Добавили жест One Shot
.
В OZVerificationResult
добавили bestShotURL
(содержит изображение лучшего кадра) и preferredMediaURL
(содержит медиаконтейнер с url лучшего видео для назначения анализа)
При запуске локальной проверки теперь можно указать тип камеры: front / back.
Авторизационные сессии теперь пролонгируются автоматически.
Обновили интерфейсы авторизации.
Добавили казахский язык.
Добавили тексты для ошибок лицензирования.
Сетевые запросы теперь можно отменить.
Для лицензии можно указать Bundle.
Добавили параметризации анализов documentAnalyse
.
Исправили ошибки при сборках проекта. (Xcode 12.4 / Cocoapods 1.10.1).
Добавили поддержку лицензий.
Теперь поддерживаем Xcode 12. 11 поддерживать перестали.
Исправили ошибку documentAnalyse
– анализы не назначались без указания analyseStates
. Теперь все корректно.
Поправили ошибки в сборе логов.
Обычный режим выполнения проверок на iOS / Android SDK подразумевает проведение проверок на сервере: данные для анализов Liveness и Biometry с телефона отсылаются на сервер, где и происходит сам анализ, затем сервер отправляет результаты анализов обратно на телефон. Этот процесс показан на схеме ниже:
Однако анализы могут выполняться непосредственно на устройстве без подключения к серверу или даже интернету в целом:
Анализы на устройстве выполняются быстрее, а также это более безопасный способ проверки, так как никакая информация никуда не отправляется, персональные данные остаются на устройстве. В этом случае не нужны ни сервер, ни подключение к API.
Подключение к API может потребоваться в некоторых специфических ситуациях, например, для сбора телеметрии или конфигурации SDK с сервера.
Когда может понадобиться режим анализа на устройстве?
Вы не планируете собирать и обрабатывать персональные данные;
Вам необходима быстрая и не зависящая от скорости сети верификация – например, в удаленных регионах, внутри зданий, под землей и так далее;
У вас ограниченный бюджет и вы хотели бы сэкономить на оборудовании.
Для запуска анализов на устройстве установите соответствующий режим (mode
) анализа для Android или iOS SDK.
Android:
iOS:
Подробнее приведенные примеры раскрыты в разделе Выполнение проверок для Android и iOS соответственно.
Обратите внимание: описанная ниже функциональность работает, начиная с версии 8.1.0.
Чтобы добавить или обновить языковой пакет для Oz Android SDK, сделайте следующие шаги:
Перевод состоит из ключа локализации и соответствующей ему строчки, например, <string name="about">"About"</string>
.
Перейдите в папку для нужной локали или создайте такую папку. Детально процесс описан здесь.
Создайте файл и назовите его strings.xml.
Скопируйте строки из приложенного файла в только что созданный.
Переопределите в переводах строки, которые вам нужны.
Список переводов для Android:
Ключи вида action_*_go
относятся к соответствующим жестам. Остальные – к подсказкам для всех жестов, информационным сообщениям или ошибкам.
Когда вместе с новыми версиями появляются новые ключи, если вы не переопределите соответствующие строки в вашем файле, текст для новых ключей будет показываться на английском языке.
Мастер-лицензия – это оффлайн-лицензия, с которой можно использовать мобильные SDK без ограничений по bundle_id
, в отличие от обычных лицензий. Для получения мастер-лицензии нужно создать пару ключей, как описано ниже. Отправьте нам публичный ключ по электронной почте, и вскоре после этого мы отправим вам мастер-лицензию.
Вашему приложению нужно будет подписать свой bundle_id
приватным ключом. Мобильные SDK проверяют подпись с помощью публичного ключа из мастер-лицензии. Действие таких лицензий ограничено по времени.
В этом разделе описано, как создавать приватный и публичный ключи.
Чтобы создать приватный ключ, последовательно запустите следующие команды:
Вы получите два файла:
privateKey.der – приватный ключ .der;
privateKey.txt – privateKey.der в кодировке base64. Содержимое этого файла используется в качестве подписи bundle_id хостового приложения.
Спецификация команд OpenSSL: https://www.openssl.org/docs/man1.1.1/man1/openssl-pkcs8.html
Чтобы создать публичный ключ, последовательно запустите следующие команды:
Вы получите публичный ключ publicKey.pub. Отправьте его нам по электронной почте. В ответ мы пришлем вам лицензию.
Инициализация SDK:
Установка лицензии:
Перед инициализацией SDK создайте закодированную base64 подпись для bundle_id
хостового приложения с помощью приватного ключа.
Пример создания подписи:
Передайте подпись как параметр masterLicenseSignature
во время инициализации SDK или установки лицензии.
Если подпись невалидна, инициализация продолжится по стандартной схеме: проверка включенных в лицензию bundle_id
.
Работа с OZ Mobile SDK в операционной системе «iOS»
Чтобы начать пользоваться нашим SDK, нужно выполнить следующие шаги.
Добавьте SDK в проект, как описано здесь.
Получите лицензию на SDK – сгенерируйте тестовую самостоятельно на нашем сайте или запросите «боевую» по электронной почте. Для лицензии потребуется bundle id
. Добавьте лицензию в проект, как описано здесь.
Подключите SDK к API. Это необязательный шаг, он выполняется, только если вам нужно обрабатывать какие-либо данные на сервере. Если вы используете режим анализа на устройстве, никакие данные никуда не передаются, и подключение к API не нужно.
Создайте контроллер для съемки, как описано здесь – вы получите медиафайлы, которые потом можно будет отправить на анализ.
Запустите нужные вам проверки для полученных на предыдущем шаге медиафайлов. Здесь описано, как выполнять проверки.
Если вы хотите настроить внешний вид SDK, здесь написано, как это делается.
Минимальная версия iOS: 11.
Минимальная версия Xcode: 15 (для версий 8.10.0 и новее).
Доступные языки: EN, RU, ES, HY, KK, KY, TR.
Исходный код примера приложения с использованием Oz Liveness SDK расположен в репозитории GitLab:
Список методов и полей SDK:
Актуальную сборку демо-приложения Вы можете загрузить по ссылке.
Если вы при обновлении с прежних версий (до 6.4.2 включительно) хотите сохранить привычный для клиентов дизайн, сбросьте настройки интерфейса экрана съемки до значений по умолчанию и примените следующие параметры (приведены только те параметры, которые нужно изменить):
Синглтон (шаблон-одиночка) для Oz SDK.
Инициализирует OZSDK, используя данные лицензии. В качестве замыкания передаются либо данные о лицензии, либо .
Возвращает
-
Принудительно устанавливает лицензию.
Запрашивает токен доступа для пользователя.
Возвращает
Токен доступа или ошибку.
Запрашивает токен доступа для отправки телеметрии.
Возвращает
Токен доступа или ошибку.
Проверяет, существует ли токен доступа.
Параметры
-
Возвращает
Результат проверки – true или false.
Удаляет сохраненный токен доступа.
Параметры
-
Возвращает
-
Создает контроллер для проверки Liveness.
Возвращает
UIViewController или исключение.
Создает контроллер для проверки Liveness.
Возвращает
UIViewController или исключение.
Удаляет все видеоролики.
Параметры
-
Возвращает
-
Запрашивает идентификатор сессии телеметрии.
Параметры
-
Возвращает
Идентификатор сессии телеметрии (String).
Устанавливает кастомный бандл, в котором содержатся переводы строк.
Возвращает
-
Устанавливает длительность жеста Селфи (в миллисекундах).
Создает payload
с подписями медиафайлов.
Возвращает
payload
для загрузки вместе с медиафайлами, для которых он был сгенерирован.
Язык SDK (если язык не указывается, локаль устанавливается автоматически).
Хост, к которому обращается система для проверки Liveness.
Количество попыток выполнения анализов, после которого SDK выдаст ошибку.
Версия SDK.
Делегат OZSDK.
Запрашивает результаты проверки Liveness.
Возвращает
-
Обрабатывает ошибки.
Возвращает
-
Протокол для выполнения проверок.
Создает инстанс AnalysisRequest.
Возвращает
Инстанс AnalysisRequest.
Добавляет в AnalysisRequest анализы.
Возвращает
-
Загружает медиафайл(ы) на сервер.
Возвращает
-
Добавляет идентификатор папки для загрузки на сервер.
Возвращает
-
Добавляет в папку метаданные.
Возвращает
-
Запускает анализы.
Возвращает
Результат проверок или ошибку.
Настройки кастомизации OzLivenessSDK (используйте OZSDK.customization
).
Настройки кастомизации верхней панели.
Настройки кастомизации текста подсказки, ориентируясь на который, пользователь снимает фото или видео.
Настройки кастомизации для анимации подсказки.
Настройки кастомизации рамки вокруг лица.
Настройки кастомизации фона за рамкой.
Настройки кастомизации текста версии SDK.
Настройки защиты от мошенников – сообщения, предупреждающего человека о том, что его снимают.
Параметры настройки логотипа, если лицензия предусматривает возможность его изменения.
Источник лицензии.
Полная информация о лицензии
Действие, представленное на видео.
Содержит информацию о медиафайле.
Тип медиафайла.
Описание ошибки.
Содержит информацию о том, какие анализы и к каким медиафайлам применять.
Тип анализа.
В настоящее время для типа DOCUMENTS
режим onDevice
не поддерживается.
Режим анализа.
Отображает статус обработки медиафайлов.
Отображает статус загрузки файлов.
Отображает промежуточный результат обработки анализов.
Описывает результат анализа для одного медиафайла.
Сводный результат анализа для всех медиафайлов.
Содержит результат проверок.
Сводный статус по выполненным анализам.
Содержит результаты одиночных анализов.
Форма рамки.
Возможные ошибки лицензирования.
Тип авторизации.
Настройки повторной отправки медиафайлов.
Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа. По умолчанию отправляется сжатое видео.
Обратите внимание: описанная ниже функциональность работает, начиная с версии 8.1.0.
Чтобы добавить или обновить языковой пакет для Oz iOS SDK, используйте метод set(languageBundle: Bundle)
. Он информирует SDK, что вы планируете использовать отличный от стандартного бандл. В OzLocalizationCode
используйте кастомный язык (опционально).
Перевод состоит из ключа локализации и соответствующей ему строчки, например, "about" = "О программе"
.
Если вы не укажете кастомные язык и бандл, SDK будет использовать имеющиеся переводы.
Если бандл указан, а язык нет, приоритетным считается перевод для ключа из файла локализации кастомного бандла. Если такой ключ там не найден, перевод берется из стандартного бандла.
Если указаны кастомные и бандл, и язык, все переводы берутся из файла локализации кастомного бандла.
Список переводов для iOS:
Ключи вида Action.*.Task
относятся к соответствующим жестам. Остальные – к подсказкам для всех жестов, информационным сообщениям или ошибкам.
При появлении новых ключей, если переводов для них в кастомном бандле нет, будет показываться текст на языке по умолчанию (английском).
Если наш SDK используется только для съемки, пропустите этот шаг.
Чтобы выполнить проверку, нужно загрузить в систему медиафайлы, а затем запустить для них анализы.
Как интерпретировать результаты анализов, описано здесь: .
Пример:
Для удаления медиафайлов после выполнения всех проверок используйте метод clearTempDirectory
.
Для добавления метаданных используйте метод AnalysisRequest.addFolderMeta
.
В структуре Analysis можно передать дополнительные параметры, например, для извлечения на сервере лучшего кадра.
Для добавления медиафайлов в определенную папку используйте метод addFolderId:
Этот раздел описывает, как работать с Oz Flutter SDK для iOS и Android.
Перед началом работы мы рекомендуем установить:
Flutter версии 3.0.0 или выше;
Android SDK версии 21 или выше;
dart версии 2.18.6 или выше;
iOS версии 13 или выше;
Xcode.
Образец кода для Flutter вы можете найти .
Образец кода для Flutter вы можете найти .
Добавьте строки из блока ниже в pubspec.yaml проекта, где планируется использовать плагин.
Поместите файл лицензии (например, license.json или forensics.license) в папку Flutter application/assets. В pubspec.yaml добавьте asset:
Для Android укажите путь к репозиторию Oz в /android/build.gradle, раздел allprojects → repositories:
Для Flutter 8.24.0 и новее или Android Gradle plugin 8.0.0 и новее добавьте строку в android/gradle.properties:
Минимальная версия SDK – 21 или выше:
Для iOS в Runner → Info → Deployment target → iOS Deployment Target установите версию 13 или выше.
В ios/Podfile закомментируйте строку use_frameworks!
(#use_frameworks!
).
Для инициализации вызовите метод init
. Название и путь к файлу лицензии должны совпадать с теми, которые вы указали в pubspec.yaml (например, assets/license.json).
Для подключения используйте полученные от нас логин, пароль и адрес API сервера.
На стадии коммерческого использования вместо логина и пароля мы рекомендуем использовать токен доступа, который можно получить с помощью метода API /api/authorize/auth
.
или
Для запуска съемки и получения результата вызовите метод startLiveness
:
Обратите внимание: для версий до 8.11 включительно метод для запуска называется executeLiveness
. Он возвращает результат съемки.
Для получения результата съемки в версии 8.12 и новее подпишитесь на livenessResult
, как показано ниже:
Размещенный ниже код поможет вам запустить анализы.
Создайте объект Analysis
:
Запустите созданный анализ:
Результат анализа запишется в массив объектов analysisResult
.
Для анализа медиафайла, полученного не нашим SDK, используйте следующий код:
Итоговый блок кода (пример):
[]
Вызывается при изменении статуса AnalysisRequest. Текущий статус отображается в .
Вызывается по завершении анализов. В качестве результата передается объект .
[]
[]
[]
List<>
List<>
Превышено количество
на видео не найдены
Добавили .
Длительность жеста Селфи теперь можно (размер видеофайла также изменится).
Вы можете заменить логотип Oz , если ваша лицензия это предусматривает.
Обновили код в .
Если несколько анализов назначаются на папку одновременно, система отправляет их группой. Таким образом, выбирается “худший” результат среди всех анализов, а не последний назначенный. Прочитать про отправку анализов группой можно .
В анализе Liveness для количественного результата теперь берется максимальный из вычисленных. Прочитать о результате можно .
Вы теперь можете добавить язык или изменить текущие переводы самостоятельно. Как это сделать, описано .
Значительно расширили и обновили дизайн. Если вы хотите вернуть дизайн из прошлых версий, соответствующие настройки описаны .
Синхронизировали ответы методов run
с Android SDK, теперь метод возвращает .
Код языка SDK в соответствии с .
Чтобы использовать медиафайлы, снятые не Oz iOS SDK, укажите путь к ним в структуре (полеbestShotURL
):
По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для :
Параметр
Тип
Описание
apiConnection
Параметры авторизации
Параметр
Тип
Описание
eventsConnection
Параметры авторизации для телеметрии
Параметр
Тип
Описание
delegate
Делегат Oz Liveness
actions
Действие на видео
cameraPosition (опционально)
AVCaptureDevice.Position
front
– фронтальная камера (по умолчанию),
back
– основная камера
Параметр
Тип
Описание
actions
Действие на видео
FaceCaptureCompletion
type alias
пример использования::
public typealias FaceCaptureCompletion = (_ results: [OZMedia]?, _ error: OZVerificationStatus?) -> Void
Callback-функция, которая вызывается по завершении метода. В качестве замыкания передается либо массив объектов OzMedia, либо ошибка.
cameraPosition (опционально)
AVCaptureDevice.Position
front
– фронтальная камера (по умолчанию),
back
– основная камера
Параметр
Тип
Описание
languageBundle
Bundle
Бандл для поиска переводов
Параметр
Тип
Описание
selfieLength
Int
Длительность жеста Селфи (в миллисекундах). Должна быть в пределах 500-5000, по умолчанию – 700
Параметр
Тип
Описание
media
Массив медиафайлов
folderMeta
[String]
Дополнительные метаданные папки
Параметр
Тип
Описание
String
Код локали
Параметр
Тип
Описание
host
String
Адрес хоста
Параметр
Тип
Описание
singleCount
Int
Количество попыток для одного действия/;tcnf
commonCount
Int
Суммарное количество попыток для всех действий/жестов, если используется последовательность (комбо)
faceAlignmentTimeout
Float
Время, в течение которого нужно поместить лицо в рамку
uploadMediaSettings
Настройки повторной отправки медиафайлов
Параметр
Тип
Описание
version
String
Номер версии
Параметр
Тип
Описание
results
[OzMedia]
Массив объектов OzMedia
Параметр
Тип
Описание
status
Описание ошибки
Параметр
Тип
Описание
folderId (опционально)
String
Идентификатор папки; указывается только в том случае, если нужно загрузить файлы в определенную папку
Параметр
Тип
Описание
analysis
Analysis
Структура с информацией об анализах
Параметр
Тип
Описание
media
Объект или массив объектов OzMedia
Параметр
Тип
Описание
folderId
String
Идентификатор папки
Параметр
Тип
Описание
meta
[String]
Массив метаданных; пример:
["meta1": "data1"]
Параметр
Тип
Описание
statusHandler
Callback-функция
statusHandler: @escaping ((_ status: RequestStatus) -> Void)
Вызывается в момент смены состояния метода. В качестве замыкания передается RequestStatus, который показывает статус обработки анализов.
errorHandler
Callback-функция
errorHandler: @escaping ((_ error: Error) -> Void)
Вызывается при возникновении ошибки
completionHandler
Callback-функция
completionHandler: @escaping (_ results : RequestResult) -> Void)
Вызывается по завершении метода. В качестве замыкания передается RequestResult, который содержит информацию о результатах проверок.
Параметр
Тип
Описание
closeButtonIcon
UIImage
Иконка кнопки закрытия
closeButtonColor
UIColor
Цвет кнопки закрытия, tintColor
titleFont
UIFont
Шрифт текста на верхней панели
titleColor
UIColor
Цвет текста на верхней панели
backgroundColor
UIColor
Цвет фона верхней панели
titleText
String
Текст на верхней панели
Параметр
Тип
Описание
textFont
UIFont
Шрифт текста подсказки
textColor
UIColor
Цвет текста подсказки
backgroundColor
UIColor
Цвет фона текста подсказки
verticalPosition
Int
Положение подсказки по вертикали (от верхнего края экрана, в %, 0-100)
hideTextBackground
Bool
Скрывает подложку подсказки
backgroundCornerRadius
Int
Угловой радиус подложки
Параметр
Тип
Описание
hideAnimation
Bool
Переключатель для отображения анимации, значение True
скрывает анимацию
animationIconSize
CGfloat
Размер стороны квадрата, в который вписана иконка анимации
hintGradientColor
UIColor
Цвет градиента у рамки
Параметр
Тип
Описание
geometryType
Форма рамки: овал, прямоугольник, круг или квадрат
cornerRadius
CGFloat
Угловой радиус прямоугольника/квадрата (в dp)
strokeFaceNotAlignedColor
UIColor
Цвет рамки, когда лицо не в кадре
strokeFaceAlignedColor
UIColor
Цвет рамки, когда лицо в кадре
strokeWidth
CGFloat
Толщина линии (в dp, 0-20)
strokePadding
CGFloat
Отступ от рамки до овала, куда нужно поместить лицо (в dp, 0-10)
Параметр
Тип
Описание
backgroundColor
UIColor
Цвет фона за рамкой
Параметр
Тип
Описание
textFont
UIFont
Шрифт текста версии SDK
textColor
UIColor
Цвет текста версии SDK
Parameter
Type
Description
customizationEnableAntiscam
Bool
Включает защиту от мошенников
customizationAntiscamTextMessage
String
Текст сообщения
customizationAntiscamTextFont
UIFont
Шрифт текста сообщения
customizationAntiscamTextColor
UIColor
Цвет текста сообщения
customizationAntiscamBackgroundColor
UIColor
Цвет подложки сообщения
customizationAntiscamCornerRadius
CGFloat
Угловой радиус подложки
customizationAntiscamFlashColor
UIColor
Цвет мигающего индикатора рядом с сообщением
Parameter
Type
Description
image
UIImage
Изображение для лого
size
CGSize
Размер лого (в dp)
Значение
Описание
licenseFilePath
Абсолютный путь к лицензии (String)
licenseFileName
Имя файла лицензии
Параметр
Тип
Описание
appIDS
[String]
Массив идентификаторов приложений
expires
TimeInterval
Период времени, спустя который срок действия лицензии истечет
features
Features
Особенности лицензии
configs (опционально)
ABTestingConfigs
Дополнительная конфигурация
Значение
Описание
smile
Улыбка
eyes
Моргание
scanning
Сканирование
selfie
Селфи с проверкой позиционирования лица
one_shot
Лучший кадр из снятого видео
left
Поворот головы налево
right
Поворот головы направо
down
Наклон головы вниз
up
Подъем головы наверх
Значение
Описание
en
Английский
ru
Русский
hy
Армянский
kk
Казахский
ky
Кыргызский
tr
Турецкий
es
Испанский
pt-BR
Португальский (бразильский вариант)
custom(String)
Кастомный язык (код языка ISO 639-1, две буквы)
Параметр
Тип
Описание
movement
Действие на видео
mediaType
Тип медиафайла
metaData
[String]
Метаданные, если есть
videoURL
URL
URL видео с проверкой Liveness
bestShotURL
URL
URL лучшего кадра в формате PNG
preferredMediaURL
URL
URL медиаконтейнера API
timestamp
Date
Время окончания проверки
Значение
Описание
movement
Видео/фото с действием
documentBack
Фото оборотной стороны документа
documentFront
Фото лицевой стороны документа
Значение
Описание
userNotProcessed
Проверка не была обработана
failedBecauseUserCancelled
Проверка была прервана пользователем.
failedBecauseCameraPermissionDenied
Нельзя выполнить проверку из-за отсутствия доступа к камере
failedBecauseOfBackgroundMode
Нельзя выполнить проверку, так как приложение было свернуто
failedBecauseOfTimeout
Нельзя выполнить проверку, так как время, отведенное на проверку, закончилось
failedBecauseOfAttemptLimit
Нельзя выполнить проверку, так как превышен лимит попыток
failedBecausePreparingTimout
Нельзя выполнить проверку, так как время, отведенное на съемку, закончилось
failedBecauseOfLowMemory
Нельзя выполнить проверку, так как не хватает памяти
Параметр
Тип
Описание
media
[OzMedia]
Массив объектов OzMedia
type
Тип анализа
mode
Режим анализа
sizeReductionStrategy
Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа.
params (опционально)
String
Дополнительные параметры
Значение
Описание
biometry
Позволяет сравнить несколько фото или видео и оценить уровень схожести запечатленных на них людей.
quality
Проверяет наличие живого человека в кадре
document
Определяет наличие документа в кадре и проверяет корректность полей документа согласно его типу.
blacklist
Сравнивает лицо снятого на фото или видео человека с лицами из заранее созданной базы медиафайлов
Значение
Описание
onDevice
Анализ на устройстве
serverBased
Анализ на сервере
hybrid
Гибридный анализ для Liveness: если итоговая оценка анализа на устройстве больше определенного порога, медиафайл дополнительно анализируется на сервере.
Значение
Описание
addToFolder
Система создает папку и помещает в нее медиафайлы
addAnalyses
Система добавляет анализы
waitAnalysisResult
Система ожидает результата
Параметр
Тип
Описание
media
Объект, который загружается в данный момент
index
Int
Номер объекта в списке
from
Int
Количество объектов
progress
Progress
Статус загрузки
Параметр
Тип
Описание
status
Статус обработки анализов
progressStatus
Статус загрузки медиафайла
Параметр
Тип
Описание
resolution
Общий результат анализа
sourceId
String
Идентификатор медиафайла на сервере
isOnDevice
Bool
Режим анализа
confidenceScore
Float
Итоговая оценка
mediaType
String
Тип медиафайла: VIDEO / IMAGE / SHOT_SET
media
Анализируемый медиафайл
error
AnalysisError (наследуется от базового Error)
Ошибка
Параметр
Тип
Описание
resolution
Сводный результат анализов
folderId
String
Идентификатор
analysisResults
Результаты анализов
Параметр
Тип
Описание
resolution
Общий результат анализа
type
Тип анализа
mode
Режим анализа
analysisId
String
Идентификатор анализа
error
AnalysisError (наследуется от базового Error)
Ошибка
resultMedia
Список результатов анализов по отдельным медиафайлам
confidenceScore
Float
Итоговая оценка
serverRawResponse
String
Ответ сервера
Значение
Описание
INITIAL
Анализы не назначались
PROCESSING
Анализы выполняются
FAILED
Один или более анализов не удалось завершить из-за ошибок
FINISHED
Анализы выполнены
DECLINED
Проверка не пройдена (лица не совпадают или замечена спуфинг-атака)
SUCCESS
Проверка успешно пройдена
OPERATOR_REQUIRED
Результат анализов должен быть дополнительно перепроверен оператором
Параметр
Тип
Описание
analyseResolutionStatus
Статус анализа
type
Тип анализа
folderID
String
Идентификатор папки
score
Float
Результат выполненной проверки
Значение
Описание
oval
Овальная рамка
rectangle(cornerRadius: CGFloat)
Прямоугольная рамка (угловой радиус рамки)
circle
Круглая рамка
square(cornerRadius: CGFloat)
Квадратная рамка (угловой радиус рамки)
Case
Description
licenseFileNotFound
Лицензия не найдена
licenseParseError
Невозможно распознать файл лицензии
licenseBundleError
Указанный в лицензииbundle_id
не совпадает с используемым bundle_id
.
licenseExpired
Срок действия лицензии истек
Значение
Описание
fromServiceToken
Авторизация через токен:
host: String
token: String
fromCredentials
Авторизация через логин и пароль:
host: String
login: String
password: String
attemptsCount
Int
Количество попыток загрузки медиафайла
attemptsTimeout
Int
Интервал времени между попытками
Case
Description
uploadOriginal
Исходное видео
uploadCompressed
Сжатое видео
uploadBestShot
Полученный из видео лучший кадр
uploadNothing
Ничего (в этом случае на сервер не отправляется ничего, папка не создается)
Удаленный метод
Замена
analyse
AnalysisRequest.run
addToFolder
uploadMedia
documentAnalyse
AnalysisRequest.run
uploadAndAnalyse
AnalysisRequest.run
runOnDeviceBiometryAnalysis
AnalysisRequest.run
runOnDeviceLivenessAnalysis
AnalysisRequest.run
addMedia
uploadMedia
Параметр
Тип
Описание
actions
List<VerificationAction>
Действия на видео
use_main_camera
Boolean
Если установлено True
, используется основная камера, False
– передняя
Параметр
Тип
Описание
licenseSources
Источник лицензии
Параметр
Тип
Описание
licenseSource
Источник лицензии
Чтобы скрыть окно плагина, не отменяя запросы результатов анализов и пользовательские callback'и, воспользуйтесь методом hide()
. Метод может пригодиться, если, к примеру, после отправки данных требуется вывести собственный индикатор загрузки.
Для принудительного закрытия окна плагина воспользуйтесь методом close()
. При этом все запросы к серверу и callback-функции (кроме on_close) в рамках данной сессии будут остановлены.
Пример использования:
8.14.0 – 17.12.2024
Обновления безопасности и телеметрии.
Подсказки SDK и элементы управления интерфейса могут озвучиваться в соответствии с требованиями WCAG.
Упростили прохождение проверки для жестов, включающих движение головы.
Android: сжатие больших видео теперь происходит на этапе закрытия экрана Liveness.
Android: исправили ошибку, из-за которой изображение с закрытыми глазами могло быть выбрано в качестве лучшего кадра.
Android: исправили проблемы с кодеками, появлявшиеся на некоторых моделях смартфонов.
Android: исправили ошибку, из-за которой некоторые записанные SDK видео были зелеными.
iOS: добавили поддержку Xcode 16.
iOS: при использовании основной (задней) камеры яркость экрана теперь не меняется.
iOS: исправили ошибку записи видео, появлявшуюся на некоторых моделях смартфонов.
Метод executeLiveness
больше не используется. Съемка теперь запускается с помощью метода startLiveness
.
Обновили код для получения результата съемки.
Обновления безопасности и телеметрии.
При попытке передать пустую строку в качестве аргумента для методов addFolderId
(iOS) и setFolderID (Android)
теперь показывается информативная ошибка.
Android: исправили ошибку с бесконечно крутящимся спиннером, который появлялся при переключении пользователя на другое приложение во время прохождения проверки Liveness.
Android: исправили несколько ошибок, появлявшихся только на определенных моделях смартфонов.
Обновления безопасности и телеметрии.
Android: улучшили модель Liveness для проверки на устройстве.
Android: обновления безопасности.
iOS: синхронизировали с Android сообщения, которые SDK показывает после загрузки медиафайла.
iOS: исправили баг с задержками запуска анализа, которые иногда возникали для анализа по одному кадру.
Длительность жеста Селфи теперь можно менять (размер видеофайла также изменится).
Убрали паузу после жеста Сканирование.
Обновления безопасности и журналирования.
Android: если размер записанного видеофайла больше 10 Мбайт, видео будет сжато.
Android: обновили модель Liveness для проверки на устройстве.
iOS: изменили поведение для отсутствующих переводов при добавлении новых ключей в локализацию: теперь вместо названия ключа показывается текст на языке по умолчанию (английском).
Исправили ошибки.
Добавили возможность использования мастер-лицензии, которая работает с любым bundle_id
.
Android: исправили ошибку со сжатием видео при гибридном анализе, которая возникала на некоторых моделях телефонов.
iOS: исправили ошибку с мигающим фоном при съемке.
Выпущена первая версия.
Перед запуском убедитесь, что скрипты плагина загружены.
Для запуска окна плагина следует воспользоваться методом open(options)
. Параметры:
options
– объект с настройками:
token
– (опционально) токен авторизации;
license
– объект с информацией о лицензии;
licenseUrl
– строка, содержащая путь к файлу лицензии;
lang
– строка с идентификатором одного из подключенных языковых пакетов;
meta
– объект, ключи которого являются названиями метаполей, а значения – их строковыми значениями. Метаданные передаются в Oz API и могут быть использованы для получения результатов анализа или поиска;
params
– объект с идентификаторами и значениями дополнительных параметров:
extract_best_shot
: true/false
– запуск выбора лучшего кадра в анализе Quality;
action
– массив строк с идентификаторами действий, по которым будет проводиться проверка.
Доступные действия:
photo_id_front
– фото лицевой стороны документа;
photo_id_back
– фото обратной стороны документа;
video_selfie_left
– поворот головы налево;
video_selfie_right
– поворот головы направо;
video_selfie_down
– наклон головы вниз;
video_selfie_high
– поднятие головы вверх;
video_selfie_smile
– улыбка;
video_selfie_eyes
– моргание;
video_selfie_scan
– сканирование;
video_selfie_blank
– отсутствие действия, простое селфи.
video_selfie_best
– специальное действие, которое извлекает из видео лучший кадр и выполняет анализ по нему вместо целого видео.
overlay_options
– параметры отображения шаблона документа:
show_document_pattern
: true/false
– по умолчанию true
, отображает картинку-шаблон, при значении false
остается только прямоугольная рамка;
on_submit
– callback-функция без аргументов, вызываемая после отправки пользовательских данных на сервер (не применяется в режиме capture
).
on_capture_complete
– callback-функция с одним аргументом, вызываемая по завершении съемки и возвращающая информацию о снятом видео. Пример возвращаемого объекта показан здесь.
on_error
– callback-функция с одним аргументом, вызываемая при ошибке во время съемки и возвращающая информацию об ошибке: код ошибки, сообщение, идентификатор телеметрии для журналирования.
on_close
– callback-функция без аргументов, вызываемая по окончании проверки после закрытия окна плагина, как ручного, так и автоматического.
style
– раздел для настройки интерфейса.
device_id
– (опционально) идентификатор используемой камеры.
enable_3d_mask
(с версии 1.2.1) – включает использование 3D-маски при съемке вместо овала. Параметр работает только при load_3d_mask
= true
в настройках конфигурации адаптера; значение по умолчанию – false
.
cameraFacingMode
(добавлено в 1.4.0) – параметр, определяющий, какую камеру использовать; возможные значения: user
(передняя камера), environment
(задняя камера). Этот параметр работает только в том случае, когда для параметра use_for_liveness
в файле конфигурации Web Adapter не установлено значение. Если use_for_liveness
установлено любое значение, cameraFacingMode
игнорируется.
disable_adaptive_aspect_ratio
(добавлено в 1.5.0) – выключает автоматическую подстройку соотношения сторон видео к соотношению сторон окна. Значение по умолчанию – False
, при стандартных настройках видео подстраивается под ближайшее соотношение из списка: 4:3, 3:4, 16:9, or 9:16. Обратите внимание: для съемки видео на смартфонах нужна портретная ориентация.
get_user_media_timeout
(добавлено в 1.5.0) – когда SDK не может получить доступ к камере, по истечении этого таймаута появится подсказка, как решить проблему. Значение по умолчанию – 40000 (мс).
Пример:
Для настройки интерфейса воспользуйтесь разделом style
в методе Ozliveness.open
. Полный список настроек приведен после примера.
Пример использования:
Основные цветовые настройки.
Параметр
Описание
textColorPrimary
Основной цвет текста
backgroundColorPrimary
Основной цвет фона
textColorSecondary
Дополнительный цвет текста
backgroundColorSecondary
Дополнительный цвет фона
iconColor
Цвет значков
Основные настройки шрифта.
Параметр
Описание
textFont
Шрифт
textSize
Размер шрифта
textWeight
Насыщенность шрифта
textStyle
Стиль текста
Настройки шрифта заголовка.
Параметр
Описание
textFont
Шрифт
textSize
Размер шрифта
textWeight
Насыщенность шрифта
textStyle
Стиль текста
Настройки кнопок.
Параметр
Описание
textFont
Шрифт
textSize
Размер шрифта
textWeight
Насыщенность шрифта
textStyle
Стиль текста
textColorPrimary
Основной цвет текста
backgroundColorPrimary
Основной цвет фона
textColorSecondary
Дополнительный цвет текста
backgroundColorSecondary
Дополнительный цвет фона
cornerRadius
Угловой радиус кнопки
Настройки панели инструментов.
Параметр
Описание
closeButtonIcon
Значок кнопки закрытия
iconColor
Цвет значка
Настройки подсказки в центре.
Параметр
Описание
textFont
Шрифт
textSize
Размер шрифта
textWeight
Насыщенность шрифта
textStyle
Стиль текста
textColor
Цвет текста
backgroundColor
Цвет фона
backgroundOpacity
Непрозрачность фона
backgroundCornerRadius
Угловой радиус подложки
verticalPosition
Положение по вертикали
Анимация подсказки.
Параметр
Описание
hideAnimation
Скрыть анимацию
hintGradientColor
Цвет градиента
hintGradientOpacity
Непрозрачность градиента
animationIconSize
Размер значка анимации
Настройки рамки вокруг лица.
Параметр
Описание
geometryType
Форма рамки – прямоугольник или овал
cornersRadius
Угловой радиус прямоугольника
strokeDefaultColor
Цвет рамки (лицо не в кадре)
strokeFaceInFrameColor
Цвет рамки (лицо в кадре)
strokeOpacity
Непрозрачность обводки
strokeWidth
Толщина линии обводки
strokePadding
Отступ в рамке
Настройки рамки для съемки документа.
Параметр
Описание
cornersRadius
Угловой радиус
templateColor
Цвет шаблона
templateOpacity
Непрозрачность шаблона
Настройки фона.
Параметр
Описание
backgroundColor
Цвет фона
backgroundOpacity
Непрозрачность фона
Настройки защиты от мошенников: при включении во время записи видео появляется дополнительное сообщение.
Параметр
Описание
textMessage
Текст сообщения
textFont
Шрифт
textSize
Размер шрифта
textWeight
Насыщенность шрифта
textStyle
Стиль текста
textColor
Цвет текста
textOpacity
Непрозрачность текста
backgroundColor
Цвет фона
backgroundOpacity
Непрозрачность фона
backgroundCornerRadius
Угловой радиус подложки
flashColor
Цвет мигающего индикатора
Настройки текста версии SDK.
Параметр
Описание
textFont
Шрифт
textSize
Размер шрифта
textWeight
Насыщенность шрифта
textStyle
Стиль текста
textColor
Цвет текста
textOpacity
Непрозрачность текста
Настройки 3D-маски, добавленной в версии 1.2.1.
Параметр
Описание
maskColor
Цвет самой маски
glowColor
Цвет обводки маски
minAlpha
Минимальный уровень прозрачности маски (добавлено в 1.3.1)
maxAlpha
Максимальный уровень прозрачности маски (добавлено в 1.3.1)
Таблица соответствия параметров:
Предыдущий дизайн
Новый дизайн
doc_color
-
face_color_success
faceFrame.faceReady
faceFrameCustomization.strokeFaceInFrameColor
face_color_fail
faceFrame.faceNotReady
faceFrameCustomization.strokeDefaultColor
centerHint.textSize
centerHintCustomization.textSize
centerHint.color
centerHintCustomization.textColor
centerHint.yPosition
centerHintCustomization.verticalPosition
centerHint.letterSpacing
-
centerHint.fontStyle
centerHintCustomization.textStyle
closeButton.image
-
backgroundOutsideFrame.color
backgroundCustomization.backgroundColor
Этот коллбэк вызывается раз в несколько секунд в процессе анализа и возвращает промежуточный результат (не применяется в режиме capture
). Вид результата зависит от параметра настройки Web Adapter result_mode
.
Пожалуйста, обратите внимание: в целях безопасности мы рекомендуем настроить логику принятия решений на стороне вашего бэкенда. Более детальную информацию и примеры кода вы можете найти здесь.
Если result_mode
установлен как safe
, коллбэк on_result
возвращает только состояние анализов:
или
При значении status
коллбэк возвращает состояние анализов, а также – для каждого типа анализа – название типа, состояние анализа этого типа и вердикт системы.
или
При значенииfolder
возвращается практически то же самое, что при status
, только добавляется идентификатор папки.
В случае, когда result_mode
установлен на full
, вернется:
пока анализ выполняется – ответ, аналогичный ответу при значении status
(в процессе обработки), или
полная информация об анализах:
все, что вы могли видеть при значении folder
;
временные метки;
метаданные;
идентификаторы анализов, компании, группы анализов;
пороги;
информация о медиафайлах;
и так далее.
В этом разделе вы найдете инструкции по установке решений Oz Forensics: как полной версии, так и версии Lite.
В этом разделе перечислены метрики, по которым можно сделать вывод, корректно ли работает система.
Состояние установленной биометрической системы Oz Forensics можно проверить по списку метрик, приведенных ниже. Если эти показатели в норме, система работает корректно. Для запроса показателей вы можете использовать любую систему мониторинга.
С помощью команды ping
убедитесь, что ко всем серверам имеется доступ.
Проверьте наличие свободного пространства на всех дисках – его должно быть 10% или более.
Проверьте, что сервера используют не более 90% оперативной памяти.
Проверьте доступ к сервисам oz-api
с помощью GET `/api/version`
(так называемый health check). В случае успеха вернется код 200.
Проверьте доступ к сервисам oz-bio
с помощью GET `/v1/models/inquisitor`
. В случае успеха вернется код 200.
Проверьте, не истекла ли лицензия наoz-bio
. Запустите в консоли следующий код:
В случае успеха в консоли отобразится 1.
4. Проверьте, нет ли слишком больших задержек в последней серии анализов. Запустите код, указанный ниже, чтобы получить 90-й перцентиль длительность задержек в секундах.
В консоли отобразится результат, он должен быть меньше 20.
5. Проверьте, не растет ли очередь неоконченных анализов. Запустите код, указанный ниже, чтобы получить количество незавершенных анализов в очереди.
В консоли отобразится результат, он должен быть меньше 20.
Если любой из результатов не соответствует заявленному успешному, пожалуйста, свяжитесь с нами по адресу support@ozforensics.com.
Мы рекомендуем предоставлять нашим инженерам доступ как минимум к одному каналу, который вы используете для получения уведомлений от системы мониторинга. Таким образом мы сможем оперативно отреагировать на внештатную ситуацию, связанную с нашей системой.
Описание порядка установки биометрического процессора Lite.
Связаться с нами и скачать архив Docker-образа по ссылке, которую мы вам пришлем
Загрузить образ в Dockerdocker load -i <path to image tar file>
Запустить docker run -p {port}:80 ozforensics/oz-api-lite:{tag}
Старт контейнера может занять несколько минут.
Параметры задаются переменными окружения при старте Docker-контейнера.
Допустимы следующие параметры:
NUM_WORKERS – максимальное количество одновременно выполняемых анализов, определяется индивидуально. По умолчанию: 16.
TF_ENABLE_ONEDNN_OPTS – ускорение. По умолчанию: 1, для процессоров AMD необходимо выставить 0.
Взаимодействие с биометрическим процессором реализовано на основе REST API по протоколу HTTPS.
Базовый URL доступа к API: https://{hostname}/v1/face/pattern или https://{hostname}/v1/face/liveness в зависимости от используемого метода (см. примеры).
Где:
{hostname} – имя хоста и порт сервера развернутого биометрического процессора.
Пример: localhost/v1/face/pattern
API поддерживает следующие типы контента запроса (HTTP-заголовок «Content-Type»):
«multipart/form-data»;
«application/octet-stream»;
«image/jpeg» или «image/png»;
Коды ответов
Описание
200 OK
Вызов метода завершился успешно. Ответ биометрического процессора включен в HTTP BODY.
400 Bad Request
Вызов метода завершился с ошибкой на стороне Клиента. Код ошибки включен в HTTP BODY.
500 Internal Server Error
Вызов метода завершился с ошибкой на стороне биометрического процессора. Код ошибки включен в HTTP BODY.
Для работы плагина Oz Liveness браузер должен поддерживать JavaScript ES6. Версия браузера должна быть не ниже указанной в таблице.
Google Chrome (и другие браузеры на движке Chromium)
56
Mozilla Firefox
55
Safari
11
Microsoft Edge*
17
Opera
47
*В режиме совместимости с Internet Explorer Web SDK работать не будет, так как не поддерживаются некоторые важные функции.
Журнал изменений Web SDK.
Исправили ошибку, из-за которой в on_complete callback
не отправлялась расширенная информация об анализах при использовании result_mode: full
.
Кнопка переключения камеры больше не пропадает.
Исправили ошибку, из-за которой при использовании передней камеры изображение могло отображаться зеркально.
Обновления безопасности.
Обновления безопасности.
Исправили ошибку, из-за которой видео могло некорректно создаваться из последовательности кадров.
Коллбэк-функция on_complete
теперь вызывается после изменения общего статуса папки (заявки).
Обновили инструкции по доступу к камере для браузеров Android Chrome и Facebook. Новые ключи:
error_no_camera_access
,
oz_tutorial_camera_android_chrome_with_screens_title
,
oz_tutorial_camera_android_chrome_instruction_screen_click_settings
,
oz_tutorial_camera_android_chrome_instruction_screen_permissions
,
oz_tutorial_camera_android_chrome_instruction_screen_allow_access
,
try_again
,
oz_tutorial_camera_external_browser_button
,
oz_tutorial_camera_external_browser_manual_open_link
,
oz_tutorial_camera_external_browser_title
.
Добавили метод get_langs()
– с его помощью можно узнать, какие языковые пакеты установлены в Web SDK.
Добавили ошибку для ситуации, когда происходит обращение к несуществующему языковому пакету.
Добавили ошибку для ситуации, когда не удалось загрузить необходимые ресурсы. Новый ключ: unable_load_resource.
Обновили тексты ошибок error_connection_lost
и error_service_unavailable
.
Обновили языковые файлы для Web SDK.
Функция обрезки больше не добавляет полосы к кадрам c разрешением менее 512×512.
Если доступ к камере отсутствует в течение длительного времени, пользователям теперь показывается инструкция, как его включить. Для всех браузеров, кроме Facebook, отображается инструкция по умолчанию, для Facebook – отдельная.
Добавили несколько записей в файл локализации Web SDK. Новые ключи локализации:
accessing_camera_switch_to_another_browser
,
error_camera_timeout_instruction
,
error_camera_timeout_title
,
error_camera_timeout_android_facebook_instruction
.
Улучшили работу с картоматами: расстояние, на котором может распознаваться лицо пользователя, увеличено.
Добавили в Web Plugin параметр disable_adaptive_aspect_ratio
. Этот параметр выключает подстройку соотношения сторон видео под окно съемки.
Добавили в Web Plugin параметр get_user_media_timeout
: когда SDK не может получить доступ к камере, по истечении этого таймаута появится подсказка, как решить проблему.
Добавили несколько записей в файл локализации Web SDK. Новые ключи:
oz_tutorial_camera_android_edge_browser
oz_tutorial_camera_android_edge_instruction
oz_tutorial_camera_android_edge_title
error_camera_timeout_instruction
error_camera_timeout_title
Если SDK не может найти перевод для какого-либо из имеющихся ключей, соответствующее сообщение будет показываться на английском.
Бессерверный Web SDK теперь можно распространять через Node Package Manager.
Демонстрацию ошибок API в модальном окне теперь можно отключить. Установите параметру disable_adapter_errors_on_screen
значение True
.
Мобильные браузеры теперь используют основную (заднюю) камеру для съемки документов.
Обновили образцы кода.
Исправили ошибку, когда при повторной попытке пользователя пройти сценарий после неудачи 3D-маска не реагировала на лицо.
Обновления безопасности и журналирования.
Исправили ошибку, из-за которой при съемке лица в горизонтальной ориентации на мобильных устройствах не показывалось предупреждение о необходимости поворота устройства вертикально.
У некоторых пользователей ранее наблюдались зависания при использовании WebView. Теперь в этих случаях пользователь может нажать кнопку, чтобы продолжить работу с приложением. В связи с этим обновили файл со строками в разделе локализации. Ключ: tap_to_continue
.
Расширили возможности отладки.
Крупные обновления безопасности: улучшили защиту от виртуальных камер и модификации JavaScript-кода.
Улучшили поддержку WebView:
Добавили инструкции для неизвестных WebView-браузеров на платформах Android и iOS. Соответствующие события записываются при журналировании.
Улучшили интеграцию с React Native: добавили атрибут webkit-playsinline
, чтобы запуск камеры в полноэкранном режиме для iOS WebView работал корректно.
Ошибка работы с iFrame при параметре iframe_allowed
= False
теперь отображается корректно.
Новые ключи локализации:
oz_tutorial_camera_android_webview_browser
oz_tutorial_camera_android_webview_instruction
oz_tutorial_camera_android_webview_title
Web SDK теперь работает и с черным списком: вы можете сравнить лицо из снятого Liveness-медиафайла с лицами из вашей базы данных. Создайте коллекцию (или коллекции) с нужными фотографиями через API или веб-интерфейс и добавьте соответствующий идентификатор (или идентификаторы) в массив analyses.collection_ids
в файле конфигурации веб-адаптера.
Мы вернули поддержку iframe: установите для параметра iframe_allowed
в файле конфигурации Web Adapter значение True
.
Интервал опроса для получения результатов анализов теперь можно настраивать. При необходимости измените его в параметре results_polling_interval
файла конфигурации Web Adapter.
Теперь вы можете выбрать, какую камеру использовать, переднюю или заднюю, и через веб-плагин. В методе OzLiveness.open()
установите для cameraFacingMode
значение user
для передней камеры и environment
для задней. Этот параметр работает только в том случае, если для параметра use_for_liveness
в файле конфигурации веб-адаптера не установлено значение.
Стили плагина теперь добавляются автоматически. Обратите внимание: удалите стили, которые вы ранее применили к странице клиента вручную (строка <link rel="stylesheet" href="/plugin/ozliveness.css" />
), чтобы избежать конфликтов.
Исправлены некоторые ошибки и улучшено журналирование.
Улучшили защиту против инъекционных атак.
Заменили идентификатор языка для бразильского португальского с pt
на pt-br
согласно стандарту ISO.
Удалили конфигурационный параметр lang_default
.
Прозрачность 3D-маски теперь можно настраивать.
Добавили возможность использования мастер-лицензии, которая работает без ограничений по домену.
Добавили параметр master_license_signature в параметры конфигурации Web Adapter.
Исправили ошибки.
Улучшили работу SDK.
Добавили 3D-маску, которая заменяет овал при съемке видео нашим SDK. Для включения маски установите конфигурационному параметру load_3d_mask
значение true
.
Обновили телеметрию (журналирование).
Обновления журналирования.
Обновления безопасности.
Улучшили работу SDK.
Улучшили работу SDK.
Исправили ошибки.
Изменили сигнатуру коллбэка on_error():
теперь он возвращает не только код ошибки, но и сообщение, а также идентификатор телеметрии для журналирования.
Добавили параметр конфигурации для режима debug. Если он принимает значение True, в Web SDK можно открыть страницу /debug.php, на которой размещена информация о текущих конфигурации и лицензии.
Исправили несколько ошибок и улучшили журналирование.
Добавили возможность выбора камеры при запуске плагина (если на устройстве их несколько).
Полностью переделали дизайн для SDK и демо, в том числе добавили настройки защиты от мошенников: при включении опции во время записи видео появляется дополнительное сообщение. Новые возможности настройки интерфейса описаны здесь.
Перевели SDK на португальский, испанский и казахский языки.
Добавили жест Комбо.
Добавили шкалу прогресса для загрузки медиа.
Жесты Zoom in и Zoom out больше не поддерживаются.
Съемка видео в альбомной ориентации теперь работает корректно для планшетов.
Убрали опцию lang_allow
из файла конфигурации Web Adapter.
В архитектуре capture
при обнаружении виртуальной камеры параметр additional_info
теперь отображается внутри списка from_virtual_camera
.
Добавили возможность обрезать кадр с лицом без потери качества.
Координаты "ориентиров" лица для архитектуры capture теперь передаются корректно.
Улучшили качество съемки;
Значительно переработали лицензирование:
добавили описание ошибок, теперь понятно, что и почему произошло;
теперь можно указывать лицензию в JS в процессе работы;
при применении в OzLiveness.open()
лицензия переписывает предыдущую;
лицензия теперь не требует указания порта и протокола;
в URL лицензии можно указывать поддомены;
информация о лицензии выводится в лог Docker при запуске плагина на сервере;
при использовании на localhost и 127.0.01 лицензия больше не запрашивается;
Коллбэк on_capture_complete
вызывается на всех архитектурах по завершении съемки видео и содержит информацию о жестах на этом видео;
При запуске Oz Web Liveness и Oz Web Adapter их версии теперь выводятся в лог Docker;
Добавили параметры для передачи при съемке информации о прямоугольнике, в который вписано лицо;
Убрали неиспользуемое поле adapter_version из метаданных заявки;
Починили кнопку переключения камер в Google Chrome;
При старте Web SDK в лог Docker выводятся фактические параметры конфигурации.
Изменили расширение некоторых файлов системы Oz Forensics с .bin на .dat.
Ссылки на дополнительные скрипты теперь формируются с использованием адреса основного скрипта.
Добавили возможность распространять Web SDK только статическими файлами, без адаптера (в режиме capture).
Web SDK теперь может работать с CDN.
Теперь можно запускать несколько экземпляров Oz Liveness Web Plugin на разных страницах, в этом случае необходимо указать на этих страницах путь для загрузки скриптов.
При обновлении с 0.4.0 лицензию необходимо также обновить.
Исправили ошибку экрана съемки.
Добавили лицензирование, для получения лицензии необходим origin.
Внешний вид Web SDK теперь можно настраивать.
Исправили ошибки интеграции с Angular.
Исправили ошибку с отсутствием секции IMAGE_FOLDER в JSON-ответе при включенном lossless-кадре.
Исправили ошибки работы с библиотекой ravenjs.
Рамку для фото документов теперь можно настроить.
Повысили безопасность SDK.
Названия всех доступных пользователю камер теперь добавляем в метаинформацию.
В формате видео / режиме zip теперь можно загружать lossless-кадр.
Best Shot теперь работает корректно.
В ответах сервера код ошибки и расшифровка теперь передаются раздельно.
Если режим для SDK настроен в переменных окружения architecture
, api_url
, то он применяется в настройках автоматически.
В режиме lite можно выбрать best frame для любого действия.
В режиме lite фото, отправленное через API, получает статус on_complete
только при успешном liveness.
Можно управлять cors из переменных окружения (по умолчанию заголовки cors не добавляются).
Добавили значение folder
для result_mode
: оно возвращает тот же ответ, что и значение status
, но с folder_id
.
Оптимизировали шифрование: теперь шифруем только метаданные, необходимые для расшифровки объекта.
Оптимизировали отправку данных: теперь изображения отправляются в отдельных полях формы, а не в одном JSON-объекте.
Добавили проверку поддерживаемых параметров камеры.
Включили новый метод шифрования изображений.
Оптимизировали формат отправки изображений.
Добавили опцию use_for_liveness
: при съемке лица на мобильных устройствах выбирается тыловая камера, а на десктопе отключаются флип и обводка овала. По умолчанию опция отключена.
Уменьшили время видео video_selfie_best (жест Selfie) с 1 до 0,2 сек.
Оптимизировали загрузку скриптов – теперь ее можно настраивать.
Повысили точность работы алгоритмов.
Добавили казахский язык.
Добавили инструкцию по доступу к камере для десктопа.
Дополнили журналирование – пишутся запросы к plugin_liveness.php и user-agent в лог сервера.
Добавили возможность работы с режимом Lite.
Добавили шифрование.
Обновили библиотеки.
Добавили возможность скрывать логотип Oz Forensics.
Дополнили руководства для некоторых браузеров и социальных сетей.
Добавили обработку неизвестных и руководство для "неизвестных" браузеров.
Оптимизировали потребление памяти для рамки.
Добавили руководство по включению камер в различных браузерах под Android.
Для настройки интерфейса воспользуйтесь разделом style
в методе Ozliveness.open
. Изменить можно следующие настройки:
faceFrame
– цвет рамки вокруг лица:
faceReady
– цвет рамки при правильном расположении лица;
faceNotReady
– цвет рамки при неправильном положении лица, когда анализ не может быть запущен.
centerHint
– текст подсказки в центре.
textSize
– размер текста;
color
– цвет текста;
yPosition
– позиция по вертикали относительно верха контейнера;
letterSpacing
– расстояние между буквами;
fontStyle
– стиль текста (полужирный, курсив и так далее).
closeButton
– кнопка закрытия плагина:
image
– изображение для кнопки, может быть картинкой в формате PNG или dataURL в base64.
backgroundOutsideFrame
– заливка вне рамки вокруг лица:
color
– цвет заливки.
Пример:
Результаты анализа доступны клиентскому приложению через функции-коллбэки Web Plugin, однако мы рекомендуем получать их через бэкенд напрямую от Oz API и там же обрабатывать впоследствии. Таким образом исключается вероятность манипуляций с результатами анализов через контекст браузера.
Чтобы найти нужную папку со стороны бэкенда, сделайте следующее:
На фронтенде добавьте уникальный идентификатор папки через метаданные:
Вы можете добавить собственные пары ключ-значение для хранения любой текстовой информации, например, номера документа или телефона. Однако удостоверьтесь при этом, что соблюдаются нормы законодательства о защите персональной информации.
Для оповещения о завершении анализа используйте функцию-коллбэк on_result
, затем вызовите бэкенд и передайте значение transaction_id
.
На стороне бэкенда найдите папку по присвоенному ранее идентификатору с помощью метода Folder LIST
:
Для ускорения обработки запроса мы рекомендуем ограничить выдачу по времени:
В ответе придут результаты анализов и идентификатор папки folder_id
- он потребуется для дальнейших действий.
Web Adapter отправляет Web Plugin данные с различным уровнем детализации. Для продакшна рекомендуется установить минимальный уровень. Для этого в файле конфигурации Web Adapter установите параметру result_mode
значение "safe".
В этом разделе собраны описания наиболее часто встречающихся примеров интеграции системы Oz Forensics Liveness and Face Biometry. Сценарии могут как использоваться по отдельности, так и комбинироваться – например, интеграция Liveness сразу и в мобильное, и в веб-приложение или интеграция и Liveness-решения, и решения для сравнения лиц.
Этот коллбэк вызывается после окончания проверки и возвращает результат анализа (не применяется в режиме capture
). Вид результата зависит от параметра настройки Web Adapter result_mode
.
Пожалуйста, обратите внимание: в целях безопасности мы рекомендуем настроить логику принятия решений на стороне вашего бэкенда. Более детальную информацию и примеры кода вы можете найти здесь.
Если result_mode
установлен как safe
, коллбэкon_complete
возвращает только состояние анализов:
При значении status
коллбэк возвращает состояние анализов, а также – для каждого типа анализа – название типа, состояние анализа этого типа и вердикт системы.
При значенииfolder
возвращается практически то же самое, что при status
, только добавляется идентификатор папки.
В случае, когда result_mode
установлен на full
, вернется полная информация об анализах:
все, что вы могли видеть при значении folder
;
временные метки;
метаданные;
идентификаторы анализов, компании, группы анализов;
пороги;
информация о медиафайлах;
и так далее.
Для добавления нового языкового пакета или модификации существующего следует воспользоваться методом add_lang(lang_id, lang_obj)
.
Параметры:
lang_id
– строковое значение, которое далее можно использовать в качестве параметра lang
метода open()
;
lang_obj
– объект, ключами которого являются идентификаторы строк перевода, а значениями – сами строки перевода.
Список идентификаторов языков:
en
Английский
ru
Русский
es
Испанский
pt-br*
Португальский (бразильский)
kz
Казахский
*До версии 1.3.1 назывался pt
.
Пример использования:
OzLiveness.add_lang('ru', ruTranslation)
, гдеruTranslation
– объект JSON.
Для установки нужного языка укажите его идентификатор в lang
:
Вы можете запросить, какие языковые пакеты установлены в Web SDK, с помощью метода ozLiveness.get_langs()
. Добавленные вручную локали также отобразятся.
Список всех строковых идентификаторов:
Ключи вида oz_action_*_go
относятся к соответствующим жестам. oz_tutorial_camera_*
– к подсказкам, как включить камеру для различных браузеров. Остальные – к подсказкам для всех жестов, информационным сообщениям или ошибкам.
Если какие-либо из ключей в вашем языковом пакете отсутствуют, соответствующие строки будут отображаться на английском языке.
Инструкция по использованию стационарного установщика
Стационарный установщик – это программа для установки модулей системы Oz Forensics на сервера заказчика с автоматическим внесением всех необходимых настроек с учётом индивидуальной топологии и требований заказчика.
Данный установщик предназначен для развёртывания ПО на сервера напрямую, под учетной записью администратора. Сервера, на которых будет работать ПО, могут иметь или не иметь (с некоторыми оговорками) прямого доступа к Интернету, на них должен быть установлен Linux и к ним должен иметься полный доступ по ssh.
Для установки в OpenShift и других оркестраторах, пожалуйста, обратитесь к нам.
CPU: 16 ядер
RAM: 32 Гбайт
На диске: 80 Гбайт
CPU: 8 ядер
RAM: 16 Гбайт
На диске: 300 Гбайт
Пожалуйста, обсудите версию ОС с нашими инженерами.
Версия: 1.27.
Обязательные компоненты:
Prometheus (версия Helm-чартов (kube-prometheus-stack) – 45.7.1),
Nginx Ingress Controller (версия Helm-чартов – 4.7.1, репозиторий с чартами здесь),
ClusterIssuers.
Опциональные компоненты:
Любой Storage Class с поддержкой режима ReadWriteMany (RWX).
Требования к ресурсам узлов:
Архитектура CPU: Intel
CPU/RAM: аналогично требованиям к серверам.
Еси вы хотите настроить переменные чарта самостоятельно, обратитесь к нам.
Запросите список клиентских URL с соответствующими им сертификатами SSL.
Проверьте, что все сервера доступны по локальной сети.
Проверьте наличие доступа либо по SSH с авторизацией по паролю, либо с файлом-ключом и sudo без пароля.
Для установки мы рекомендуем использовать Docker или Podman. Если есть доступ в интернет, можно скачать и установить Docker или Podman автоматически.
Docker версии 19.03 и выше и Docker Compose версии 1.27 и выше (необходимо установить в /usr/sbin)
;
или
Podman версии 4.4 и выше (с модулями netavark и aardvark-dns) и podman-compose.
Для установки балансировщика, если он есть в вашем инсталляционном пакете мы рекомендуем установить nginx версии 1.17.5 и выше. Для CentOS и Redhat вместо этого вы можете переключить SELinux в режим Permissive. Еще один вариант – доступ к интернету для скачивания и установки в автоматическом режиме.
Проверьте, что сервера имеют доступ к сервису лицензий https://api.cryptlex.com. Брандмауэр клиента не должен блокировать этот адрес.
Процессор сервера BIO должен поддерживать AVX флаги. Для проверки используйте команду lscpu | grep -E 'avx256|avx512' | wc -l. Ответ должен быть “1”.
Брандмауэр клиента не должен блокировать:
любые запускаемые скрипты или бинарные образы;
любые локальные порты для взаимодействия процессов (сети docker: 192.168.0.1/24, 192.168.10.0/24, 192.168.11.0/24, 192.168.12.0/24, 192.168.13.0/24);
порты 80, 8000, 8080, 8090 на сервере API server и порт 8091 на сервере BIO;
порт 5432 для установки Postgres.
Перед отправкой трафика на сервер API может потребоваться завершить соединение HTTPS и дешифровать трафик. Обычно это делается с помощью брандмауэра или других инструментов безопасности.
Важно: предупредите нас о любых нетипичных и/или неофициальных программах или сервисах, установленных на серверах.
Закажите вашу персональную копию установщика с предварительно согласованным комплектом модулей для тестовой или продуктивной среды.
Для тестовой развертки предусмотрен типовой комплект установщика с ограничениями по использованию.
Вам достаточно подготовить два сервера, отвечающие изложенным выше требованиям, и скачать комплект установки.
Для запуска вам потребуется компьютер с Windows или Linux. Системные требования:
1 Гб ОЗУ, 1 CPU, 3 Гб на диске
Windows 10+ (рекомендовано)
Linux 64-bit (требуется Python 3.7)
Подробную информацию по запуску смотрите ниже (на английском языке):
Убедитесь, что системные характеристики серверов соответствуют рекомендуемым.
Убедитесь, что сервера доступны по локальной сети.
Убедитесь, что к серверам есть доступ по единой учетной записи по SSH c авторизацией по паролю или файлу-ключу и для данной записи доступен sudo без интерактивного ввода пароля.
Для установки модулей системы на серверах должен быть установлен Docker (версии >=19.03) и, желательно, Docker Compose (версии >=1.27) либо доступен Интернет для автоматического скачивания и установки.
Для установки балансировщиков сетевой нагрузки (только если это явно включено в вашу поставку) на серверах должен быть установлен nginx (версии >= 1.17.5), а также SELinux должен быть переведен в состояние permissive (относится только к CentOS и Redhat). Для автоматического скачивания и установки должен быть доступен Интернет.
Скачайте и разархивируйте вашу копию установщика.
Внесите необходимые настройки в файл settings.yml
. Ниже приведено описание некоторых важных настроек. В общем случае при установке требуется только заполнить блок авторизации и переменные.
Пожалуйста, обратите внимание: файл с настройками является вашей персональной копией и не подлежит передаче третьим лицам.
Вызовите командную строку с правами администратора. Перейдите в папку, куда вы до этого поместили разархивированный установщик (команда cd
). Запустите процесс установки.
Для запуска на Windows:
Для запуска на Linux:
Список необязательных параметров:
filename
– имя файла с настройками (по умолчанию 'settings.yml')
private_key
– путь к приватному ssh-ключу (переопределяет соответствующую опцию настроек)
key_password
– пароль к ssh-ключу, если не указан, система попросит ввести его в консоли
ssh_password
– пароль ssh-пользователя
--debug
– выводит и логирует подробную информацию выполнения
Пример использования:
Для Linux необходимо поместить приватный ssh-ключ в папку с установщиком и указать в конфигурации путь к нему: /installer/priv_key
В процессе установки вся информация записывается в файл process.log
. При возникновении нештатных ситуаций при установке прикрепляйте этот файл к обращению.
Если установка была прервана по нештатной ситуации, то после разрешения проблемы она, как правило, может быть продолжена. Если продолжение невозможно, будьте готовы к сбросу серверов в изначальное состояние. Вы можете определить неисправность самостоятельно, если добавите к команде запуска параметр: --debug
. Вы также можете обратиться к нам для уточнения информации.
Для этого необходимо сначала извлечь private-часть ключа, а затем указать путь к этому файлу в разделе auth -> ssh_private_key
Такая ошибка может происходить в том случае, когда программа docker-compose была установлена самостоятельно для запуска установщика и при этом был выбран путь по умолчанию: /usr/local/bin
Для корректной работы создайте символическую ссылку:
Для подключения плагина на страницу необходимо добавить в html-код страницы ссылку на основной скрипт плагина (plugin_liveness.php
). web-sdk-root-url
– это полученная от нас ссылка на Web Adapter.
При использовании Angular и Vue подключение стилей и скриптов происходит так же. При интеграции с React-приложениями необходимо загружать и инициализировать плагин в head
на главной странице шаблона. Внимание: при использовании <React.StrictMode>
возможна некорректная работа Web Liveness.
Oz Liveness Web SDK представляет собой модуль съемки и отправки медиаданных на анализы из веб-браузера на клиентском устройстве. Поддерживаются все основные браузеры на большинстве устройств. Доступные языки: EN, RU, ES, PT-BR, KK.
Образец кода Oz Liveness Web SDK находится здесь. Чтобы все работало корректно, нужно заменить <web-adapter-url>
на полученную от нас ссылку на Web Adapter.
Для Angular и React нужно заменить https://web-sdk.sandbox.ozforensics.com
в index.html.
Web SDK только работает по протоколу HTTPS (с SSL-шифрованием); на localhost и 127.0.01 можно использовать HTTP для проверки доступности ресурсов.
Oz Liveness Web SDK состоит из двух частей:
Клиентская – Oz Liveness Web Plugin. Используется в виде подгружаемого JavaScript-файла в Frontend-приложении клиента.
Серверная – Oz Liveness Web Adapter. Устанавливается в виде отдельного серверного модуля с привязкой к Oz API.
Руководства по интеграции:
Oz Web SDK можно развернуть как на ваших серверах, так и на наших (SaaS), в последнем случае разворачиваем и поддерживаем программное обеспечение мы, а вы пользуетесь уже готовым и настроенным продуктом. Свяжитесь с нами для выбора более удобного варианта.
Для работы Web SDK потребуется информация о доменных именах сайтов, где вы будете его использовать (она необходима для оформления лицензии).
Пошаговая инструкция по использованию Web SDK:
Интегрируйте плагин в свою страницу.
Если вы хотите настроить интерфейс Oz Web SDK под себя, здесь рассказано, как это сделать.
При работе с Web SDK ваше приложение обращается к Web Plugin, который работает в контексте браузера. Плагин обменивается информацией с Web Adapter, а тот, в свою очередь – с Oz API.
Образец кода Oz Liveness Web SDK находится здесь. Чтобы все работало корректно, нужно заменить <web-adapter-url>
на полученную от нас ссылку на Web Adapter.
Для Angular и React нужно заменить https://web-sdk.sandbox.ozforensics.com
в index.html.
В этом разделе вы узнаете, как снимать видео и отправлять его Oz API через ваш бэкенд.
Режим capture работает следующим образом:
1. Oz Web SDK снимает видео и передает его вашему web-приложению в виде последовательности кадров.
2. Web-приложение вызывает ваш бэкэнд и передает в него архив с кадрами.
3. После обработки видео ваш бэкэнд вызывает Oz API для выполнения анализов, после чего получает их результаты.
4. Ваш бэкэнд передает результаты обратно в web-приложение (опционально).
На стороне сервера необходимо сконфигурировать Web SDK для работы в режиме capture: установить параметру architecture
в файле app_config.json значение capture
.
В вашем web-приложении добавьте callback-функцию для обработки кадров при открытии плагина Web SDK:
Структура получаемого объекта зависит от того, была ли обнаружена виртуальная камера.
Список переменных с их значениями приведен ниже.
Переменная
Тип
Описание
best_frame
String
Лучший кадр, JPEG в формате data URL
best_frame_png
String
Лучший кадр, PNG в формате data URL, необходим для защиты от подмены видеопотока с помощью виртуальной камеры
best_frame_bounding_box
Array[Named_parameter: Int]
Координаты прямоугольника, в который вписано лицо на лучшем кадре
best_frame_landmarks
Array[Named_parameter: Array[Int, Int]]
Координаты "ориентиров" лица (левый глаз, правый глаз, нос, рот, левое ухо, правое ухо) на лучшем кадре
frame_list
Array[String]
Все кадры в формате data URL
frame_bounding_box_list
Array[Array[Named_parameter: Int]]
Координаты прямоугольников, в которые вписано лицо на кадрах из frame_list
в соответствующем порядке
frame_landmarks
Array[Named_parameter: Array[Int, Int]]
Координаты "ориентиров" лица (левый глаз, правый глаз, нос, рот, левое ухо, правое ухо) на кадрах из frame_list
в соответствующем порядке
action
String
Код действия
additional_info
String
Информация о среде клиента
Видео, полученное через Oz Web SDK, – это последовательность кадров. Чтобы отправить его Oz API, поместите кадры в ZIP-архив, затем используйте метод POST {{host}}/api/folders
(пройдите по ссылке для ознакомления с коллекцией Postman).
Вы можете получить из папки видео в формате MP4 video: вызовите метод /api/folders/{{folder_id}}
, указав идентификатор папки. В JSON-ответе найдите preview_url
в source_media
. В preview_url
содержится ссылка на видео. Из плагина получить MP4-видео нельзя (только в виде последовательности кадров).
При использовании архитектуры capture
также необходимо добавить в запрос POST {{host}}/api/folders
дополнительное поле additional_info
. Оно нужно для сбора информации о среде клиента. Пример заполнения тела запроса:
Для передачи в Oz API используйте данные без кодирования в base64.
В этом разделе собрана информация о том, как управлять процессом работы с продуктами Oz Forensics со стороны клиента.
Установка офлайн-сервера для лицензирования
Продукты Oz Forensics имеют гибкие возможности лицензирования. В некоторых случаях необходимо установить офлайн-сервер для лицензирования, и в данном разделе вы узнаете, как это сделать.
Для установки требуется любой стационарный (не виртуальный) сервер с ОС Linux. Свяжитесь с нами, чтобы получить архив с программой, и следуйте инструкции ниже.
На этом серверная установка окончена. Дальнейшая настройка и активация производится через Web-интерфейс на порту 8090
.
Откройте в браузере страницу по адресу http://server:8090
и авторизуйтесь.
Зайдите в раздел Settings
.
Наиболее простой способ активировать сервер лицензирования – выполнить это онлайн.
Для этого достаточно ввести ключ и нажать ACTIVATE
.
При отсутствии интернета на сервере лицензирования вы можете выполнить активацию офлайн-способом.
Для этого нажмите SWITCH TO OFFLINE ACTIVATION
.
Введите ключ и нажмите NEXT
.
Затем нажмите DOWNLOAD REQUEST FILE
.
Передайте нам файл offline_activation_request.txt
. Мы в ответ направим вам код активации.
Введите этот код в окно для offline activation response и нажмите ACTIVATE
.
Внимание: данная статья предназначена только для тех, кто пользуется или планирует пользоваться Oz Web SDK на собственных серверах.
Если вы используете Oz Web SDK по модели SaaS, пожалуйста, обращайтесь к нашим инженерам.
Настройка Oz Liveness WEB Adapter производится путем изменения конфигурационного файла, расположенного на сервере Oz Liveness WEB Adapter по пути /core/app_config.json
Образец кода Oz Liveness Web SDK находится здесь. Чтобы все работало корректно, нужно заменить <web-adapter-url>
на полученную от нас ссылку на Web Adapter.
Для Angular и React нужно заменить https://web-sdk.sandbox.ozforensics.com
в index.html.
В этом разделе находится инструкция по интеграции проверки Liveness на устройстве.
Руководство по интеграции и настройке решений Oz Forensics
В этом разделе описаны API- и SDK-компоненты биометрической системы Oz Forensics. API – бэкенд, компонент, отвечающий за взаимодействие всех модулей системы. SDK – «внешняя часть», с помощью которой:
1) ведется съемка видеороликов или изображений, которые затем обрабатываются API,
2) демонстрируется результат обработки.
У нашего API существует две версии, использоваться можно любую в зависимости от ваших потребностей.
Полная версия соответствует полнофункциональному API.
Версия Lite – упрощенная, более легкая в использовании версия, в которой содержится только самое необходимое.
Мы также предоставляем SDK для вебсайтов и мобильных устройств.
Web SDK – модуль съемки и отправки медиаданных на анализы из веб-браузера. Он состоит из встраиваемого плагина и адаптера к этому плагину.
SDK для мобильных устройств включает в себя версии для iOs и Android.
Алгоритм проверки по черному списку предназначен для проверки присутствия человека по базе заранее загруженных фотографий. В качестве источника для сравнения можно использовать изображение и/или фрагмент видео.
Порядок действий описан ниже.
1. Авторизуйтесь. Параметры передаются в json-запросе в составе credentials. См. статьи и .
2. Поместите видеофайл в папку, как описано .
Пример заполнения payload
для видео:
3. Запустите анализ: POST/api/folders/{{folder_id}}/analyses/
В типе анализа должно быть указано collection
.
В source_media
указывается media_id
из ответа предыдущего запроса. Это опционально, если требуется проверить одно из двух заранее загруженных в папку видео.
Сохраните analyse_id
из ответа.
В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.
Если вы хотите узнать, с кем именно из вашей базы фотографий совпало лицо с медиафайла, который вы только что загрузили, найдите в ответе анализ collection
, в нем results_media
, где и будет идентификатор нужной вам персоны person_id
. Чтобы получить информацию об этой персоне, вызовите метод GET /api/collections/{{collection_id}}/persons/{{person_id}}
, указав идентификаторы вашей коллекции и персоны в ней.
4а. Через некоторое время п. Дождитесь, когда поля resolution_status
и resolution
изменят статус на любой, кроме PROCESSING
, – этот статус и будет результатом.
4б. Еще один вариант: добавьте , который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint
:
Подробно статусы анализов описаны .
Работа на ваших серверах
Установите Web SDK. Вам помогут наши инженеры. Лицензия также будет установлена в этот момент. Когда вам потребуется ее обновить, воспользуйтесь этой статьей.
Настройте Web Adapter.
SaaS
Ничего делать не нужно, установку и настройку серверной части обеспечивают инженеры Oz Forensics. Вы получите ссылку для интеграции (см. п. 2).
Для авторизации в Oz API используйте адрес API и токен доступа, как показано ниже.
Мы рекомендуем указывать адрес API в вашем приложении на экране, предшествующем проверке Liveness. После установки адреса происходит служебный вызов API, и если вы устанавливаете адрес при запуске или инициализации приложения, нагрузка на сервер может быть слишком высокой.
Второй вариант: логин и пароль.
Мы рекомендуем использовать метод аутентификации по токену доступа, как более безопасный.
По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для телеметрии:
Для выпуска лицензии потребуется информация о доменных именах сайтов, где будет использоваться Web SDK. Можно также указывать поддомены.
Чтобы узнать доменный адрес, в режиме разработчика выполните window.origin
на странице, где будет запускаться Web SDK. При использовании Web SDK на localhost / 127.0.0.1 лицензия может работать без информации о доменных именах.
Укажите информацию о лицензии одним из двух способов:
через данные о лицензии:
через путь к лицензии:
Проверьте, как установилась лицензия: например, пройдите по доменному имени хоста и выполните действие Liveness -> Simple selfie.
Далее при каждом запуске Web SDK система будет проверять валидность лицензии.