arrow-left

Only this pageAll pages
gitbookPowered by GitBook
triangle-exclamation
Couldn't generate the PDF for 140 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

ios 8.23 log

Общая информация

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...

Краткие руководства по интеграции

В этом разделе собраны описания наиболее часто встречающихся примеров интеграции системы Oz Forensics Liveness and Face Biometry. Сценарии могут как использоваться по отдельности, так и комбинироваться – например, интеграция Liveness сразу и в мобильное, и в веб-приложение или интеграция и Liveness-решения, и решения для сравнения лиц.

API

В этом разделе вы найдете описание API.

Проверка Liveness на сервере

В этом разделе собраны инструкции по интеграции серверных проверок Liveness.

Сравнение лиц

В этом разделе находятся инструкции по интеграции для проверок, связанных с сопоставлением лиц.

Аутентификация и обработка данных

Как работать с системой: базовые сценарии

В этом разделе описано, как выполнять проверки в рамках основных сценариев использования.

Liveness – проверка «живости», того, что человек, снятый на видео, действительно живой реальный человек в сознании.

Биометрия – сравнение двух или более лиц с различных фотографий или видеороликов с целью ценить степень их схожести (один и тот же это человек или разные люди).

Лучший кадр – выбор лучшего кадра из видеоролика для использования его в бизнес-процессах как результата Liveness-проверки, «видео в виде картинки».

Проверка по ЧС (черному списку) – проверка, присутствует ли человек, чье фото или видео загружается в систему, в базе заранее загруженных фотографий.

Oz APIchevron-right
Oz API Litechevron-right
Как интегрировать серверную проверку Liveness в ваше Web-приложениеchevron-right
Как интегрировать серверную проверку Liveness в ваше мобильное приложениеchevron-right
Как провести проверку медиафайла на Liveness без использования фронтенда Ozchevron-right
Как сравнить лицо из снятого для проверки Liveness видео с лицом из вашей базы данныхchevron-right
Как добавить съемку документа и возможность сопоставления лиц в ваше веб- или мобильное приложениеchevron-right
Аутентификацияchevron-right
Загрузка медиафайловchevron-right
Результаты анализовchevron-right
Использование вебхуков для получения результатовchevron-right
Livenesschevron-right
Биометрияchevron-right
Поиск лучшего кадраchevron-right
Проверка по базе данных фотографий (Collection)chevron-right

Проверка Liveness на устройстве

В этом разделе находится инструкция по интеграции проверки Liveness на устройстве.

Как интегрировать проверку Liveness на устройстве в ваше мобильное приложениеchevron-right
circle-info

Мы рекомендуем использовать режим анализа на сервере, поскольку он обеспечивает более точные результаты по сравнению с анализом на устройстве.

Описание системы Oz Forensics

Общая документация по работе с системой «Oz Forensics»

Oz Forensics специализируется на проверках Liveness и Face Matching (сравнении лиц): мы разрабатываем продукты, которые помогают вам удаленно идентифицировать ваших клиентов и защищаться от любых видов спуфинга – презентационных и инъекционных атак, в том числе 3D-масок, дипфейков, атак вида MITM. Вы можете добавить в свое программное обеспечение Liveness, Face Matching или и то, и другое в зависимости от того, какие именно проверки вам нужны и в каком объеме. Мы постоянно совершенствуем наши компоненты, повышая их качество и надежность их работы.

hashtag
Oz Liveness

  • Oz Liveness распознает лицо живого человека в полученном медиафайле. Алгоритм отличает реального человека в сознании от спящего, маски, фотографии, видеоролика с изображением лица и других видов спуфинг-атак. Поддерживаются мобильные и десктопные устройства. Алгоритм сертифицирован по стандарту ISO-30137-3 независимой лабораторией BixeLab.

Подтверждающие успешное прохождение тестов письма:

Также решение Oz Liveness прошло тест iBeta лаборатории NIST со 100% точностью.

Наша технология Liveness защищает и от инъекционных, и от презентационных атак.

Обнаружение инъекционных атак происходит в два этапа. Сперва наш SDK проверяет среду пользователя: нет ли манипуляций с браузером, камерой, и так далее. Затем готовый медиафайл анализируют нейронные сети, обеспечивая надежную защиту даже от самых сложных инъекционных атак.

Вероятность наличия презентационной атаки мы проверяем с помощью нейронных сетей различных архитектур, используя при этом собственные алгоритмы ансамблирования для оптимальной продуктивности. На результат работы сетей влияет множество факторов: свет, отражение, четкость картинки, фон, паттерны движения и другие. Наш Liveness работает как с пассивными (без жестов), так и с активными (различные жесты) проверками – чтобы вашим клиентам было удобно эти проверки проходить, а вы при этом получали достоверные результаты. Тест iBeta проводился на пассивном Liveness, и с тех пор мы значительно улучшили качество наших проверок.

hashtag
Oz Face Matching (Biometry)

  • Oz Face Matching (Biometry) проводит биометрическую идентификацию человека, проверяя, принадлежит ли документ человеку, проходящему проверку, на основе биометрического сходства лиц. Модуль находит лучший кадр в снятом видео и сравнивает его с фотографией из документов. Точность в 99,99% подтверждена NIST FRVT.

Наши технологии основаны на алгоритмах машинного обучения. Мы поддерживаем и верификацию (1:1, Face Verification), и идентификацию лица (1:N, Face Identification). Для обучения нейронных сетей мы используем собственный фреймворк, построенный на новейших технологиях. Собственная база данных содержит более 4,5 миллионов уникальных лиц. В ней представлены различные этнические группы, кроме того, мы учитываем предполагаемые расу, возраст и т.д. Все это помогает нашим биометрическим моделям обеспечивать достоверные результаты сопоставления.

Наш детектор лиц работает как с фотографиями, так и с видео. Кроме того, детектор лиц превосходно справляется с обнаружением лиц на удостоверениях личности, где изображения могут быть перевернуты или иметь низкое качество.

Программное обеспечение Oz сочетает точность анализа с легкостью интеграции и использования. Чтобы дополнительно упростить процесс интеграции, мы предоставили подробное описание всех ключевых концепций нашей системы в этом разделе. Если вы готовы начать, обратитесь к нашим руководствам по интеграции: мы подготовили , которые помогут вам легко и быстро встроить проверки Liveness и Face Matching в ваше ПО.

Oz Forensics соответствует стандартам SOC 2® и ISO/IEC 27001:2022.

Руководство разработчика

Руководство по интеграции и настройке решений Oz Forensics

В этом разделе описаны API- и SDK-компоненты биометрической системы Oz Forensics. API – бэкенд, компонент, отвечающий за взаимодействие всех модулей системы. SDK – «внешняя часть», с помощью которой:

1) ведется съемка видеороликов или изображений, которые затем обрабатываются API,

2) демонстрируется результат обработки.

У нашего API существует две версии, использоваться можно любую в зависимости от ваших потребностей.

Полная версия соответствует полнофункциональному API.

Oz APIchevron-right

Версия Lite – упрощенная, более легкая в использовании версия, в которой содержится только самое необходимое.

Oz API Litechevron-right

Мы также предоставляем SDK для вебсайтов и мобильных устройств.

Web SDK – модуль съемки и отправки медиаданных на анализы из веб-браузера. Он состоит из встраиваемого плагина и адаптера к этому плагину.

SDK для мобильных устройств включает в себя версии для iOs и Android.

Oz API

hashtag
Описание

Oz API является центральным компонентом системы, который связывает между собой все остальные компоненты. В том числе:

Контейнер данных OzCapsula

Чтобы дополнительно обезопасить процесс обмена данными в рамках программного обеспечения Oz, мы внедрили новый проприетарный формат обмена. С его помощью мы обеспечиваем повышенную конфиденциальность и целостность информации.

hashtag
Как это работает

Проприетарный формат обмена данными – это контейнер, в котором ваши вся связанная с транзакцией информация, включая медиафайлы, хранится и пересылается в зашифрованном виде.

Когда вы снимаете видео с помощью наших SDK, это видео вместе со всеми сопутствующими данными попадает в контейнер. Обработать этот контейнер благодаря особенностям реализации может только Oz API, что значительно усложняет доступ к передаваемой информации со стороны мошенников.

Использование вебхуков для получения результатов

Вебхуки (webhook) упрощают процесс получения результатов анализов. После запуска анализов не нужно инициировать опрос с проверкой, завершены ли анализы. Вместо этого в запросе на анализы добавьте вебхук, который обратится к вашему веб-сайту, когда результаты будут готовы.

При создании папки добавьте нужный веб-адрес (resolution_endpoint) в раздел payload в теле запроса:

Каждый раз, когда анализы для этой папки будут готовы, вам будет приходить уведомление. Вебхук-запрос будет содержать результаты анализов и информацию о папке, для которой они выполнялись.

Oz Liveness Web SDKchevron-right
iOSchevron-right
Androidchevron-right
file-pdf
241KB
Confirmation Letter PAD.pdf
PDF
arrow-up-right-from-squareOpen
file-pdf
259KB
Confirmation Letter IAD.pdf
PDF
arrow-up-right-from-squareOpen
пошаговые инструкции
iBeta Level 1arrow-up-right
iBeta Level 2arrow-up-right
Пример payload
{    
  "resolution_endpoint": "address.com", // укажите нужный адрес здесь
    ... // остальные детали запроса
}
Postman
предоставляет единый Rest API для запуска Liveness и Biometry анализов
  • проводит авторизацию и распределение прав доступа

  • ведет базу запросов и выполненных анализов

  • архивирует входящие медиаданные

  • собирает телеметрию с подключенных мобильных приложений

  • предоставляет возможность настроить специфичные модели устройств

  • генерирует подробные отчеты о результатах выполнения анализов

  • Описание основных методов Rest API схемы:

    Коллекция Postman, включающая в себя все имеющиеся на данный момент методы:

    Коллекции Postman Oz APIchevron-right
    circle-info

    Обратите внимание: мы не раскрываем некоторые технические детали из соображений безопасности.

    hashtag
    Преимущества

    Гарантия целостности и аутентичности данных. Наш API проверяет каждый контейнер, следя, чтобы данные с устройства пользователя были оригинальными, неизмененными и полными.

    Полная конфиденциальность содержимого. Многоуровневое шифрование защищает все данные, метаданные и техническую информацию от просмотра, извлечения или анализа.

    Единый пакет. Все содержимое хранится в одном защищенном файле — это упрощает передачу и обеспечивает стабильную обработку данных.

    Встроенные инструменты для анализа. Все действия внутри контейнера логируются. Это дает полную картину для расследования инцидентов и быстрого решения проблем.

    Контроль доступа. Без авторизации получить данные из контейнера невозможно, таким образом, данные защищены от внешнего вмешательства, в том числе подмены.

    Поддержка высоких нагрузок. Процесс передачи данных с помощью контейнера можно легко масштабировать без ограничений по объему, и это не повлияет на производительность и не повысит сложность интеграции.

    hashtag
    Требования

    Минимальные версии компонентов:

    • API: 6.4.1.

    • Web SDK: 1.9.2.

    • Native SDKs: 8.22.

    Вам также потребуется получить новый токен: session_token.

    hashtag
    Использование

    circle-info

    Обратите внимание: в настоящее время поддерживается только однозапросный сценарий работы.

    1. Настройте SDK и API:

      • Web SDK

      • API

      • Для мобильных SDK дополнительных настроек не требуется, нужно будет использовать .

    2. Получите по на бэкенде session token. Он потребуется на фронтенде.

    3. Используя методы Oz SDK, запустите съемку видео и вместе со всеми необходимыми данными запакуйте медиафайл в контейнер:

    4. Отправьте контейнер в Oz API с помощью наших SDK или (опционально) через ваш бэкенд и получите результаты анализов.

    Ключевые понятия Oz API

    Oz API обеспечивает полноценный REST API-интерфейс для биометрии лица: как сравнения лиц, так и Liveness-проверок. В этой статье описаны основные концепции Oz API.

    hashtag
    Аутентификация, роли пользователей и управление доступом

    В целях безопасности каждый вызов Oz API требует наличия в заголовке токена доступа. Чтобы получить этот токен, вызовите метод POST /api/authorize/auth с полученными от нас логином и паролем. В ответе вы получите токен доступа. Его нужно будет указывать в заголовке X-Forensics-Access-Token во всех последующих вызовах методов Oz API. Подробнее процесс аутентификации описан .

    Для пользователей системы есть набор ролей, различающихся по предоставляемым возможностям: от роли CLIENT, которая дает возможность проводить проверки и скачивать отчеты без прав администратора, до ADMIN с полным доступом практически ко всем объектам системы. Детальная информация по ролям находится .

    hashtag
    Сохранение данных

    Основная сущность в Oz API – это папка (заявка): в папку вы можете загружать медиафайлы, запускать для них анализы и получать результаты не только для отдельных анализов, но и для папки в целом. В одной папке может быть любое количество медиафайлов, для каждого из которых можно назначить любое количество анализов. Анализы также могут назначаться для нескольких медиафайлов сразу.

    hashtag
    Типы медиафайлов и теги

    Oz API работает и с фото-, и с видеофайлами. Видео при этом может быть как файлом в «обычном» понимании, то есть контейнером в формате MP4 или MOV, так и последовательностью кадров в ZIP-архиве. Чтобы определить тип медиафайла, Oz API использует MIME-тип файла.

    Кроме типа файла, важно также понимать, что именно запечатлено на фото или видео: например, это может быть фотография лицевой стороны документа или селфи-видео, снятое человеком. Для описания содержания фото или видео используются теги, и на основе этих тегов система решает, какие анализы будут назначены для того или иного медиафайла. Наиболее часто используемые теги:

    • photo_id_front – для лицевой стороны документа

    • photo_selfie – для референтного фото, не являющегося документом

    • video_selfie_blank

    hashtag
    Асинхронные анализы

    Поскольку анализ видео может занять несколько секунд, анализы проводятся асинхронно. Сначала вы запускаете анализ (POST /api/folders/{{folder_id}}/analyses/), а затем следите за результатами, периодически запрашивая их с сервера, пока обработка не закончится (GET /api/analyses/{{analyse_id}} для определенного анализа или GET /api/folders/{{folder_id}}/analyses/ для всех анализов, назначенных на папку). Кроме того, можно использовать вебхуки. С примером опроса и использования вебхука можно ознакомиться .

    Более детальная информация о возможностях Oz API содержится в .

    Биометрия

    Биометрический алгоритм позволяет сравнить несколько фотографий и оценить уровень схожести людей на них. В качестве источников проверки можно передавать фото, видео и документы (с фото).

    Порядок действий:

    1. Авторизуйтесьarrow-up-right.

    2. Поместите медиафайлы в папкуarrow-up-right.

    payload
    {
      "media:tags": {
        "video1": [
          "video_selfie",
          "video_selfie_scan",
          "orientation_portrait"
        ],
        "photo1": [
          "photo_selfie"
        ],
        "doc1": [
          "photo_id",
          "photo_id_front"
        ]
      }
    }

    3. .

    Сохраните analyse_id из ответа.

    4а. Через некоторое время .

    Дождитесь, когда поля resolution_status и resolution изменят статус на любой, кроме PROCESSING, – этот статус и будет результатом.

    4б. Еще один вариант: добавьте , который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint:

    В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.

    Подробно статусы анализов описаны .

    Архитектура Oz

    В этой статье вы найдете описание компонентов Oz, которые вы можете встроить в вашу инфраструктуру в различных сочетаниях – в зависимости от того, что вам требуется.

    Самые распространенные сценарии интеграции описаны в разделе Краткие руководства по интеграции.

    hashtag
    Oz API

    Oz API – центральный компонент системы, RESTful API-интерфейс для доступа к основной функциональности анализов Liveness и Face Matching. Преимущества Oz API:

    • Сохранение данных – ваши медиафайлы и анализы хранятся для будущего использования, пока вы самостоятельно их не удалите.

    • Возможность работать и с фото, и с видео.

    • Асинхронность анализов.

    Дополнительную информацию вы можете найти в статьях и . Проверить, как работает Oz API, можно с помощью нашей .

    «Под капотом» Oz API работают следующие компоненты:

    • Хранилище файлов и база данных, где сохраняется информация о медиафайлах, анализах и так далее,

    • Модуль Oz BIO – он отвечает за работу специально обученных нейронных сетей, распознающих лица,

    • Логика лицензирования.

    Фронтенд-компоненты, такие как мобильные или Web SDK, подключаются к Oz API в процессе обработки серверных анализов. Они могут это делать и напрямую, и через бэкенд клиента.

    hashtag
    iOS и Android SDK

    iOS и Android SDK вместе называются мобильными (или нативными) SDK. Первый написан на SWIFT, второй – на Kotlin/Java. Оба они созданы для интеграции в ваши мобильные приложения.

    Интерфейс мобильных SDK легко и гибко настраивается под ваши нужды, не влияя на основную функциональность: удобный для пользователей процесс съемки видео в оптимальном для последующих анализов качестве.

    После записи Liveness-видео вы можете запустить анализы или на сервере, или на устройстве.

    Анализ на сервере проводится либо с помощью соответствующих методов SDK, либо через Oz API – в этом случае вам нужно будет вызывать его методы из вашего мобильного приложения, либо опять же через Oz API, но уже с вашего бэкенда, куда предварительно передаются готовые видеоролики. Базовый сценарий интеграции описан .

    Анализ на устройстве (Liveness и Face matching) не требует взаимодействия с Oz API и даже подключения к интернету, он выполняется прямо на телефоне. Такой анализ применим при высоких требованиях к конфиденциальности, когда вы не хотите, чтобы какая-либо информация «ушла» с телефонов пользователей.

    circle-info

    Мы рекомендуем использовать режим анализа на сервере, поскольку он обеспечивает более точные результаты по сравнению с анализом на устройстве.

    hashtag
    Web SDK

    Web SDK состоит из Web Adapter и Web Plugin. Web SDK также разработан для интеграции в ваше приложение – в его веб-версию. Функциональность Web SDK аналогична таковой для iOS и Android: удобный для пользователей процесс съемки видео в оптимальном для последующих анализов качестве.

    Web Adapter – часть Web SDK, которая устанавливается и конфигурируется на сервере. Web Plugin работает в контексте браузера: его вызывает ваше веб-приложение. Plugin взаимодействует с Adapter, а тот. В свою очередь – с Oz API. Дополнительное преимущество Web Plugin – защита от инъекционных атак:

    1. Обнаружение атак путем сбора информации о контексте браузера и свойствах камеры – таким образом можно засечь виртуальную камеру или другие инструменты инъекционных атак.

    2. Запись видео в формате, в котором запущенные на сервере нейронные сети могут наиболее эффективно отследить атаку в уже записанном видео.

    Базовые сценарии интеграции Web SDK описаны , а в вы можете ознакомиться с руководством разработчика.

    hashtag
    Web UI (веб-консоль)

    Web UI – веб-консоль для удобного просмотра хранящихся в API данных. Сама по себе она никакую информацию не записывает, а только предоставляет графический интерфейс для легкого взаимодействия с базой. Описание работы с интерфейсом Web UI вы найдете .

    Работа с контейнером данных OzCapsula

    hashtag
    Конфигурация Oz API

    Основное изменение в работе с API – это новый content type для передачи данных. Контейнер представляет собой бинарный файл, поэтому установите Content-Type = application/octet-stream. Поддержка этого типа добавлена вместе с функциональностью контейнера.

    hashtag
    Примеры

    POST api/folders:

    POST api/instant/folders:

    Для Instant API также потребуются публичный и приватный ключи. Пути к этим ключам должны быть указаны в переменных OZ_JWT_PRIVATE_KEY_PATH и OZ_JWT_PUBLIC_KEY_PATH в файле конфигурации.

    Генерация ключей:

    hashtag
    Возможные ошибки

    hashtag
    Получение Session Token

    До начала работы с SDK получите session token:

    1. (Опционально, только для stateful API) авторизуйтесь с любой ролью, кроме OPERATOR.

    2. Вызовите метод GET {{host}}/api/authorize/session_token.

    Пример запроса

    Пример ответа

    Загрузка медиафайлов

    Чтобы провести анализы для ваших медиафайлов, необходимо поместить их в папку – либо существующую, либо новую, созданную с помощью Oz API. Для каждого файла необходимо указать теги: они описывают, что это за файл и какие анализы к нему применимы.

    circle-info

    Если у вас версия API 4.0.8 или старше, обратите внимание: если вы хотите загрузить фото с тем, чтобы позднее отправить его на анализ Liveness, поместите это фото в ZIP-архив и укажите для него теги, специфичные для видео.

    Создание папки и добавление в нее медиафайлов: POSTarrow-up-right /api/folders/

    Добавление файлов в существующую папку: /api/folders/{{folder_id}}/media/

    Файлы должны быть добавлены в теле запроса, теги – в поле payload.

    Пример заполнения payload для пассивного Liveness и фотографии лицевой стороны документа:

    Пример использования (Postman):

    В случае успеха в ответе вернется информация о папке.

    Проверка по базе данных фотографий (Collection)

    Алгоритм проверки Collection предназначен для проверки присутствия человека по базе заранее загруженных фотографий. В качестве источника для сравнения можно использовать изображение и/или фрагмент видео.

    Порядок действий описан ниже.

    1. Авторизуйтесь. Параметры передаются в json-запросе в составе credentials. См. статьи Коллекции Postman и Аутентификация.

    2. Поместите видеофайл в папку, как описано здесь.

    Пример заполнения payload для видео:

    3. Запустите анализ: POST/api/folders/{{folder_id}}/analyses/

    В типе анализа должно быть указано collection.

    В source_media указывается media_id из ответа предыдущего запроса. Это опционально, если требуется проверить одно из двух заранее загруженных в папку видео.

    Сохраните analysis_id из ответа.

    4а. Через некоторое время п. Дождитесь, когда поля resolution_status и resolution изменят статус на любой, кроме PROCESSING, – этот статус и будет результатом.

    4б. Еще один вариант: добавьте , который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint:

    В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.

    Подробно статусы анализов описаны .

    Если вы хотите узнать, с кем именно из вашей базы фотографий совпало лицо с медиафайла, который вы только что загрузили, найдите в ответе анализ collection, в нем results_media, где и будет идентификатор нужной вам персоны person_id. Чтобы получить информацию об этой персоне, вызовите метод GET /api/collections/{{collection_id}}/persons/{{person_id}}, указав идентификаторы вашей коллекции и персоны в ней.

    Варианты лицензирования

    Для коммерческого использования нашего продукта необходима лицензия. Она определяет, какими функциями нашего ПО вы можете пользоваться – в соответствии с условиями договора. Лицензия выдается на ограниченное время и по необходимости продлевается.

    Когда вы запускаете наши SDK или пользуетесь Oz BIO, система проверяет валидность лицензии. Это происходит в фоновом режиме и практически не влияет на взаимодействие пользователя с нашим продуктом.

    Лицензия выписывается отдельно для каждого из компонентов:

    • Мобильные SDK для iOS и Android,

    Модели использования: SaaS, локальная установка и анализ на устройстве

    Мы предлагаем различные модели использования компонентов Oz – в зависимости от ваших надобностей и предпочтений. Вы можете подключиться к одному из наших облаков и работать с SaaS или интегрировать наши компоненты в свою инфраструктуру – система функционирует одинаково, какую бы модель взаимодействия с ней вы ни предпочли. Здесь мы приводим несколько советов по выбору.

    hashtag
    Когда лучше выбрать SaaS

    Работая по модели SaaS, вы подключаетесь к одному из наших облаков без необходимости установки нашего программного обеспечения у вас. SaaS в Oz – это:

    Liveness

    Определение живости

    Алгоритм определения живости предназначен для проверки наличия живого человека по короткому видео фрагменту.

    Порядок действий:

    1. .

    2. .

    Поиск лучшего кадра

    Алгоритм "лучший кадр" выбирает из видеозаписи наиболее качественный и удачный кадр с лицом. Алгоритм вызывается дополнительно к анализу .

    circle-info

    Внимание: в некоторых случаях конфигурация позволяет использовать "лучший кадр" только для определенных жестов.

    Порядок действий:

    Результаты анализов

    Здесь вы узнаете, как через API получить результаты выполненных анализов.

    Результат любого анализа представляет собой число. Для анализа Biometry это число отражает степень совпадения/несовпадения лиц в загруженных вами медиафайлах по сравнению с референсами – теми файлами, которые хранятся в базе. Для анализа Liveness – возможность того, что на загруженном медиафайле не реальный живой человек в сознании, а какое-то его изображение или deepfake. Результаты анализов можно узнать и без захода в каждую заявку по отдельности – API предоставляет возможность извлечь их из JSON-ответа.

    1. .

    2. Сделайте запрос к

    Работа с коллекцией в Oz API

    В этой статье рассказывается, как создать коллекцию методами API, как добавить в нее персону и фотографии, как потом все это удалить, а также удалить саму коллекцию. Все это можно также сделать , однако здесь мы описываем только соответствующие методы API.

    Коллекция в Oz API – это база фотографий лиц (персон), которые используются в анализе Collection для сравнения с лицом человека с только что снятого фото или видео.

    Персона – это сущность в коллекции, соответствующая одному человеку. Для одной персоны может быть загружено несколько фотографий.

    Oz Mobile SDK (iOS, Android, Flutter)

    Oz Mobile SDK – Software Developer’s Kit системы Oz Forensics, обеспечивающий удобную интеграцию с мобильными приложениями для регистрации и биометрической идентификации клиентов.

    circle-info

    В настоящее время мобильные SDK работают в портретном режиме.

    payload
    {
      "media:tags": {
        "video1": [
          "video_selfie",
          "video_selfie_scan",
          "orientation_portrait"
        ]
      }
    }
    новые методы
    этой инструкции
    Web SDK
    Native SDK
    – для Liveness-видео, снятого не средствами Oz Liveness SDK
  • если фото или видео снято средствами нашего SDK, теги выставляются автоматически

  • здесь
    здесь
    здесь
    соответствующей секции нашего руководства разработчика

    Web SDK (адаптер и плагин),

  • Oz BIO, который используется для серверных анализов при локальной установке.

  • Таким образом, если вы используете все три компонента нашего ПО, у вас будут три лицензии, каждая из которых будет привязана к своему компоненту.

    hashtag
    Мобильные SDK (iOS и Android)

    Для выпуска лицензии на мобильные (нативные) SDK нам потребуется bundle (application) ID вашего приложения. Лицензия бывает двух видов: онлайн и офлайн. Любой из этих типов работает с любым режимом анализа: на устройстве, на сервере или гибридным.

    hashtag
    Онлайн-лицензия

    Для онлайн-лицензии необходимо стабильное подключение к интернету. Такая лицензия в зависимости от условий вашего договора может иметь ограничения по количеству транзакций или устройств.

    • Счетчик транзакций увеличивается на 1 при каждом запуске съемки видео для анализа.

    • Счетчик устройств увеличивается на 1 при каждой установке нашего SDK на новое устройство.

    При запуске SDK обращается к серверу лицензий и получает от него список параметров, в том числе показания счетчиков транзакций и устройств.

    Основные преимущества онлайн-лицензии:

    • Не нужно перевыпускать приложение после обновления лицензии,

    • Не нужно перевыпускать приложение, если вы хотите добавить в лицензию новый bundle (application) ID. Все делается на лету.

    Поскольку обмен данными происходит достаточно быстро, пользователи приложения с онлайн-лицензией практически не заметят разницы с тем, как если бы использовалась офлайн лицензия.

    Обратите внимание: анализы на устройстве не требуют подключения к интернету, но оно все равно понадобится для проверки онлайн-лицензии.

    circle-info

    По умолчанию мы выпускаем именно онлайн-лицензии. Если вам нужна офлайн-лицензия, пожалуйста, обратитесь к вашему менеджеру.

    hashtag
    Офлайн-лицензия

    Этот тип лицензии может работать и без интернета: все нужные параметры содержатся в файле лицензии, и достаточно будет просо добавить этот файл в проект. Ограничений по транзакциям или устройствам для этого типа лицензии не предусмотрено.

    Основное преимущество офлайн-лицензии – не нужно подключение к сети. С другой стороны, когда лицензия истечет, вам придется перевыпустить приложение, иначе SDK работать не будет.

    Как добавить лицензию в SDK:

    • Android

    • iOS

    hashtag
    Web SDK

    Лицензия для Web SDK аналогична офлайн-лицензии для iOS и Android. Она работает и без интернета, все параметры прописаны в самом файле лицензии, нет ограничений по транзакциям или устройствам.

    Для выпуска лицензии Web SDK потребуется URL ваших доменов / поддоменов, где SDK будет использоваться. Для добавления лицензии в SDK поместите файл в тот же контейнер, как описано здесь. В редких случаях добавления лицензии возможно и через Web Plugin.

    Разница между офлайн-лицензией для мобильных SDK и лицензией для Web SDK – только в том, что при продлении лицензии для Web SDK приложение перевыпускать не нужно.

    hashtag
    Локальная установка (Oz BIO, серверная лицензия)

    Для локальных установок мы выпускаем отдельную лицензию с ограничением по количеству активаций, где каждая активация соответствует отдельному экземпляру установки Oz BIO. Такая лицензия может работать и онлайн, и офлайн: это зависит от того, подключены ли к интернету соответствующие сервера. При онлайн-лицензировании SDK подключается к серверу лицензий для проверки, при офлайн потребуется установить офлайн-сервер лицензий. Мы поможем при установке сервера и активации лицензии.

    hashtag
    Пробная лицензия

    Для тестовой интеграции мы предоставляем бесплатную пробную лицензию: ее достаточно для первоначального общего знакомства с продуктом, например, проверки точности анализов на ваших наборах данных. Для мобильных SDK месячную пробную лицензию вы можете сгенерировать самостоятельно по ссылкеarrow-up-right. Если вам требуется лицензия для веб-приложения, пожалуйста, свяжитесь с намиenvelope: мы выпустим лицензию и поможем вам настроить ваш экземпляр Web SDK. Вместе с лицензией вы получите логин и пароль для доступа к нашим сервисам.

    Для коммерческого использования мы подготовим новую лицензию и новые логин и пароль. Наши инженеры помогут вам с интеграцией и настройкой.

    Гибкие возможности лицензирования нашего продукта позволяют подобрать оптимальную схему для вашего конкретного случая. Если у вас остались вопросы, будем рады на них ответить.

    Androidchevron-right
    iOSchevron-right
    Безопасная аутентификация.
  • Гибкая настройка уровней доступа.

  • Ключевые понятия Oz API
    Руководство разработчика: Oz API
    коллекции Postman
    здесь
    здесь
    этом разделе
    здесь

    SDK

    В этом разделе вы найдете описание SDK для десктопных и мобильных устройств.

    Oz Mobile SDK (iOS, Android, Flutter)chevron-rightOz Liveness Web SDKchevron-right

    Руководство администратора

    В этом разделе собрана информация о том, как управлять процессом работы с продуктами Oz Forensics со стороны клиента.

    Установка модулей Ozchevron-rightСервер лицензийchevron-right
    Запустите анализarrow-up-right
    проверьте результатarrow-up-right
    вебхук
    здесь

    Код ошибки

    Сообщение

    Описание

    13

    No data container provided

    API не получил контейнер

    14

    • Data container unpacking failed

    • Invalid Data Container

    • Invalid signature

    • Invalid SummingHash

    • Invalid or empty Session Token

    В контейнере обнаружены ошибки, распаковка невозможна

    POSTarrow-up-right
    роверьте результатarrow-up-right
    вебхук
    здесь

    Описание коллбэка on_error

    Этот коллбэк вызывается, если в системе возникает какая-либо ошибка. Он возвращает информацию об ошибке и идентификатор телеметрии, с помощью которого можно получить дополнительные данные о причине сбоя.

    on_error { 
        "code": "error_code", 
        "event_session_id": "id_of_telemetry_session_with_error", 
        "message": "<error decription>", 
        "context": {}  // дополнительная информация
    }

    3. Запустите анализarrow-up-right.

    В source_media указывается media_id из ответа предыдущего запроса. Это опционально, если требуется проверить одно из двух заранее загруженных в папку видео.

    Сохраните analyse_id из ответа.

    4а. Через некоторое время проверьте результатarrow-up-right.

    Дождитесь, когда поля resolution_status и resolution изменят статус на любой, кроме PROCESSING, – этот статус и будет результатом.

    4б. Еще один вариант: добавьте вебхук, который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint:

    В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.

    Подробно статусы анализов описаны здесь.

    Авторизуйтесьarrow-up-right
    Поместите медиафайл в папкуarrow-up-right
    Авторизуйтесь.arrow-up-right
  • Поместите видеофайл в папкуarrow-up-right.

  • 3. Запустите анализarrow-up-right. Убедитесь, что параметр "extract_best_shot" имеет значение True, как показано ниже.

    В source_media указывается media_id из ответа предыдущего запроса. Это опционально, если требуется проверить одно из двух заранее загруженных в папку видео.

    Сохраните analyse_id из ответа.

    4а. Через некоторое время проверьте результатarrow-up-right. Дождитесь, когда поля resolution_status и resolution изменят статус на любой, кроме PROCESSING, – этот статус и будет результатом.

    4б. Еще один вариант: добавьте вебхук, который обратится к вашему сайту по завершении анализа. В payload запроса добавьте нужный адрес в поле resolution_endpoint:

    В запросе вебхука будет содержаться информация о папке и связанных с ней анализах.

    Подробно статусы анализов описаны здесь.

    5. Лучший кадр можно получить из ответа results_media -> output_images -> original_url

    liveness
    или
    . Параметр with_analyses должен быть установленTrue.
  • Для типа анализа Biometry ищите значение параметра min_confidence:

  • Этот параметр отражает уверенность системы в том, что на представленных медиа фигурирует один и тот же человек.

    4. Для типа анализа Liveness Analysis ищите значение параметра confidence_spoofing для нужного медиафайла:

    Этот параметр показывает вероятность спуфинг-атаки – того, что на полученном видео, например, использовалась технология deepfake или вместо человека программе показали видеоролик с этим человеком.

    Если нужно обработать несколько результатов анализов, запросите список заявок и сделайте парсинг JSON-ответа.

    Авторизуйтесьarrow-up-right
    заявкеarrow-up-right
    списку заявокarrow-up-right
    hashtag
    Как создать коллекцию

    Коллекция создается в рамках определенной компании, таким образом, для добавления новой коллекции необходим идентификатор компании company_id.

    Если вы его не знаете, найдите компанию поиском с помощью метода GET /api/companies/?search_text=test, где test – наименование компании или его часть. Сохраните полученный company_id.

    Для создания коллекции вызовите метод POST /api/collections/. В теле запроса укажите название своей коллекции (alias) и company_id нужной компании, как показано ниже:

    В ответе на запрос будет идентификатор коллекции collection_id. Он понадобится на следующем шаге.

    hashtag
    Как добавить персону или фото в коллекцию

    Для добавления новой персоны в коллекцию вызовите метод 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 – он потребуется вам, например, для удаления фото.

    hashtag
    Как удалить фото или персону из коллекции

    Чтобы удалить персону со всеми соответствующими ей фотографиями, используйте метод 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}} и укажите идентификаторы коллекции, персоны, фотографии.

    hashtag
    Как удалить коллекцию целиком

    Перед удалением коллекции нужно удалить информацию о всех входящих в нее персонах, а затем стереть саму коллекцию с помощью метода DELETE /api/collections/{{collection_id}}/.

    через веб-консоль
    request body
    {
      "analyses": [{
        "type": "biometry",
      // необязательный параметр
      // если не указать, анализ будет назначен на все медиафайлы в папке
      "source_media": [
        "1111aaaa-11aa-11aa-11aa-111111aaaaaa", 
        "2222bbbb-22bb-22bb-22bb-222222bbbbbb" 
          ]
      }]
    }
    {    
        "resolution_endpoint": "address.com",
        {
        .... // информация о папке и т.д.
        }
    }
    curl -X POST \
      '{{host}}/api/folders' \
      -H 'Content-Type: application/octet-stream' \
      -H 'X-Forensic-Access-Token: <YOUR_TOKEN>' \
      --data-binary '@/path/to/container.dat'
    curl -X POST \
      '{{host}}api/instant/folders' \
      -H 'Content-Type: application/octet-stream' \
      -H 'X-Forensic-Access-Token: <YOUR_TOKEN>' \
      --data-binary '@/path/to/container.dat'
    # Generate private key:
    openssl ecparam -name secp384r1 -genkey -noout | openssl pkcs8 -topk8 -nocrypt -out ./jwt.key
    # Generate public key:
    openssl ec -in ./jwt.key -pubout -out ./jwt.pub
    curl -L 'https://{{host}}/api/authorize/session_token' \
    -H 'X-Forensic-Access-Token: <token>' \
    -H 'Content-Type: application/json'
    {
        "session_token": "<session_token>"
    }
    payload
    {
        "media:tags": { // здесь устанавливаются теги для загружаемых вами медиафайлов
        // media files are referenced by the keys in a multipart form
            "video1": [ // ключ для файла
            // стандартный набор тегов для видео с пассивным Liveness
                "video_selfie", // видео с лицом
                "video_selfie_blank", // жест отсутствует
                "orientation_portrait" // ориентация видео
            ],
            "photo1": [
            // стандартный набор тегов для лицевой стороны документа
                "photo_id",
                "photo_id_front"
            ]
        }
    }
    request body
    {
        "analyses": [{
        "type": "collection",
        "source_media": ["идентификатор_медиафайла_источника"],
      }]
    }
    {    
        "resolution_endpoint": "address.com",
        {
        .... // информация о папке и т.д.
        }
    }
    payload
    {
      "media:tags": {
        "video1": [
          "video_selfie",
          "video_selfie_scan",
          "orientation_portrait"
        ]
      }
    }
    request body
    {
      "analyses": [{
        "type": "quality",
        "source_media": ["6187a4ef-62c4-4445-bbb2-bf62d61f1fde"],
      }]
    }
    {    
        "resolution_endpoint": "address.com",
        {
        .... // информация о папке и т.д.
        }
    }
    payload
    {
      "media:tags": {
        "video1": [
          "video_selfie",
          "video_selfie_scan",
          "orientation_portrait"
        ]
      }
    }
    request body
    {
      "analyses": [{
        "type": "quality",
        "source_media": ["6187a4ef-62c4-4445-bbb2-bf62d61f1fde"],
        "params" : {
          "extract_best_shot": true
        }
      }]
    }
    {    
        "resolution_endpoint": "address.com",
        {
        .... // информация о папке и т.д.
        }
    }
    "items": 
     [
      {
       "analyses": 
        [
         {
          "analyse_id": "biometry_analysis_id"
          "folder_id": "some_folder_id", 
          "type": "BIOMETRY", 
          "state": "FINISHED", 
          "results_data": 
           {
            "max_confidence": 0.997926354, 
            "min_confidence": 0.997926354
           }
    "items": 
     [
      {
       "analyses": 
        [
         {
          "source_media": 
           [
            {
            "media_id": "your_media_id", 
            "media_type": "VIDEO_FOLDER",
            }
           ]
          "results_media": 
           [
            "analyse_id": "liveness_analysis_id",
            "results_data": 
             {
              "confidence_spoofing": 0.55790174
             }
    {
      "alias": "blacklist",
      "company_id": "your_company_id"
    }
    {
        "media:tags": {
            "image1": [
                "photo_selfie",
                "orientation_portrait"
            ]
        }
    }
        "person:meta_data": {
            "person_info": {
                "first_name": "John",
                "middle_name": "Jameson",
                "last_name": "Doe"
            }
        },

    Быстрый старт. Вам не нужно приобретать оборудование или выделять ресурсы для системы.

  • Нулевые затраты на инфраструктуру. Мы обеспечиваем все необходимые серверные компоненты.

  • Низкая стоимость обслуживания. Свое оборудование мы обслуживаем и обновляем сами.

  • Данные не отправляются за границу вашей страны. Это актуально для регионов расположения наших облаков.

  • hashtag
    Когда лучше выбрать локальную установку на ваш сервер

    В случае локальной установке все компоненты системы встраиваются в вашу инфраструктуру. Вы получаете:

    • Полный контроль над конфигурацией,

    • Хранение и обработку данных внутри вашей инфраструктуры – «наружу» информация не передается.

    chevron-rightМинимальные требования к оборудованиюhashtag

    Сервер для Oz Biometry / Liveness

    • OS: требования к ОС указаны в таблице совместимости

    • CPU: 16 ядер

    • RAM: 32 GB

    • На диске: 80 GB

    Сервер для Oz API / Web UI / Web SDK

    • OS: требования к ОС указаны в

    • CPU: 8 ядер

    • RAM: 16 GB

    hashtag
    Когда лучше выбрать анализ на устройстве

    Анализом на устройстве вы можете воспользоваться в наших мобильных SDK для анализов Liveness и Face Matching. Применим такой анализ, например, в следующих случаях:

    • Медиафайлы с лицами представляют собой конфиденциальные данные и вы никуда не можете их пересылать.

    • Вы планируете использовать наши продукты в регионах с плохим покрытием интернет-сетями.

    circle-info

    Мы рекомендуем использовать режим анализа на сервере, поскольку он обеспечивает более точные результаты по сравнению с анализом на устройстве.

    Какую модель выбрать, решаете только вы. Мы всегда готовы оказать помощь как в выборе, так и в сопровождении.

    Пассивный и активный Liveness

    Цель проверки Liveness – подтвердить, что перед камерой находится реальный человек. Для пассивной проверки Liveness достаточно того, чтобы этот человек просто смотрел в камеру. Активная проверка подразумевает, что человек перед камерой также делает какой-то жест – например, улыбается, моргает или поворачивает голову. Пассивная проверка проще для пользователя, однако активная также может быть полезна в некоторых ситуациях – например, когда необходимо убедиться, что пользователь в курсе прохождения им Liveness-проверки.

    В наших мобильных SDK, а также в Web SDK вы можете установить, что именно должен сделать пользователь перед камерой. Можно также объединить несколько действий в последовательность. Действия различаются по:

    • сложности для пользователя,

    • размеру итогового файла,

    • точности проверки Liveness,

    • возможности перепроверки результата оператором-человеком или в суде.

    В большинстве случаев оптимальным выбором будет простое селфи, но вы можете выбрать любое другое действие в зависимости от ваших надобностей и предпочтений. Возможные действия:

    hashtag
    Пассивный Liveness

    hashtag
    Активный Liveness

    Чтобы определить наличие тех или иных действий из списка для активного и пассивного Liveness, наши алгоритмы полагаются на теги. Эти теги соответствуют действиям, производимым пользователем во время записи видео. Узнать о тегах больше вы можете . Таблица соответствия действий (или, другими словами, жестов) для различных компонентов Oz Liveness находится .

    Аутентификация

    Как получить и обновить токены доступа.

    hashtag
    Аутентификация пользователя

    Чтобы получить токены доступа, нужно выполнить 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.

    hashtag
    Автопродление сессий

    если expire_date > текущей даты, то expire_date сессии устанавливается в значение текущей даты + временная дельта настроек, описанных выше.

    hashtag
    Обновление токенов

    Чтобы обновить пару 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.

    hashtag
    Возможные ошибки

    Коллекция Postman Oz API Lite

    Для работы с Oz API Lite вы можете использовать свободно распространяемое ПО Postman. Скачайте клиентскую часть Postman по ссылкеarrow-up-right и установите ПО.

    Загрузите JSON-файл с коллекцией Postman:

    hashtag
    1.2.0

    file-download
    11KB
    Oz API Lite 1.2.0.json
    arrow-up-right-from-squareOpen

    hashtag
    1.1.1

    hashtag
    Импорт коллекции Postman

    После запуска клиента необходимо импортировать актуальную коллекцию для Postman, для этого в клиенте нажмите кнопку Import:

    Нажмите files для выбора файла, найдите нужный JSON и нажмите Открыть:

    Импортированная коллекция со всеми методами взаимодействия появится в интерфейсе Postman:

    Flutter

    Этот раздел описывает, как работать с Oz Flutter SDK для iOS и Android.

    Перед началом работы мы рекомендуем установить:

    • Flutter версии 3.0.0 или выше;

    • Android SDK версии 21 или выше;

    • dart версии 2.18.6 или выше;

    • iOS версии 13 или выше;

    • Xcode.

    Образец кода для Flutter вы можете найти .

    Проверки Liveness, Face Matching, Collection

    В этой статье вы найдете описание основных типов анализов, которые может делать программное обеспечение Oz.

    • Liveness проверяет наличие живого человека на фото или видео.

    • Face Matching сравнивает два или более медиафайла, определяя уровень сходства между запечатленными на фото или видео людьми.

    Как сравнить лицо из снятого для проверки Liveness видео с лицом из вашей базы данных

    В этой статье вы узнаете, как сравнить лицо из готового Liveness-видео с лицом на референтной фотографии, сохраненной в вашей базе данных.

    Если вы хотите провести сравнение с использованием фото документа вместо изображения из базы данных, соответствующая инструкция находится .

    К этому моменту вы, скорее всего, уже разобрались с тем, как снимать видео и проводить Liveness-проверки. Если нет, пожалуйста, ознакомьтесь со статьями:

    Как интегрировать серверную проверку Liveness в ваше Web-приложение

    Из этой статьи вы узнаете, как интегрировать Oz Liveness Web SDK в клиентское Web-приложение: для съемки видео с лицом и дальнейшей его проверки на сервере.

    Преимущества Oz Liveness Web SDK:

    • Готовый интерфейс для съемки видео, который легко встроить в приложение клиента.

    Журнал изменений

    hashtag
    1.2.3 – 21.11.2024

    • Исправили ошибку, иногда возникавшую при генерации параметров time_created и folder_id метода Detect.

    Добавление SDK в проект

    В build.gradle проекта добавьте строки:

    В build.gradle модуля добавьте строки (VERSION – версия, которую вы планируете добавить. Список версий можно найти в ):

    hashtag
    для анализов на сервере

    Локализация для iOS: добавление или обновление языкового пакета

    Обратите внимание: описанная ниже функциональность работает, начиная с версии 8.1.0.

    Чтобы добавить или обновить языковой пакет для Oz iOS SDK, используйте метод set(languageBundle: Bundle). Он информирует SDK, что вы планируете использовать отличный от стандартного бандл. В OzLocalizationCode используйте кастомный язык (опционально).

    circle-info

    Перевод состоит из ключа локализации и соответствующей ему строчки, например, "about" = "О программе"

    Съемка видео

    Создайте контроллер для съемки видео:

    action– перечень при записи видео.

    По окончании съемки вызывается метод onOZLivenessResult(results:[OZMedia]):

    Метод возвращает результаты съемки в виде массива объектов[], которые используются на следующем шаге для выполнения проверок.

    Добавление плагина на web-страницу

    Для подключения плагина на страницу необходимо добавить в html-код страницы ссылку на основной скрипт плагина (plugin_liveness.php). web-sdk-root-url – это полученная от нас ссылка на Web Adapter.

    chevron-rightДля версий до 1.4.0hashtag

    Добавьте в html-код страницы ссылку на основной скрипт плагина (plugin_liveness.php) и файл со стилями (ozliveness.css

    Web Plugin

    При работе с Web SDK ваше приложение обращается к Web Plugin, который работает в контексте браузера. Плагин обменивается информацией с Web Adapter, а тот, в свою очередь – с Oz API.

    Образец кода Oz Liveness Web SDK находится . Чтобы все работало корректно, нужно заменить <web-adapter-url> на полученную от нас ссылку на Web Adapter.

    В перечисленных ниже образцах кода нужно заменить ссылку https://web-sdk.sandbox.ozforensics.com в index.html.

    Collection ищет сходства между лицом человека, запечатленного на фото или видео, и лицами в заранее созданной базе фотографий.

    Эти анализы доступны в Oz API как для модели SaaS, так и для локальной установки наших продуктов. Liveness и Face Matching также работают в режиме «на устройстве». Детальная информация по моделям использования находится здесь.

    hashtag
    Liveness

    Проверка Liveness используется для защиты от двух видов атак.

    Презентационная атака (или спуфинг-атака) – это попытка человека обмануть систему распознавания лиц «физически», демонстрируя камере видеоролик, фотографию или другой тип медиафайла, лицо на котором похоже на лицо нужного человека. К презентационным атакам относятся также использование реалистичных масок или грима.

    Инъекционная атака – это попытка человека обмануть систему распознавания лиц программным образом, подменяя входящие данные с имеющейся камеры заранее снятым фото или видео или манипулируя выходными данными имеющейся камеры еще до передачи их системе распознавания лиц. Наиболее частый инструмент инъекционных атак – виртуальные камеры.

    Oz Liveness распознает оба типа атак:

    • презентационные атаки – с помощью любых компонентов,

    • инъекционные атаки – с помощью Oz Liveness SDK.

    Подробная информация о том, как противостоять описанным атакам, содержится в наших руководствах по интеграции:

    Как интегрировать серверную проверку Liveness в ваше Web-приложение

    Как интегрировать серверную проверку Liveness в ваше мобильное приложение

    Как провести проверку медиафайла на Liveness без использования фронтенда Oz

    По завершении проверки Liveness вы можете оценить качественные и количественные результаты.

    chevron-rightОписание результатовhashtag

    hashtag
    Качественные результаты

    • SUCCESS – анализ успешно завершен, проблем не обнаружено,

    • DECLINED – проверка не пройдена (выявлена атака).

    Если анализ еще не завершен, результат может быть PROCESSING (идет процесс обработки) или FAILED (завершить анализ не удалось, возникли ошибки).

    Если вы отправили на анализ несколько медиафайлов, общий результат будет SUCCESS только в том случае, если анализ по каждому из файлов завершился со статусом SUCCESS.

    hashtag
    Количественные результаты

    • 100% (1) – обнаружена атака, человек на фото или видео не является реальным живым человеком.

    • 0% (0) – все в порядке, на фото или видео реальный живой человек.

    Практика просить пользователей сделать что-либо на камеру во время записи видео, например улыбнуться или повернуть голову, достаточно распространена. Наши SDK тоже могут распознавать жесты, однако выполняемый жест никак не повлияет на проверку Liveness – при соответствующем анализе нейронные сети учитывают другие факторы. Более подробно это описано в статье Пассивный и активный Liveness.

    Также при проверке Liveness может сохраняться best shot (лучший кадр) – это наиболее качественный кадр из всего видео, изображение, на котором лучше всего видно лицо.

    hashtag
    Face Matching (сравнение лиц)

    С помощью биометрической проверки можно сравнить несколько медиафайлов и определить, принадлежат ли запечатленные на них лица одному и тому же человеку или нет. В качестве файлов-источников могут выступать видеоролики, изображения или скан-копии документов с фотографиями. Для успешного завершения проверки необходимо не менее двух медиафайлов.

    chevron-rightОписание результатовhashtag

    hashtag
    Качественные результаты

    • SUCCESS – анализ успешно завершен, проблем не обнаружено,

    • DECLINED – проверка не пройдена (лица принадлежат разным людям).

    Если анализ еще не завершен, результат может быть PROCESSING (идет процесс обработки) или FAILED (завершить анализ не удалось, возникли ошибки).

    Если вы отправили на анализ несколько медиафайлов, общий результат будет SUCCESS только в том случае, если анализ по каждому из файлов завершился со статусом SUCCESS.

    hashtag
    Количественные результаты

    По завершении анализа система выводит оценки, которые отражают степень сходства между людьми, запечатленными на медиафайлах – от 100 до 0%.

    • 100% (1) – лица полностью одинаковые, на проверенных медиафайлах один и тот же человек.

    • 0% (0) – лица принадлежат разным людям.

    Оценки отображается две – минимальная и максимальная. Если анализ проводился для двух файлов, эти оценки будут одинаковыми. Для трех и более медиафайлов высчитывается оценка для каждой пары, а затем выбираются наименьшая и наибольшая оценки для группы файлов. Наименьшей оценки обычно достаточно для выводов.

    Узнать о том, как внедрить технологию Face Matching в ваши процессы, вы можете в наших руководствах по интеграции.

    hashtag
    Collection (черный список, 1:N)

    В Oz API вы можете создать одну или более коллекцию изображений лиц – то есть базу данных фотографий. Collection проводит сравнение лица с только что сделанного фото или только что снятого видео с лицами из этой базы данных и показывает, присутствует ли в ней этот человек.

    chevron-rightОписание результатовhashtag

    hashtag
    Качественные результаты

    • SUCCESS – анализ успешно завершен, проблем не обнаружено,

    • DECLINED – проверка не пройдена (лица принадлежат разным людям).

    Если анализ еще не завершен, результат может быть PROCESSING (идет процесс обработки) или FAILED (завершить анализ не удалось, возникли ошибки).

    hashtag
    Количественные результаты

    Результат проверки – число, которое показывает уровень сходства между лицом с только что снятого фото или видео и лицами из коллекции (от 100 до 0%).

    • 100% (1) – человек с только что снятого фото или видео найден в коллекции фото.

    • 0% (0) – совпадений с лицами из коллекции фото не выявлено.

    Больше об типах анализов и о том, что они проверяют, вы можете прочитать здесь.

    Обновления безопасности.

    hashtag
    1.2.2 – 17.10.2024

    • Обновили модели.

    hashtag
    1.2.1 – 05.09.2024

    • С помощью метода Liveness detect теперь можно отправить не более 10 файлов в одном запросе, при этом размер каждого файла не должен превышать 15 МБайт.

    • Обновили список жестов, которые поддерживают отправку лучшего кадра (best_shot): включили повороты, наклон и подъем головы, а также улыбку и моргание.

    hashtag
    1.2.0 – 26.07.2024

    • Обновили метод Liveness detect: теперь он работает также и с видео и архивами.

    hashtag
    1.1.1 – 28.11.2022

    • Добавили метод для проверки версий компонентов

    hashtag
    1.1.0

    • API Lite теперь работает и с base64

    hashtag
    09.2021

    • Улучшили биометрическую модель

    • Добавили режим 1:N

    hashtag
    08.2021

    • Добавили политику CORS

    • Подготовили первую версию документации

    hashtag
    06.2021

    • Переработали сообщения об ошибках, теперь они более информативны

    • Упростили операции Liveness/Detect

    hashtag
    04.2021

    • Переработали ядро

    • Добавили операции для защиты от спуфинга

    hashtag
    10.2020

    • Добавили операцию extract_and_compare

    На диске: 300 GB
    таблице совместимости

    Selfie (простое селфи)

    Короткое видео длительностью около 0,7 секунды.

    Рекомендовано в большинстве случаев. Этот вариант сочетает в себе высокую точность проверки с простотой исполнения для пользователя.

    One shot (один кадр)

    Аналогично Selfie, однако вместо видео для проверки берется изображение.

    Рекомендуется, если самый важный фактор – размер итогового файла.

    Человек (оператор или судья) может затрудниться с оценкой результатов. Мы не рекомендуем использовать One Shot, поскольку анализ по одному кадру дает менее точные результаты, чем анализ по видео.

    Scan (сканирование)

    5-секундное видео, для которого пользователя просят проследить глазами за двигающимся текстом.

    Рекомендуется в случаях, когда наиболее вероятны последующие проверки со стороны человека и требуется более длинное видео для оценки.

    • Улыбка

    • Моргание

    • Поднять голову

    • Опустить голову

    • Повернуть голову налево

    • Повернуть голову направо

    Пользователю нужно сделать определенный жест в течение 5 секунд.

    Используйте активный Liveness в случаях, когда вам необходимо явное подтверждение, что пользователь в курсе проводимой проверки. Продолжительность видео и размер файла зависят от того, как быстро пользователь сделает нужное действие.

    здесь
    здесь
    здесьarrow-up-right
    file-download
    8KB
    Oz API Lite 1.1.1.postman_collection.json
    arrow-up-right-from-squareOpen

    Код ошибки

    Сообщение об ошибке

    Причина

    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.

    настройками
    circle-info

    Если наш SDK используется только для съемки, пропустите шаг "Выполнение проверок".

    Если пользователь прервет запись видео (закроет экран), появится ошибка failedBecauseUserCancelled.

    let actions: [OZVerificationMovement] = [.scanning, .smile, .far]
    let ozLivenessVC: UIViewController = OZSDK.createVerificationVCWithDelegate(self, actions: actions)
    self.present(ozLivenessVC, animated: true)
    extension viewController: OZLivenessDelegate {
     func onError(status: OZVerificationStatus?) {
            //показать ошибку
       }
     }
     func onOZLivenessResult(mediaToAnalyze: [OZMedia]) {
       //Перейти к выполнению проверки
     }
    }
    действий пользователя
    OZMedia
    ).
    web-sdk-root-url
    – это полученная от нас ссылка на Web Adapter.
    circle-info

    При использовании Angular и Vue подключение стилей и скриптов происходит так же. При интеграции с React-приложениями необходимо загружать и инициализировать плагин в head на главной странице шаблона. Внимание: при использовании <React.StrictMode> возможна некорректная работа Web Liveness.

    <script src="https://web-sdk-root-url/plugin_liveness.php"></script>
    <link rel="stylesheet" href="https://web-sdk-root-url/plugin/ozliveness.css" />
    <script src="https://web-sdk-root-url/plugin_liveness.php"></script>

    Прежний дизайн

    Если вы при обновлении с прежних версий (до 6.4.2 включительно) хотите сохранить привычный для клиентов дизайн, сбросьте настройки интерфейса экрана съемки до значений по умолчанию и примените следующие параметры (приведены только те параметры, которые нужно изменить):

    // параметры настройки верхней панели
    let toolbarCustomization = ToolbarCustomization(
       closeButtonColor: .white,
       backgroundColor: .black)
    
    // параметры настройки текста подсказки
    let centerHintCustomization = CenterHintCustomization(
       verticalPosition: 70)
       
    // параметры настройки анимации подсказки
    let hintAnimationCustomization = HintAnimationCustomization(
        hideAnimation: true)
    
    // параметры настройки рамки вокруг лица
    let faceFrameCustomization = FaceFrameCustomization(
       strokeWidth: 6,
       strokeFaceAlignedColor: .green,
       strokeFaceNotAlignedColor: .red)
    
    // параметры настройки фона за рамкой
    let backgroundCustomization = BackgroundCustomization(
       backgroundColor: .clear)
    
    OZSDK.customization = OZCustomization(toolbarCustomization: toolbarCustomization,
       centerHintCustomization: centerHintCustomization,
       hintAnimationCustomization: hintAnimationCustomization,
       faceFrameCustomization: faceFrameCustomization,
       versionCustomization: versionCustomization,
       backgroundCustomization: backgroundCustomization)
  • Интеграция Oz Liveness Mobile SDKarrow-up-right

  • В данном сценарии описывается, как загрузить референтное фото в ту же папку, где находится снятое ранее Liveness-видео, запустить анализ BIOMETRY и получить результаты.

    hashtag
    1. Получите идентификатор папки, где находится нужное видео –folder_id

    Сравнение лиц должно происходить в одной папке, поэтому вам необходим идентификатор папки, где лежит нужное вам Liveness-видео. Получите идентификатор папки, как показано ниже, и передайте его на свой бэкенд.

    • Для видео, записанного через Web SDK, процесс получения идентификатора папки описан здесь.

    • Для видео, записанного через наши мобильные SDK, получите идентификатор папки из результатов анализа:

    Android:

    iOS:

    hashtag
    2. Загрузите в папку референтное фото из своей базы данных

    Вызовите методarrow-up-right POST /api/folders/{{folder_id}}/media/. Замените folder_id на полученный на предыдущем шаге идентификатор папки. Так ваше изображение попадет в папку с нужным видео.

    Установите в запросе теги в соответствии с тем, что за фото вы загружаете – фото документа или селфи. Это нужно сделать в поле Payload.

    hashtag
    3. Запустите анализ

    Для запуска анализа вызовите методarrow-up-right POST /api/folders/{{folder_id}}/analyses/. Замените folder_id на полученный ранее идентификатор папки. В теле запроса укажите анализ BIOMETRY.

    hashtag
    4. Запустите опрос для получения результатов

    Раз в секунду отправляйте запросarrow-up-right GET /api/analyses/{{analyse_id}} с полученным ранее analyse_id, пока состояние анализа не изменится с PROCESSING на какое-либо другое. Когда анализ завершится, вы можете оценить результаты:

    • качественные – в resolution (SUCCESS или DECLINED).

    • количественные – в analyses.results_data.min_confidence

    Коллекция Postman для описанных в статье шагов.

    Эти шаги помогут вам провести сравнение лиц с использованием Oz API. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь веб-консолью или API-запросами.

    Детальную информацию о том, как применять инструменты Oz API, вы можете найти в руководстве разработчика.

    здесь
    Интеграция Oz Liveness Web SDK
    file-download
    6KB
    Face Matching with a Reference Photo.postman_collection.json
    arrow-up-right-from-squareOpen
    Высокое качество видео, которое обеспечивает точность проверки Liveness.
  • Возможность обнаружения и презентационных, и инъекционных атак. Инъекционная атака – попытка выдать за свежеснятое видео другое, снятое ранее с помощью виртуальной камеры.

  • Возможность использования как SaaS-модели, так и локальной установки – с теми же функциями, но без необходимости слать какие-либо данные в облако.

  • «Под капотом» Web SDK взаимодействует с OZ API.

    Мы рекомендуем начать с SaaS-модели и затем перейти к локальной установке – чтобы настроить бесшовную интеграцию Web SDK с вашими фронтендом и бэкендом. В этой инструкции приводятся шаги, благодаря которым процесс интеграции будет простым и ясным.

    1. Получите доступ к персональной копии Web Adapter

    Передайте нам информацию о доменных именах тех страниц, откуда планируется вызывать Web SDK, а также адрес электронной почты для создания аккаунта администратора. Пример:

    Доменные имена:

    1. www.yourbrand.com

    2. www.yourbrand2.com

    Электронная почта:

    • [email protected]

    Мы направим вам ссылки и логин с паролем для дальнейшей интеграции и использования Web SDK.

    Логин: [email protected]

    Пароль: …

    API: https://sandbox.ohio.ozforensics.com

    Web-консоль: https://sandbox.ohio.ozforensics.com

    Web Adapter: https://web-sdk.cdn.sandbox.ozforensics.com/your_company_name/

    1. Добавьте Web Plugin на вашу страницу

    В HTML-коде страницы разместите следующее. web-adapter-url необходимо заменить на полученную от нас ссылку.

    1. Реализуйте собственную логику для использования Web Plugin

    Добавьте код, который будет запускать плагин и обрабатывать результаты:

    circle-check

    Пожалуйста, обратите внимание: в целях безопасности мы рекомендуем настроить логику принятия решений на стороне вашего бэкенда. Более детальную информацию и примеры кода вы можете найти здесь.

    Шаги выше помогут вам в базовой интеграции Web SDK в ваше веб-приложение. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь веб-консолью или API-запросами (получение видео в MP4 и результатов анализов).

    Дальнейшие шаги описаны в руководстве разработчика по Web Plugin:

    • Настройка внешнего вида плагина

    • Добавление дополнительного языка

    • Настройка поведения плагина

    • Настройка параметров и коллбэк-функций

    • Рекомендации по безопасности

    Образец кода Oz Liveness Web SDK находится здесьarrow-up-right. Чтобы все работало корректно, нужно заменить <web-adapter-url> на полученную от нас ссылку на Web Adapter.

    Для Angular и React нужно заменить https://web-sdk.sandbox.ohio.ozforensics.com в index.html.

    • Образец кода для Angulararrow-up-right

    • Образец кода для Reactarrow-up-right

    hashtag
    для анализов и на сервере, и на устройстве

    Обратите внимание: размер выходного файла будет больше.

    Вне зависимости от выбранного режима, добавьте еще:

    allprojects {
      repositories {
        maven { url "https://ozforensics.jfrog.io/artifactory/main" }
      }
    }
    dependencies {
      implementation 'com.ozforensics.liveness:sdk:VERSION'
    }
    Журнале изменений
    {
    	"credentials": {
    		"email": "{{user_email}}",
    		"password": "{{user_password}}"
    	}
    }
    {
        "expire_token": "{{expire_token}}"
    }
    AnalysisRequest.Builder()
            ...
            .run(object : AnalysisRequest.AnalysisListener {
                override fun onSuccess(result: List<OzAnalysisResult>) {
                    // сохраните folder_id, он потребуется далее
                    val folderId = result.firstOrNull()?.folderId
                }
                ...
            })
    private void analyzeMedia(List<OzAbstractMedia> mediaList) {
        new AnalysisRequest.Builder()
                ...
                .run(new AnalysisRequest.AnalysisListener() {
                    @Override public void onStatusChange(@NonNull AnalysisRequest.AnalysisStatus analysisStatus) {}
                    @Override
                    public void onSuccess(@NonNull List<OzAnalysisResult> list) {
                        String folderId = list.get(0).getFolderId();
                        }
                    }
                    ...
        });
    }
    analysisRequest.run(
    scenarioStateHandler: { state in }, 
    uploadProgressHandler: { (progress) in }  
    )   { (analysisResults : [OzAnalysisResult], error) in 
            // сохраните folder_id, он потребуется далее
            let folderID = analysisResults.first?.folderID
        }
    }
    {
      "media:tags": { 
        "photo1": [
            "photo_id", "photo_id_front" // для фото лицевой стороны документа
            // ИЛИ
            "photo_selfie" // для фото, не являющегося документом
        ]
      }
    }
    {
        "analyses": [
            {
                "type": "biometry"
            }
        ]
    }
    <script src="https://<web-adapter-url>/plugin_liveness.php"></script>
    OzLiveness.open({
      lang: 'en',
      action: [
        // 'photo_id_front', // фото документа
        'video_selfie_blank' // видео с пассивным Liveness
      ],
      on_complete: function (result) {
        // эта функция вызывается по завершении анализа
        console.log('on_complete', result);
      }
    });
    dependencies {
    implementation 'com.ozforensics.liveness:full:VERSION'
    }
    android {
      compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }
    .
    • Если вы не укажете кастомные язык и бандл, SDK будет использовать имеющиеся переводы.

    • Если бандл указан, а язык нет, приоритетным считается перевод для ключа из файла локализации кастомного бандла. Если такой ключ там не найден, перевод берется из стандартного бандла.

    • Если указаны кастомные и бандл, и язык, все переводы берутся из файла локализации кастомного бандла.

    Список переводов для iOS:

    Ключи вида Action.*.Task относятся к соответствующим жестам. Остальные – к подсказкам для всех жестов, информационным сообщениям или ошибкам.

    При появлении новых ключей, если переводов для них в кастомном бандле нет, будет показываться текст на языке по умолчанию (английском).

    file-archive
    12KB
    Oz_SDK_iOS_Strings.zip
    archive
    arrow-up-right-from-squareOpen

    Образец кода для Angulararrow-up-right

  • Образец кода для Reactarrow-up-right

  • Образец кода для Vuearrow-up-right

  • Образец кода для Sveltearrow-up-right

  • здесьarrow-up-right
    Добавление плагина на web-страницуchevron-right
    Запуск плагинаchevron-right
    Скрытие и закрытие плагинаchevron-right
    Локализация: добавление собственного языкового пакетаchevron-right
    Настройка интерфейсаchevron-right
    Рекомендации по безопасностиchevron-right
    Совместимость с браузерамиchevron-right
    Лицензирование без использования сервераchevron-right

    Oz API Lite

    triangle-exclamation

    С выходом API 6.0 мы прекращаем развивать и поддерживать API Lite.

    Oz API Lite – это облегченная версия Oz API, менее требовательная к ресурсам, более простая и производительная. Повышение производительности достигается благодаря отсутствию дополнительных функций (таких, как хранение данных или сбор статистики), а также тому, что анализы запускаются на уровне образа API Lite.

    hashtag
    Отличия архитектуры Lite от типовой

    • Только один компонент, который нужно кластеризовать.

    • Нет хранилища данных – более высокий уровень защиты информации.

    • Более простая архитектура – более короткие сроки реализации проекта.

    hashtag
    Примеры методов

    Для проверки корректности работы процессора 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 с детальной информацией по ним вы можете найти .

    Прежний дизайн

    Если вы при обновлении с прежних версий (до 6.4.2 включительно) хотите сохранить привычный для клиентов дизайн, сбросьте настройки интерфейса экрана съемки до значений по умолчанию и примените следующие параметры (приведены только те параметры, которые нужно изменить):

    OzLivenessSDK.config.customization = UICustomization(
        // параметры настройки верхней панели
        toolbarCustomization = 
    

    Локализация для Android: добавление или обновление языкового пакета

    Обратите внимание: описанная ниже функциональность работает, начиная с версии 8.1.0.

    Чтобы добавить или обновить языковой пакет для Oz Android SDK, сделайте следующие шаги:

    circle-info

    Перевод состоит из ключа локализации и соответствующей ему строчки, например, <string name="about">"About"</string>.

    1. Перейдите в папку для нужной локали или создайте такую папку. Детально процесс описан .

    2. Создайте файл и назовите его strings.xml.

    3. Скопируйте строки из приложенного файла в только что созданный.

    4. Переопределите в переводах строки, которые вам нужны.

    Список переводов для Android:

    Ключи вида action_*_go относятся к соответствующим жестам. Остальные – к подсказкам для всех жестов, информационным сообщениям или ошибкам.

    Когда вместе с новыми версиями появляются новые ключи, если вы не переопределите соответствующие строки в вашем файле, текст для новых ключей будет показываться на английском языке.

    Коллекции Postman Oz API

    Для работы с Oz API вы можете использовать свободно распространяемое ПО Postman. Скачайте клиентскую часть Postman по ссылкеarrow-up-right и установите ПО.

    Загрузите JSON-файл с нужной коллекцией Postman.

    hashtag
    6.0

    file-download
    256KB
    OZ-Forensic 6.0.0.postman_collection.json
    arrow-up-right-from-squareOpen

    Отдельная коллекция для Instant API:

    file-download
    10KB
    OZ-Forensic Instant 6.0.0.postman_collection.json
    arrow-up-right-from-squareOpen

    hashtag
    5.3 и 5.2

    hashtag
    5.0

    Oz API 5.1.0 работает с этой же коллекцией.

    hashtag
    4.0

    3.33

    hashtag
    Импорт коллекции Postman

    После запуска клиента необходимо импортировать актуальную коллекцию для Postman, для этого в клиенте нажмите кнопку Import:

    Нажмите files для выбора файла, найдите нужный JSON и нажмите Открыть:

    Импортированная коллекция со всеми методами взаимодействия появится в интерфейсе Postman:

    Описание коллбэка on_result

    Этот коллбэк вызывается раз в несколько секунд в процессе анализа и возвращает промежуточный результат (не применяется в режиме capture). Вид результата зависит от параметра настройки Web Adapter result_mode.

    circle-info

    Пожалуйста, обратите внимание: в целях безопасности мы рекомендуем настроить логику принятия решений на стороне вашего бэкенда. Более детальную информацию и примеры кода вы можете найти здесь.

    hashtag
    Safe

    Если result_mode установлен как safe, коллбэк on_result возвращает только состояние анализов:

    или

    triangle-exclamation

    Обратите внимание: перечисленные ниже result_mode используются только для тестирования. Если информации, которая передается в режиме Safe, вам недостаточно, настройте плагин в соответствии с .

    hashtag
    Status

    При значении status коллбэк возвращает состояние анализов, а также – для каждого типа анализа – название типа, состояние анализа этого типа и вердикт системы.

    или

    hashtag
    Folder

    При значенииfolderвозвращается практически то же самое, что при status, только добавляется идентификатор папки.

    hashtag
    Full

    В этом случае коллбэк возвращает полную информацию, включая чувствительные данные. Мы рекомендуем использовать safe; full будет отключен в ближайших релизах из соображений безопасности.

    Лицензирование без использования сервера

    Для выпуска лицензии потребуется информация о доменных именах сайтов, где будет использоваться Web SDK. Можно также указывать поддомены.

    circle-info

    Чтобы узнать доменный адрес, в режиме разработчика выполните window.origin на странице, где будет запускаться Web SDK. При использовании Web SDK на localhost / 127.0.0.1 лицензия может работать без информации о доменных именах.

    Укажите информацию о лицензии одним из двух способов:

    • через данные о лицензии:

    • через путь к лицензии:

    Проверьте, как установилась лицензия: например, пройдите по доменному имени хоста и выполните действие Liveness -> Simple selfie.

    Далее при каждом запуске Web SDK система будет проверять валидность лицензии.

    Подключение к API

    Для авторизации в Oz API используйте адрес API и токен доступа, как показано ниже.

    OZSDK.setApiConnection(Connection.fromServiceToken(host: "https://sandbox.ohio.ozforensics.com", token: token)) { (token, error) in
    }
    circle-info

    Мы рекомендуем указывать адрес API в вашем приложении на экране, предшествующем проверке Liveness. После установки адреса происходит служебный вызов API, и если вы устанавливаете адрес при запуске или инициализации приложения, нагрузка на сервер может быть слишком высокой.

    Второй вариант: логин и пароль.

    OZSDK.setApiConnection(Connection.fromCredentials(host: “https://sandbox.ohio.ozforensics.com”, login: login, password: p)) { (token, error) in
        // Ваш код для обработки ошибки или токена
    }

    Мы рекомендуем использовать метод аутентификации по токену доступа, как более безопасный.

    По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для :

    Рекомендации по безопасности

    hashtag
    Получение и обработка результатов анализа на бэкенде

    Результаты анализа доступны клиентскому приложению через функции-коллбэки Web Plugin, однако мы рекомендуем получать их через бэкенд напрямую от Oz API и там же обрабатывать впоследствии. Таким образом исключается вероятность манипуляций с результатами анализов через контекст браузера.

    Чтобы найти нужную папку со стороны бэкенда, сделайте следующее:

    1. На фронтенде добавьте уникальный идентификатор папки через метаданные:

      Вы можете добавить собственные пары ключ-значение для хранения любой текстовой информации, например, номера документа или телефона. Однако удостоверьтесь при этом, что соблюдаются нормы законодательства о защите персональной информации.

    2. Для оповещения о завершении анализа используйте функцию-коллбэк on_result, затем вызовите бэкенд и передайте значение transaction_id.

    3. На стороне бэкенда найдите папку по присвоенному ранее идентификатору с помощью метода Folder LIST:

      Для ускорения обработки запроса мы рекомендуем ограничить выдачу по времени:

    4. В ответе придут результаты анализов и идентификатор папки folder_id - он потребуется для дальнейших действий.

    hashtag
    Ограничение объема данных, которые сервер отправляет Web Plugin

    Web Adapter отправляет Web Plugin данные с различным уровнем детализации. Для продакшна рекомендуется установить минимальный уровень. Для этого в Web Adapter установите параметру result_mode значение "safe".

    Конфигурация Web Adapter

    Внимание: данная статья предназначена только для тех, кто пользуется или планирует пользоваться Oz Web SDK на собственных серверах.

    circle-exclamation

    Если вы используете Oz Web SDK по модели SaaS, пожалуйста, обращайтесь к нашим инженерам.

    Настройка Oz Liveness WEB Adapter производится путем изменения конфигурационного файла, расположенного на сервере Oz Liveness WEB Adapter по пути /core/app_config.json

    chevron-rightВнимание: информация ниже предназначена только для тех, кто пользуется или планирует пользоваться Oz Web SDK на собственных серверах.hashtag

    Перед началом работы желательно получить токен доступа.

    1. Создайте сервисную учетную запись (по умолчанию срок действия токена такой записи составляет 5 лет).

    2. Установите ПО Postman и скачайте нужную коллекцию API .

    3. Авторизуйтесь с помощью запроса

    Образец кода Oz Liveness Web SDK находится . Чтобы все работало корректно, нужно заменить <web-adapter-url> на полученную от нас ссылку на Web Adapter.

    Для Angular и React нужно заменить https://web-sdk.sandbox.ozforensics.com в index.html.

    • Образец кода для

    • Образец кода для

    Скрытие и закрытие плагина

    hashtag
    Скрытие окна плагина без отмены callback'ов

    Чтобы скрыть окно плагина, не отменяя запросы результатов анализов и пользовательские callback'и, воспользуйтесь методом hide(). Метод может пригодиться, если, к примеру, после отправки данных требуется вывести собственный индикатор загрузки.

    OzLiveness.open({
      // При получении промежуточного результата скрываем окно плагина и показываем собственные индикаторы загрузки
      on_result: function(result) {
        OzLiveness.hide();
        if (result.state === 'processing') {
          show_my_loader();
        }
      },
      on_complete: function() {
        hide_my_loader();
      }
    });

    hashtag
    Закрытие плагина

    Для принудительного закрытия окна плагина воспользуйтесь методом close(). При этом все запросы к серверу и callback-функции (кроме on_close) в рамках данной сессии будут остановлены.

    Пример использования:

    Получение лицензии

    Сгенерируйте тестовую лицензию самостоятельно (внимание, страница на английском языке) или свяжитесь с нами по для выпуска продуктивной лицензии. Для подготовки лицензии потребуется applicationId (bundle id).

    Для добавления файла лицензии в SDK вызовите метод OzLivenessSDK.init с одним из параметров LicenseSources:

    Выполнение проверок

    Если наш SDK используется только для съемки, пропустите этот шаг.

    Чтобы выполнить проверку, нужно загрузить в систему медиафайлы, а затем запустить для них анализы.

    circle-info

    Как интерпретировать результаты анализов, описано здесь: .

    Пример:

    Настройка iOS SDK

    hashtag
    Настройка интерфейса

    Чтобы настроить интерфейс Oz Liveness, воспользуйтесь OZCustomization. Полный список полей находится .

    circle-exclamation

    Android

    Работа с OZ Mobile SDK в операционной системе «Android»

    Чтобы начать пользоваться нашим SDK, нужно выполнить следующие шаги.

    1. Добавьте SDK в проект, как описано .

    2. Получите лицензию на SDK – сгенерируйте тестовую самостоятельно на нашем или запросите «боевую» по . Для лицензии потребуется application id. Добавьте лицензию в проект, как описано

    Настройка интерфейса до версии 1.0.1

    Для настройки интерфейса воспользуйтесь разделом style в методе Ozliveness.open. Изменить можно следующие настройки:

    • faceFrame – цвет рамки вокруг лица:

    iOS

    Работа с OZ Mobile SDK в операционной системе «iOS»

    Чтобы начать пользоваться нашим SDK, нужно выполнить следующие шаги.

    1. Добавьте SDK в проект, как описано .

    2. Получите лицензию на SDK – сгенерируйте тестовую самостоятельно на нашем или запросите «боевую» по . Для лицензии потребуется bundle id. Добавьте лицензию в проект, как описано

    Добавление SDK в приложение

    hashtag
    CocoaPods

    Для добавления OZLivenessSDK в ваше приложение через менеджер зависимостей CocoaPods и интеграции OZLivenessSDK в проект Xcode добавьте в Podfile:

    VERSION (опционально, по умолчанию устанавливается последняя версия) – версия, которую можно найти в .

    Начиная с версии 8.1.0, можно использовать упрощенный код:

    Получение лицензии

    Для работы SDK требуется лицензия. Сгенерируйте тестовую лицензию самостоятельно (внимание, страница на английском языке) или свяжитесь с нами по для выпуска продуктивной лицензии. Для подготовки лицензии потребуется bundle id. Есть два способа добавить лицензию в проект:

    1. Переименуйте файл в forensics.license и поместите его в проект. Прописывать путь в этом случае не нужно.

    Совместимость с браузерами

    Для работы плагина Oz Liveness браузер должен поддерживать JavaScript ES6. Версия браузера должна быть не ниже указанной в таблице.

    Браузер
    Версия

    Описание коллбэка on_complete

    Этот коллбэк вызывается после окончания проверки и возвращает результат анализа (не применяется в режиме capture). Вид результата зависит от result_mode.

    circle-info

    Пожалуйста, обратите внимание: в целях безопасности мы рекомендуем настроить логику принятия решений на стороне вашего бэкенда. Более детальную информацию и примеры кода вы можете найти .

    Сервер лицензий

    Установка офлайн-сервера для лицензирования

    Продукты Oz Forensics имеют гибкие возможности лицензирования. В некоторых случаях необходимо установить офлайн-сервер для лицензирования, и в данном разделе вы узнаете, как это сделать.

    hashtag
    Установка по шагам

    Для установки требуется любой стационарный (не виртуальный) сервер с ОС Linux. , чтобы получить архив с программой, и следуйте инструкции ниже.

    OzLivenessSDK.INSTANCE.getConfig().setCustomization(new UICustomization(
    // параметры настройки верхней панели
    new ToolbarCustomization(
        R.drawable.ib_close,
        new Color.ColorHex("#FFFFFF"),
        new Color.ColorHex("#000000"),
        100, // непрозрачность фона верхней панели (в %)
        ),
    // параметры настройки текста подсказки
    new CenterHintCustomization(
        70, // положение по вертикали (в %)
    ),
    // параметры настройки анимации подсказки
    new HintAnimation(
        hideAnimation = true
    ),
    // параметры настройки рамки вокруг лица
    new FaceFrameCustomization(     
        new Color.ColorHex("#EC574B"), 
        new Color.ColorHex("#00FF00"),
        6, // ширина линии рамки (в dp)
     ),
    // параметры настройки фона за рамкой
    new BackgroundCustomization(
        100 // непрозрачность фона (в %)
    ),
      )
    );
    ToolbarCustomization
    (
    closeIconTint = Color.ColorHex("#FFFFFF"),
    backgroundColor = Color.ColorHex("#000000"),
    backgroundAlpha = 100,
    ),
    // параметры настройки текста подсказки
    centerHintCustomization = CenterHintCustomization(
    verticalPosition = 70
    ),
    hintAnimation = HintAnimation(
    hideAnimation = true
    ),
    // параметры настройки рамки вокруг лица
    faceFrameCustomization = FaceFrameCustomization(
    strokeDefaultColor = Color.ColorHex("#EC574B"),
    strokeFaceInFrameColor = Color.ColorHex("#00FF00"),
    strokeWidth = 6,
    ),
    // параметры настройки фона за рамкой
    backgroundCustomization = BackgroundCustomization(
    backgroundAlpha = 100
    ),
    )
    метод
    метод
    метод
    метод
    метода
    здесь
    здесьarrow-up-right
    file-archive
    15KB
    Oz_SDK_Android_Strings.zip
    archive
    arrow-up-right-from-squareOpen
    file-download
    301KB
    OZ-Forensic 5.2.0-.postman_collection.json
    arrow-up-right-from-squareOpen
    file-download
    299KB
    OZ-Forensic 5.0.0.postman_collection.json
    arrow-up-right-from-squareOpen
    file-download
    298KB
    OZ-Forensic 4.0.0.postman_collection_v4.json
    arrow-up-right-from-squareOpen
    file-download
    168KB
    OZ-Forensic 3.33.0.postman_collection.json
    arrow-up-right-from-squareOpen

    17

    Opera

    47

    *В режиме совместимости с Internet Explorer Web SDK работать не будет, так как не поддерживаются некоторые важные функции.

    Google Chrome (и другие браузеры на движке Chromium)

    56

    Mozilla Firefox

    55

    Safari

    11

    Microsoft Edge*

    POST
    {{host}}/api/authorize/auth
    , где
    {{host}}
    – адрес сервера API. В теле запроса укажите логин и пароль от созданной в п. 1 сервисной учетной записи. Более подробно авторизация описана
    .
  • В ответе вам придет параметр access_token. Его значение нужно указать в параметре api_token файла настроек /core/app_config.json. В параметре api_use_token укажите config. Готово.

  • отсюда
    здесьarrow-up-right
    Angulararrow-up-right
    Reactarrow-up-right
    Настройки файла конфигурацииchevron-right
    Настройка Web Adapter через переменные окруженияchevron-right
    Настройка сервера через переменные окруженияchevron-right
    здесь
    Рекомендациями по безопасности
    OzLiveness.open({
        license: {
            'payload_b64': 'some_payload',
            'signature': 'some_data',
            'enc_public_key': 'some_key'
        },
        ...,
    })
    OzLiveness.open({
        licenseUrl: 'https://some_url',
        ...,
    })
    let eventsConnection = Connection.fromCredentials(host: https://echo.cdn.ozforensics.com/,
                                    login: <[email protected]>,
                                    password: your_telemetry_password)
    OZSDK.setEventsConnection(eventsConnection) { (token, error) in
    }
    телеметрии
    файле конфигурации
    var session_id = 123;
    
    OzLiveness.open({
      // Передаем произвольные метаданные, по которым в дальнейшем сможем идентифицировать сессию в Oz API
      meta: {
        session_id: session_id 
      },
      // После отправки данных принудительно закрываем окно плагина и самостоятельно запрашиваем результат 
      on_submit: function() {
        OzLiveness.close();
        my_result_function(session_id);
      }
    });
    Для удаления медиафайлов после выполнения всех проверок используйте метод clearTempDirectory.

    hashtag
    Добавление метаданных

    Для добавления метаданных используйте метод AnalysisRequest.addFolderMeta.

    hashtag
    Извлечение лучшего кадра

    В структуре Analysis можно передать дополнительные параметры, например, для извлечения на сервере лучшего кадра.

    hashtag
    Использование медиафайла, снятого не нашим SDK

    Чтобы использовать медиафайлы, снятые не Oz iOS SDK, укажите путь к ним в структуре OzMedia (полеbestShotURL):

    hashtag
    Добавление медиафайлов в определенную папку

    Для добавления медиафайлов в определенную папку используйте метод addFolderId:

    Типы анализов
    Обратите внимание: методы настройки интерфейса необходимо вызывать перед методами, запускающими съемку видео.

    здесь
    faceReady – цвет рамки при правильном расположении лица;
  • faceNotReady – цвет рамки при неправильном положении лица, когда анализ не может быть запущен.

  • centerHint – текст подсказки в центре.

    • textSize – размер текста;

    • color – цвет текста;

    • yPosition – позиция по вертикали относительно верха контейнера;

    • letterSpacing – расстояние между буквами;

    • fontStyle – стиль текста (полужирный, курсив и так далее).

  • closeButton – кнопка закрытия плагина:

    • image – изображение для кнопки, может быть картинкой в формате PNG или dataURL в base64.

  • backgroundOutsideFrame – заливка вне рамки вокруг лица:

    • color – цвет заливки.

  • Пример:

    По умолчанию устанавливается полная версия SDK (с режимами анализа на сервере и на устройстве). Если нужен только серверный анализ, код будет выглядеть так:

    Для версий 8.1.0 и выше:

    hashtag
    SPM

    Установка через SPM возможна для SDK версий 8.7.0 и новее.

    Добавьте через SPM зависимости пакетов по ссылке: https://gitlab.com/oz-forensics/oz-mobile-ios-sdkarrow-up-right (здесь описаноarrow-up-right, как добавить зависимости). Файл OzLivenessSDK обязателен для добавления, OzLivenessSDKOnDevice можно не добавлять, если вы не используете анализы на устройстве.

    hashtag
    Ручная установка

    Вы также можете добавить файлы SDK в проект вручную.

    1. Скачайте отсюдаarrow-up-right следующие файлы и добавьте их в проект:

    • OZLivenessSDK.xcframework,

    • OZLivenessSDKResources.bundle,

    • OZLivenessSDKOnDeviceResources.bundle (если вы не используете анализы на устройстве, этот файл можно не скачивать).

    1. Скачайте TensorFlow здесьarrow-up-right: потребуется версия 2.11.

    2. Убедитесь, что:

    • оба файла xcframework отображаются в Target-Build Phases -> Link Binary With Libraries и Target-General -> Frameworks, Libraries, and Embedded Context;

    • файл(ы) bundle отображаются в Target-Build Phases -> Copy Bundle Resources.

    Журнале изменений
    Обновление лицензии для уже работающего приложения или в том случае, если вы хотите держать лицензию вне проекта:

    или

    LicenseSource – источник лицензии, LicenseData – информация о лицензии. В этот метод встроена проверка наличия активной лицензии, если такая лицензия есть – будет использоваться она, а не та, путь к которой вы указали. Для принудительной замены лицензии используйте метод setLicense.

    Если при обработке лицензии возникнут ошибки, вы получите сообщение с описанием этих ошибок. Если ошибок нет, система выведет данные о лицензии. Вы также можете запросить эти данные с помощью OZSDK.licenseData.

    hashtag
    Возможные ошибки лицензии

    Сообщение об ошибке
    Что делать

    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.

    Лицензия не устанавливалась. Добавьте лицензию в проект.

    здесьarrow-up-right
    emailenvelope
    hashtag
    Safe

    Если result_mode установлен как safe, коллбэкon_complete возвращает только состояние анализов:

    triangle-exclamation

    Обратите внимание: перечисленные ниже result_mode используются только для тестирования. Если информации, которая передается в режиме Safe, вам недостаточно, настройте плагин в соответствии с Рекомендациями по безопасности.

    hashtag
    Status

    При значении status коллбэк возвращает состояние анализов, а также – для каждого типа анализа – название типа, состояние анализа этого типа и вердикт системы.

    hashtag
    Folder

    При значенииfolderвозвращается практически то же самое, что при status, только добавляется идентификатор папки.

    hashtag
    Full

    В этом случае коллбэк возвращает полную информацию, включая чувствительные данные. Мы рекомендуем использовать safe; full будет отключен в ближайших релизах из соображений безопасности.

    параметра настройки Web Adapter
    здесь
    {
     "state": "processing"
    }
    {
     "state": "finished"
    }
    {
     "state": "processing",
     "analyses": {
       "quality": {
         "state": "processing",
         "resolution": ""
       }
     }
    }
    {
     "state": "finished",
     "analyses": {
       "quality": {
         "state": "finished",
         "resolution": "success"
       }
     }
    }
    {
     "state": "processing",
     "folder_id": "your_folder_id",
     "analyses": {
       "quality": {
         "state": "processing",
         "resolution": ""
       }
     }
    }
    OzLiveness.open({
      ...
      meta: { 
      // идентификатор пользователя или лида из стороннего лидогенератора
      // передавайте ID, если вам нужно отслеживать несколько попыток от одного и того же пользователя
        'end_user_id': '<user_or_lead_id>',
      // уникальный идентификатор попытки
        'transaction_id': '<unique_id1>'
      }
    });
    /api/folders/?meta_data=transaction_id==unique_id1&with_analyses=true
    /api/folders/?meta_data=transaction_id==unique_id1&with_analyses=true&time_created.min=([CURRENT_TIME]-1hour)
    "result_mode": "safe"
    let analysisRequest = AnalysisRequestBuilder()
    
    // создайте анализы
    let analysis = Analysis.init(
        media: mediaToAnalyze, // mediaToAnalyze – массив объектов OzMedia 
        type: .quality, // типы анализов перечислены в методах iOS SDK
        mode: .serverBased // .onDevice для анализа на устройстве
    )
    analysisRequest.addAnalysis(analysis)
    
    // initiate the analyses
    analysisRequest.run(
        statusHandler: { state in }, // добавьте обработчик шагов сценария
        errorHandler: { _ in } 
    ) { result in
              // ваш обработчик результата
      }
    let analysis = Analysis.init(media: mediaToAnalyze, type: .quality, mode: .serverBased)
    var folderMeta: [String: Any] = ["key1": "value1"]
    analysisRequest.addFolderMeta(folderMeta)
    ...
    let analysis = Analysis.init(media: mediaToAnalyze, type: .quality, mode: .serverBased, params: [“extract_best_shot” : true])
    let referenceMedia = OZMedia.init(movement: .selfie,
                      mediaType: .movement,
                      metaData: ["meta":"data"],
                      videoURL: nil,
                      bestShotURL: imageUrl,
                      preferredMediaURL: nil,
                      timestamp: Date())
    let analysis = Analysis.init(media: mediaToAnalyze, type: .quality, mode: .serverBased)
    analysisRequest.addFolderId(IdRequired)
    // параметры настройки верхней панели
    let toolbarCustomization = ToolbarCustomization(
       closeButtonIcon: UIImage(named: "example"),
       closeButtonColor: .black.withAlphaComponent(0.8),
       titleText: "",
       titleFont: .systemFont(ofSize: 18, weight: .regular),
       titleColor: .gray,
       backgroundColor: .lightGray)
    
    // параметры настройки текста подсказки
    let centerHintCustomization = CenterHintCustomization(textColor: .white,
       textFont: .systemFont(ofSize: 22, weight: .regular),
       verticalPosition: 42,
       backgroundColor: UIColor.init(hexRGBA: "1C1C1E8F")!,
       hideTextBackground: false,
       backgroundCornerRadius: 14)
       
    // параметры настройки анимации подсказки
    let hintAnimationCustomization = HintAnimationCustomization(
       hideAnimation: false,
       animationIconSize: 80,
       toFrameGradientColor: UIColor.red)
    
    // параметры настройки рамки вокруг лица
    let faceFrameCustomization = FaceFrameCustomization(
       strokeWidth: 4,
       strokeFaceAlignedColor: .green,
       strokeFaceNotAlignedColor: .red,
       geometryType = .rect(cornerRadius: 10),
       strokePadding: 3)
    
    // параметры настройки текста версии SDK
    let versionCustomization = VersionLabelCustomization(
       textFont: .systemFont(ofSize: 13, weight: .regular),
       textColor: .gray
    )
    
    // параметры настройки фона за рамкой
    let backgroundCustomization = BackgroundCustomization(
       backgroundColor: .lightGray
    )
    
    // параметры настройки защиты от мошенников
    let antiscamCustomization: AntiscamCustomization = AntiscamCustomization(
       customizationEnableAntiscam: false,
       customizationAntiscamTextMessage: "Face recognition",
       customizationAntiscamTextFont: UIFont.systemFont(ofSize: 15, weight: .semibold),
       customizationAntiscamTextColor: UIColor.black,
       customizationAntiscamBackgroundColor: UIColor.init(hexRGBA: "F2F2F7FF")!,
       customizationAntiscamCornerRadius: 18,
       customizationAntiscamFlashColor: UIColor.init(hexRGBA: "FF453AFF")!)
    
    // параметры настройки логотипа,
    // если лицензия предусматривает возможность его изменения
    let logoCustomization = LogoCustomization(
       image: UIImage(), 
       size: CGSize(width: 100, height: 100), 
       verticalPosition: 100, 
       horizontalPosition: 50)
    
    OZSDK.customization = Customization(toolbarCustomization: toolbarCustomization,
       antiscamCustomization: antiscamCustomization,
       centerHintCustomization: centerHintCustomization,
       hintAnimationCustomization: hintAnimationCustomization,
       faceFrameCustomization: faceFrameCustomization,
       versionCustomization: vesrionCustomization,
       backgroundCustomization: backgroundCustomization,
       logoCustomization: logoCustomization)
    OzLiveness.open({
      // ...
      style: {
    	  //блок для обратной совместимости
        doc_color: "", 
        face_color_success: "",
        face_color_fail: "", 
    	//основной блок
        faceFrame: {
          faceReady: "",
          faceNotReady: "",
        },
        centerHint: {
          textSize: "",
          color: "",
          yPosition: "",
          letterSpacing: "", 
          fontStyle: "", 
        },
        closeButton: {
          image: "",
        },
        backgroundOutsideFrame: {
          color: "", 
        },
      },
      // ...
    });
    pod 'OZLivenessSDK', :git => 'https://gitlab.com/oz-forensics/oz-liveness-ios', :tag => 'VERSION'
    // для установки последней версии
    pod ‘OZLivenessSDK’
    // ИЛИ для установки конкретной версии
    // pod ‘OZLivenessSDK’, ‘8.10.0’
    pod 'OZLivenessSDK/Core', :git => 'https://gitlab.com/oz-forensics/oz-liveness-ios.git',  :tag => 'VERSION'
    pod ‘OZLivenessSDK/Core’
    // ИЛИ
    // pod ‘OZLivenessSDK/Core’, ‘8.1.0’
    OZSDK(licenseSources: [.licenseFileName(“forensics.license”)]) { licenseData, error in
          if let error = error {
            print(error)
          }
        }
    OZSDK(licenseSources: [.licenseFilePath(“path_to_file”)]) { licenseData, error in
          if let error = error {
            print(error)
          }
        }
    {
      "state": "finished"
    }
    {
     "state": "finished",
     "analyses": {
       "quality": {
         "state": "finished",
         "resolution": "success"
       }
     }
    }
    {
     "state": "finished",
     "folder_id": "your_folder_id",
     "analyses": {
       "quality": {
         "state": "finished",
         "resolution": "success"
       }
     }
    }
    LicenseSource.LicenseAssetId должен содержать путь к файлу forensics.license, расположенному в проекте в папке res/raw.
  • LicenseSource.LicenseFilePath должен содержать пусть к файлу на устройстве (вне проекта).

  • OzLivenessSDK.init(context,
        listOf(
            LicenseSource.LicenseAssetId(R.raw.your_license_name),
    
    OzLivenessSDK.INSTANCE.getConfig().setBaseURL(BASE_URL);
    

    Если при обработке лицензии возникнут ошибки, вы получите сообщение с описанием этих ошибок. Если ошибок нет, система выведет данные о лицензии. Вы также можете запросить эти данные с помощью метода getLicensePayload.

    hashtag
    Возможные ошибки лицензии

    Сообщение об ошибке
    Что делать

    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, как показано выше в этой статье

    здесьarrow-up-right
    emailenvelope
    .
  • Подключите SDK к API. Это необязательный шаг, он выполняется, только если вам нужно обрабатывать какие-либо данные на сервере.

  • Для съемки видео используйте методы, описанные здесь – вы получите медиафайлы, которые потом можно будет отправить на анализ.

  • Запустите нужные вам проверки для полученных на предыдущем шаге медиафайлов. Здесь описано, как выполнять проверки.

  • Если вы хотите настроить внешний вид SDK, здесь написано, как это делается.

  • hashtag
    Ресурсы

    Рекомендуемая версия 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:

    Актуальную сборку демо-приложения Вы можете загрузить по ссылкеarrow-up-right.

    здесь
    сайтеarrow-up-right
    электронной почтеenvelope
    здесь
    Методы и поля Android SDKchevron-right
    .
  • Подключите SDK к API. Это необязательный шаг, он выполняется, только если вам нужно обрабатывать какие-либо данные на сервере. Если вы используете режим анализа на устройстве, никакие данные никуда не передаются, и подключение к API не нужно.

  • Создайте контроллер для съемки, как описано здесь – вы получите медиафайлы, которые потом можно будет отправить на анализ.

  • Запустите нужные вам проверки для полученных на предыдущем шаге медиафайлов. Здесь описано, как выполнять проверки.

  • Если вы хотите настроить внешний вид SDK, здесь написано, как это делается.

  • hashtag
    Ресурсы

    Минимальная версия iOS: 11.

    Минимальная версия Xcode: 16.

    Доступные языки: EN, RU, ES, HY, KK, KY, TR.

    Исходный код примера приложения с использованием Oz Liveness SDK расположен в репозитории GitLab:

    Список методов и полей SDK:

    Актуальную сборку демо-приложения Вы можете загрузить по ссылкеarrow-up-right.

    здесь
    сайтеarrow-up-right
    электронной почтеenvelope
    здесь
    Методы и поля iOS SDKchevron-right
    hashtag
    1. Распакуйте архив

    hashtag
    2. Установите службу лицензирования

    На этом серверная установка окончена. Дальнейшая настройка и активация производится через Web-интерфейс на порту 8090.

    hashtag
    3. Активируйте лицензию

    Откройте в браузере страницу по адресу http://server:8090 и авторизуйтесь.

    авторизация

    Зайдите в раздел Settings.

    hashtag
    Онлайн-активация

    Наиболее простой способ активировать сервер лицензирования – выполнить это онлайн.

    Для этого достаточно ввести ключ и нажать ACTIVATE.

    hashtag
    Офлайн-активация

    При отсутствии интернета на сервере лицензирования вы можете выполнить активацию офлайн-способом.

    Для этого нажмите SWITCH TO OFFLINE ACTIVATION.

    Введите ключ и нажмите NEXT.

    Затем нажмите DOWNLOAD REQUEST FILE.

    Передайте намenvelope файл offline_activation_request.txt . Мы в ответ направим вам код активации.

    Введите этот код в окно для offline activation response и нажмите ACTIVATE.

    Свяжитесь с намиenvelope

    Как добавить съемку документа и возможность сопоставления лиц в ваше веб- или мобильное приложение

    Пожалуйста, обратите внимание: в мобильных SDK Oz отсутствует интерфейс для съемки документов. Для этого вам потребуется ПО стороннего производителя или ваше собственное. В Web SDK возможность съемки документа есть.

    Ниже описаны шаги, которые потребуется пройти для добавления сравнения лиц к Liveness-проверке.

    К этому моменту вы, скорее всего, уже разобрались с тем, как снимать видео и проводить Liveness-проверки. Если нет, пожалуйста, ознакомьтесь со статьями:

    • Интеграция Oz Liveness Web SDK

    hashtag
    Добавление съемки документа в Web SDK

    Добавьте photo_id_front в список действий для плагина.

    hashtag
    Добавление сравнения лиц в Android SDK

    Внимание: в данном случае мы предполагаем, что фотография (например, документа) хранится на устройстве под названием reference.jpg.

    Измените код, запускающий анализ:

    Для анализа на устройстве вместо Analysis.Mode.SERVER_BASED укажите Analysis.Mode.ON_DEVICE.

    Код образца для Android находится .

    hashtag
    Добавление сравнения лиц в iOS SDK

    Внимание: в данном случае мы предполагаем, что фотография (например, документа) хранится на устройстве под названием reference.jpg.

    Измените код, запускающий анализ:

    Для анализа на устройстве вместо .serverBased укажите .onDevice.

    Код образца для iOS находится .

    hashtag
    Для всех SDK

    Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь или API-запросами.

    Методы как API, так и SDK могут гибко комбинироваться. Подробнее об этом вы можете прочитать в .

    Правила назначения анализов

    Анализы могут быть назначены медиафайлам как вручную пользователем – например, через выбор сценария Liveness в приложении – так и автоматически, когда выбор не производится и пользователь запускает все возможные анализы для папки с медиафайлами.

    В последнем случае система автоматически определяет, какие именно анализы должны запускаться для того или иного медиафайла. При этом она исходит из того, какие тегиarrow-up-right указаны при загрузке файлов. Если файлы загружаются через web-консоль, теги расставляет пользователь, если ведется съемка через SDK – теги проставляются в процессе съемки также автоматически. Также роль играет тип медиафайлов: IMAGE (фото)/VIDEO/SHOTS_SET (приравнивается к видео). Если медиафайл не подходит под требования того или иного анализа, этот анализ такой медиафайл игнорирует.

    Список настроек по умолчанию приведен ниже. Для изменения конфигурации, пожалуйста, напишите намenvelope.

    hashtag

    Анализ выполняется для всех медиафайлов вне зависимости от воспроизводимого в них (теги жестов начинаются с video_selfie).

    Внимание: в версии API 4.0.8 и ниже, чтобы отправить на анализ Quality (Liveness) изображение, а не видео, необходимо поместить его в архив .zip, установить тип файла SHOTS_SET и поставить один из тегов video_, иначе Quality изображение проигнорирует.

    hashtag

    Анализ выполняется для всех фото и видео.

    Если в папке будет менее двух подходящих медиафайлов, система вернет ошибку. Если более двух, то будут сравниваться все возможные пары, и система выдаст результат по паре с наименьшим сходством.

    hashtag

    Анализ выполняется только при наличии заранее созданного списка-коллекции для всех присутствующих в папке / указанных в качестве источника фото и видео.

    hashtag

    Это дополнительная опция к анализу Quality. Анализ выполняется для всех медиафайлов, подходящих для анализа Quality. Соответствующую настройку можно отключить.

    hashtag
    Documents

    Сверка лица с документами (анализ “Documents”) выполняется для медиафайлов с тегами photo_id_front, photo_id_back (документы) и photo_selfie (селфи). Результат сверки будет положительным, если есть фото лица и хотя бы один валидный документ (с фотографией того же лица) из списка ниже:

    • паспорт

    • водительские права

    • заграничный паспорт

    hashtag
    Связанные с тегами ошибки

    Подключение к API

    Для авторизации в Oz API используйте адрес API и токен доступа, как показано ниже.

    OzLivenessSDK.setApiConnection(OzConnection.fromServiceToken(host, token))
    OzLivenessSDK.INSTANCE.setApiConnection(
            OzConnection.Companion
    
    circle-exclamation

    Мы рекомендуем:

    • Указывать адрес API в вашем приложении на экране, предшествующем проверке Liveness. После установки адреса происходит служебный вызов API, и если вы устанавливаете адрес при запуске или инициализации приложения, нагрузка на сервер может быть слишком высокой.

    • Убедиться, что перед вызовом метода createStartIntent вы инициализировали SDK и подключили его к API. Порядок действий значения не имеет, но они должны успешно завершиться к моменту начала работы createStartIntent.

    Второй вариант: логин и пароль.

    Мы рекомендуем использовать метод аутентификации по токену доступа, как более безопасный.

    По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для :

    Очистка авторизации:

    Проверка наличия сохраненного access-токена Oz API:

    LogOut:

    Instant API: режим работы без сохранения данных

    В версии 6.0.1 мы добавили новый режим работы API – Instant. В этом режиме мы не сохраняем никакие данные, все, что вы отправляете и получаете, существует только в рамках вашего запроса и ответа на него. Таким образом вы экономите место в хранилище и, что может быть особенно важно в рамках соблюдения требований законодательства, не передаете и не храните чувствительные данные.

    Чтобы включить режим Instant API, при подготовке файла конфигурации (config.py) для API установите параметру OZ_APP_COMPONENTS значение stateless. Чтобы никакие данные запроса и ответа не сохранялись, отправьте следующий запрос: POST /api/instant/folders/ . Авторизация настраивается на вашей стороне.

    circle-info

    Обратите внимание: поскольку Instant API не хранит данные, работа в таком режиме с черным списком (1:N) не предусмотрена.

    При использовании Instant API с Web SDK при установите параметру architecture значение lite. Версия Web SDK должна быть не ниже 1.7.14.

    hashtag
    Минимальные системные требования

    • CPU: 16 ядер, 32 потока, базовая частота – 2.3 GHz, максимальная частота в турборежиме для одного ядра – 4 GHz.

    • RAM: 32 GB, DDR 5, Dual Channel.

    Для расчета RPS и RPM и подбора оптимальной конфигурации под ваши задачи обратитесь к нам.

    hashtag
    Параметры конфигурации

    Перед запуском подготовьте файл конфигурации со следующими параметрами.

    hashtag
    Обязательные параметры

    Без этих параметров Instant API не запустится.

    hashtag
    Установка

    hashtag
    Docker

    hashtag
    Docker Compose

    hashtag
    Методы Instant API

    Список методов доступен по . Также вы можете скачать коллекцию для Postman:

    Теги медиафайлов

    Каждый загружаемый медиафайл требуется маркировать специальными тегами. Это необходимо для корректной работы алгоритмов распознавания. Теги для видео и фото отличаются друг от друга.

    hashtag
    Теги видеофайлов

    Для видеофайлов в Системе должны быть указаны следующие типы тегов:

    • Тег, определяющий тип данных «видео»:

      • video_selfie

    • Тег, определяющий ориентацию видео:

      • orientation_portrait – портретная ориентация;

      • orientation_landscape – ландшафтная ориентация.

    • Тег, определяющий действие на видео:

      • video_selfie_left – поворот головы налево;

      • video_selfie_right – поворот головы направо;

    Алгоритмы распознают файлы с тегами из этого списка как подходящие для выполнения анализов (Liveness) и .

    Важно: в версии API 4.0.8 или старше, чтобы отправить на анализ Quality (Liveness) изображение, а не видео, необходимо поместить его в архив .zip, установить тип файла SHOTS_SET и поставить один из тегов video_, иначе Quality изображение проигнорирует.

    Пример корректного набора тегов видеофайла с действием «моргание»:

    hashtag
    Теги фотофайлов

    Для фотофайлов в Системе должны быть указаны следующие типы тегов:

    • Тег для селфи:

      • photo_selfie – тег, определяющий тип фотографии «селфи»

    • Теги для фотографий или сканов удостоверений личности:

    Важно: в версии API 4.0.8 или старше, чтобы отправить на анализ Quality (Liveness) изображение, а не видео, необходимо поместить его в архив .zip, установить тип файла SHOTS_SET и поставить один из тегов video_, иначе Quality изображение проигнорирует.

    Пример корректного набора тегов фотофайла «селфи»:

    Пример корректного набора тегов фотофайла с лицевой стороной документа:

    Пример корректного набора тегов фотофайла с обратной стороной документа:

    Мастер-лицензия для iOS

    Мастер-лицензия – это оффлайн-лицензия, с которой можно использовать мобильные SDK без ограничений по bundle_id, в отличие от обычных лицензий. Для получения мастер-лицензии нужно создать пару ключей, как описано ниже. Отправьте нам публичный ключ по электронной почте, и вскоре после этого мы отправим вам мастер-лицензию. Вашему приложению нужно будет подписать свой bundle_id приватным ключом. Мобильные SDK проверяют подпись с помощью публичного ключа из мастер-лицензии. Действие таких лицензий ограничено по времени.

    hashtag
    Генерация ключей

    В этом разделе описано, как создавать приватный и публичный ключи.

    hashtag
    Создание приватного ключа

    Чтобы создать приватный ключ, последовательно запустите следующие команды:

    Вы получите два файла:

    • privateKey.der – приватный ключ .der;

    • privateKey.txt – privateKey.der в кодировке base64. Содержимое этого файла используется в качестве подписи bundle_id хостового приложения.

    Спецификация команд OpenSSL:

    hashtag
    Создание публичного ключа

    Чтобы создать публичный ключ, последовательно запустите следующие команды:

    Вы получите публичный ключ publicKey.pub. Отправьте его нам по электронной почте. В ответ мы пришлем вам лицензию.

    hashtag
    Интеграция SDK

    Инициализация SDK:

    Установка лицензии:

    Перед инициализацией SDK создайте закодированную base64 подпись для bundle_id хостового приложения с помощью приватного ключа.

    Пример создания подписи:

    chevron-rightПример подписи для com.ozforensics.liveness.demohashtag

    NcdfzExUuQcdSxdY3MUVp4rUGnJTfeTGh/EN0hqiDUSadxf9jhaYe3EHmBPb+DafWrpvP6h6ZON3fHZcqqlykpWtVlPNr7ZpchPJXgHSdIOetKjPxYWh8xrt0NUSzm9Mymv1vz7UUdLiPFXDbanAedkg4YOX8uVJjfP8gb+suLdeTE3CHm+fdK5IVMP1SMu0XsBiiWBtVZp15l6tz7fDv+frr5kCr8I/LAHo6pCHBtzsXUiYw6ylrU/PHI1QYuyKK96iTxBt3gU+/MrfHl2DHLief3Fs10m3doJmTPizwWi/8h6fvq+6ZZlV/q4S2uPE3gpQZrZe2u3FuSE8gEgVoA==

    Передайте подпись как параметр masterLicenseSignature во время инициализации SDK или установки лицензии.

    Если подпись невалидна, инициализация продолжится по стандартной схеме: проверка включенных в лицензию bundle_id.

    Типы анализов и что они проверяют

    Виды и назначение биометрических анализов медиаданных в Oz Api, как интерпретировать результат.

    В Oz Api существует несколько видов анализов:

    • ,

    • ,

    Мастер-лицензия для Android

    Мастер-лицензия – это оффлайн-лицензия, с которой можно использовать мобильные SDK без ограничений по bundle_id, в отличие от обычных лицензий. Для получения мастер-лицензии нужно создать пару ключей, как описано ниже. Отправьте нам публичный ключ по электронной почте, и вскоре после этого мы отправим вам мастер-лицензию. Вашему приложению нужно будет подписать свой bundle_id приватным ключом. Мобильные SDK проверяют подпись с помощью публичного ключа из мастер-лицензии. Действие таких лицензий ограничено по времени.

    hashtag
    Генерация ключей

    Метаданные

    hashtag
    Обзор

    При создании какого-либо у вас может возникнуть необходимость хранить для него дополнительные данные, те, которые отсутствуют в базовом списке его параметров. Такие данные называются метаданными. Вы можете хранить любую нужную вам информацию в разделе meta_data в приведенном ниже формате ("название поля": "соответствующие полю данные"):

    Локализация: добавление собственного языкового пакета

    Для добавления нового языкового пакета или модификации существующего следует воспользоваться методом add_lang(lang_id, lang_obj).

    Параметры:

    • lang_id – строковое значение, которое далее можно использовать в качестве параметра lang метода open();

    Oz Liveness Web SDK

    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.

    Выполнение проверок

    Если наш SDK используется только для съемки, пропустите этот шаг.

    Чтобы выполнить проверку, нужно загрузить в систему медиафайлы, а затем запустить для них анализы.

    circle-info

    Как интерпретировать результаты анализов, описано здесь: .

    Пример работы:

    Oz Forensics API ReferenceOZ-Forensic 6.0.0chevron-right
    mkdir /opt/oz
    cd /opt/oz
    tar xzf oz-lic.tar.gz
    ./LexFloatServer -p product.dat -c config.yml -i --service-name ozlic
    LicenseSource.LicenseFilePath("абсолютный путь к файлу лицензии")
    ),
    object : StatusListener<LicensePayload> {
    override fun onSuccess(result: LicensePayload) { /*проверка информации о лицензии*/ }
    override fun onError(error: OzException) { /*обработка исключения */ }
    }
    )
    OzLivenessSDK.INSTANCE.init(context,
    Arrays.asList(
    new LicenseSource.LicenseAssetId(R.raw.forensics),
    new LicenseSource.LicenseFilePath("aбсолютный путь к файлу лицензии")
    ),
    new StatusListener<LicensePayload>() {
    @Override public void onStatusChanged(@Nullable String s) {}
    @Override public void onSuccess(LicensePayload licensePayload) { /*проверка информации о лицензии*/ }
    @Override public void onError(@NonNull OzException e) { /*обработка исключения */ }
    }
    );

    Invalid/missed tag values to process blacklist check

    Установленные для медиафайлов теги не могут быть обработаны алгоритмами Blacklist. Возможно, медиафайлам не установлены теги.

    Код ошибки

    Сообщение

    Описание

    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_*).

    Quality (Liveness)arrow-up-right
    жестаarrow-up-right
    Biometryarrow-up-right
    Collection
    Best Shotarrow-up-right

    5

    Logo
    Интеграция Oz Liveness Mobile SDKarrow-up-right
    здесьarrow-up-right
    здесьarrow-up-right
    веб-консолью
    руководстве разработчика
    конфигурации адаптера
    ссылкеarrow-up-right
    file-download
    10KB
    OZ-Forensic Instant 6.0.0.postman_collection.json
    arrow-up-right-from-squareOpen

    video_selfie_down – наклон головы вниз;

  • video_selfie_high – наклон головы вверх;

  • video_selfie_smile – улыбка;

  • video_selfie_eyes – моргание;

  • video_selfie_scan – сканирование;

  • video_selfie_oneshot – анализ по одному кадру;

  • video_selfie_blank – нет действия.

  • photo_id – тег, определяющий тип фотографии «документы»;

  • photo_id_front – фото лицевой стороны документа;

  • photo_id_back – фото обратной стороны документа (любые другие анализы, кроме Документов, файлы с этим тегом игнорируют).

  • Quality
    Biometry
    https://www.openssl.org/docs/man1.1.1/man1/openssl-pkcs8.htmlarrow-up-right
    В этом разделе описано, как создавать приватный и публичный ключи.

    hashtag
    Создание приватного ключа

    Чтобы создать приватный ключ, последовательно запустите следующие команды:

    Вы получите два файла:

    • privateKey.der – приватный ключ .der;

    • privateKey.txt – privateKey.der в кодировке base64. Содержимое этого файла используется в качестве подписи bundle_id хостового приложения.

    Спецификация команд OpenSSL: https://www.openssl.org/docs/man1.1.1/man1/openssl-pkcs8.htmlarrow-up-right

    hashtag
    Создание публичного ключа

    Чтобы создать публичный ключ, запустите команду:

    Вы получите публичный ключ publicKey.pub. Отправьте его нам по электронной почте. В ответ мы пришлем вам лицензию.

    hashtag
    Интеграция SDK

    Инициализация SDK:

    circle-info

    Для Android 6.0 (API 23) и старше:

    1. Добавьте зависимость implementation 'com.madgag.spongycastle:prov:1.58.0.0';

    2. Перед созданием подписи вызовите Security.insertProviderAt(org.spongycastle.jce.provider.BouncyCastleProvider(), 1)

    Перед инициализацией SDK создайте закодированную base64 подпись для bundle_id хостового приложения с помощью приватного ключа.

    Пример создания подписи:

    chevron-rightПример подписи для com.ozforensics.liveness.demohashtag

    Внимание: данная подпись не соответствует паре ключей, приведенной выше.

    Передайте подпись как параметр masterLicenseSignature во время инициализации SDK.

    Если подпись невалидна, инициализация продолжится по стандартной схеме: проверка включенных в лицензию bundle_id.

    hashtag
    Объекты и методы

    Метаданные можно добавить к большинству объектов системы. Список объектов с соответствующими им методами для добавления метаданных приведен ниже. Также метаданные можно указать при создании объекта.

    Объект

    Метод 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

    Метаданные можно также и менять, и удалять. Все нужные методы описаны в нашей документации по API.arrow-up-right

    hashtag
    Примеры использования

    Метаданные могут вам потребоваться, например, если вы захотите группировать папки (заявки) по людям или лидам. Например, для подсчета конверсии в случаях, когда один лид делает несколько попыток пройти анализ Liveness, добавьте идентификатор этого лида в метаданные соответствующих папок.

    Чтобы добавить идентификатор клиента iin к объекту папки, в тело запроса внесите соответствующую запись:

    circle-info

    Вы можете передать в это поле идентификатор клиента и затем использовать его для получения запросов по одному и тому же клиенту или подсчета уникальных клиентов (одинаковый идентификатор = один и тот же клиент, разные идентификаторы = разные клиенты). Идентификатор может быть номером телефона, документа или любым другим уникальным идентификатором. Идентификатор будет отображаться в отчете отдельной колонкой.

    Еще один частый случай использования метаданных связан с безопасностью: вы обрабатываете результат анализа на своем бэкенде, но не хотите при этом использовать идентификатор папки при обращении к ней. Добавьте отдельный идентификатор (transaction_id) в метаданные папки, и вы сможете искать нужную информацию по нему. Подробно этот случай использования описан здесь.

    Если вы храните в метаданных персональные данные, убедитесь, что при этом не нарушаются соответствующие законы.

    Метаданные можно также добавить через SDK, а затем работать с ними с помощью методов API. Добавление метаданных через SDK описано в соответствующих разделах:

    • iOS

    • Android

    • Web

    объекта системы

    lang_obj– объект, ключами которого являются идентификаторы строк перевода, а значениями – сами строки перевода.

    Список идентификаторов языков:

    lang_id
    Язык

    en

    Английский

    ru

    Русский

    es

    Испанский

    pt-br

    Португальский (бразильский)

    kz, kk

    Казахский

    Пример использования:

    OzLiveness.add_lang('ru', ruTranslation), гдеruTranslation – объект JSON.

    Для установки нужного языка укажите его идентификатор в lang:

    Вы можете запросить, какие языковые пакеты установлены в Web SDK, с помощью метода ozLiveness.get_langs(). Добавленные вручную локали также отобразятся.

    Список всех строковых идентификаторов:

    Ключи вида oz_action_*_go относятся к соответствующим жестам. oz_tutorial_camera_* – к подсказкам, как включить камеру для различных браузеров. Остальные – к подсказкам для всех жестов, информационным сообщениям или ошибкам.

    Если какие-либо из ключей в вашем языковом пакете отсутствуют, соответствующие строки будут отображаться на английском языке.

    chevron-rightДля версий до 1.5.0hashtag

    Если какие-либо из ключей в вашем языковом пакете отсутствуют, соответствующие строки отображаться не будут.

    file-archive
    30KB
    Web SDK Strings 1.6.0. RU.zip
    archive
    arrow-up-right-from-squareOpen
    OzLiveness.open({
      lang: 'en',
      action: [
        'photo_id_front', 
        'video_selfie_blank'
      ],
      ...
    });
    private fun analyzeMedia(mediaList: List<OzAbstractMedia>) {
    
        val refFile = File(context.filesDir, "reference.jpg")
        val refMedia = OzAbstractMedia.OzDocumentPhoto(
            OzMediaTag.PhotoIdFront , // OzMediaTag.PhotoSelfie для не являющегося документом фото
            refFile.absolutePath
        )
    
        AnalysisRequest.Builder()
            .addAnalysis(Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaList))
            .addAnalysis(Analysis(Analysis.Type.BIOMETRY, Analysis.Mode.SERVER_BASED, mediaList + refMedia))
            .build()
            .run(object : AnalysisRequest.AnalysisListener {
                override fun onSuccess(result: List<OzAnalysisResult>) {
                    result.forEach { 
                        println(it.resolution.name)
                        println(it.folderId)
                    }
                }
                override fun onError(error: OzException) {
                    error.printStackTrace()
                }
            })
    } 
    private void analyzeMedia(List<OzAbstractMedia> mediaList) {
        File refFile = new File(context.getFilesDir(), "reference.jpg");
        OzAbstractMedia refMedia = new OzAbstractMedia.OzDocumentPhoto(
                OzMediaTag.PhotoIdFront , // OzMediaTag.PhotoSelfie for a non-ID photo
                refFile.getAbsolutePath()
        );
        ArrayList<OzAbstractMedia> mediaWithReferencePhoto = new ArrayList<>(mediaList);
        mediaWithReferencePhoto.add(refMedia);
        new AnalysisRequest.Builder()
                .addAnalysis(new Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaList, Collections.emptyMap()))
                .addAnalysis(new Analysis(Analysis.Type.BIOMETRY, Analysis.Mode.SERVER_BASED, mediaWithReferencePhoto, Collections.emptyMap()))
                .build()
                .run(new AnalysisRequest.AnalysisListener() {
                    @Override public void onStatusChange(@NonNull AnalysisRequest.AnalysisStatus analysisStatus) {}
                    @Override
                    public void onSuccess(@NonNull List<OzAnalysisResult> list) {
                        String folderId = list.get(0).getFolderId();
                    }
                    @Override
                    public void onError(@NonNull OzException e) { e.printStackTrace(); }
        });
    }
    let imageURL = URL(fileURLWithPath: NSTemporaryDirectory())
        .appendingPathComponent("reference.jpg")
    
    let refMedia = OZMedia.init(movement: .selfie,
                       mediaType: .movement,
                       metaData: nil,
                       videoURL: nil,
                       bestShotURL: imageUrl,
                       preferredMediaURL: nil,
                       timestamp: Date())
       
    var mediaBiometry = [OZMedia]()
    mediaBiometry.append(refMedia)
    mediaBiometry.append(contentsOf: mediaToAnalyze)
    let analysisRequest = AnalysisRequestBuilder()
    let analysisBiometry = Analysis.init(media: mediaBiometry, type: .biometry, mode: .serverBased)
    let analysisQuality = Analysis.init(media: mediaToAnalyze, type: .quality, mode: .serverBased)
    analysisRequest.addAnalysis(analysisBiometry)
    analysisRequest.addAnalysis(analysisQuality)
    analysisRequest.uploadMedia(mediaBiometry)
    analysisRequest.run(
        scenarioStateHandler: { state in }, // обработчик шагов сценария
        uploadProgressHandler: { (progress) in } // обработчик для загрузки файлов
    ) { (analysisResults : [OzAnalysisResult], error) in
        // получение и обработка анализов
        for result in analysisResults {
            print(result.resolution)
            print(result.folderID)
        }
    }
    # список компонентов Oz API. Для Instant API укажите stateless
    # для компонента авторизации добавьте auth
    OZ_APP_COMPONENTS=stateless
    # поддержка локального хранилища
    OZ_LOCAL_STORAGE_SUPPORT_ENABLE=false
    # адрес сервиса tfss
    OZ_SERVICE_TFSS_HOST=http://xxx.xxx.xxx.xxx:xxxx
    # разрешенные хосты
    APP_ALLOWED_HOSTS=example-host1.com,example-host2.com
    # секретный ключ
    OZ_API_SECRET_KEY=long_secret_key
    CONTAINER_NAME=<container name> \
    DEPLOY_INSTANT_PORT_EXT=<external port> \
    INSTANT_IMAGE=<provided image name> \
    ADDITIONAL_PARAMS="-e LICENSE_KEY=<your license key>" \
    
    docker run -d --name $CONTAINER_NAME
          $ADDITIONAL_PARAMS
          -p ${DEPLOY_INSTANT_PORT_EXT}:8080
          $INSTANT_IMAGE
    services:
      oz-api-instant:
        image: <provided image>
        container_name: oz-api-instant
        environment:
            - LICENSE_KEY=<your license key>
            # - TF_ENABLE_ONEDNN_OPTS=1 # In some cases, especially for AMD CPUs, set to 0
            # - API_LISTEN_PORT=8080
            # - LOG_LEVEL=info # ['critical', 'error', 'warning', 'info', 'debug', 'trace']
        restart: always
        ports:
          - 8080:8080
      "video1": [
          "video_selfie",
          "video_selfie_eyes",
          "orientation_portrait"
        ]
      "photo1": [
          "photo_selfie"
      ]
    "photo1": [
        "photo_id", "photo_id_front"
    ]
    "photo1": [
        "photo_id", "photo_id_back"
    ]
    openssl genpkey -algorithm RSA -outform DER -out privateKey.der -pkeyopt rsa_keygen_bits:2048
    # for MacOS
    base64 -i privateKey.der -o privateKey.txt
    # for Linux 
    base64 -w 0 privateKey.der > privateKey.txt
    openssl rsa -pubout -in privateKey.pem -out publicKey.pub
    base64 -w 0 publicKey.pub > publicKey.txt
    OZSDK(licenseSources: [LicenseSource], masterLicenseSignature: String? = nil, completion: @escaping ((LicenseData?, LicenseError?) -> Void))
    setLicense(licenseSource: LicenseSource, masterLicenseSignature: String? = nil)
    private func getSignature() -> String? {
        let privateKeyBase64String = "содержимое файла privateKey.txt"
     
        guard let data = Data(base64Encoded: privateKeyBase64String, options: [.ignoreUnknownCharacters]) else {
          return nil
        }
         
        let sizeInBits = data.count * 8
        let keyDict: [CFString: Any] = [
          kSecAttrKeyType: kSecAttrKeyTypeRSA,
          kSecAttrKeyClass: kSecAttrKeyClassPrivate,
          kSecAttrKeySizeInBits: NSNumber(value: sizeInBits)
        ]
         
        var error: Unmanaged<CFError>?
        guard let secKey = SecKeyCreateWithData(data as CFData, keyDict as CFDictionary, &error) else {
          return nil
        }
         
        guard let bundleID = Bundle.main.bundleIdentifier else {
          return nil
        }
        guard let signature = SecKeyCreateSignature(secKey,
                              .rsaSignatureMessagePKCS1v15SHA512,  // Это критично!!!!
                              Data(bundleID.utf8) as CFData,
                              &error) else {
          return nil
        }
        return (signature as Data).base64EncodedString()
      }
    KohJ1rsUgLMzZHpHGAZDK2efHPnMj9tw9VIedBLvyZt0B2JH3SWfJLJ8X6JNz3bR2sce6PR2wdEIFln0r1pUnD+6WBCgexKIHAv7esiRVQZoZOEANDBwDvJVv73H/0qL2LGlhxKzbBg5CxGPClTBQdLo1P+7HsTXHHG/Hf6m3rdu1OUeGXVPoaS2NzE8kiRH6gb8Nhr7PBLTUeMKTeLoiX13hvwjOqhV1ANhgS97T4hC2+ZilZt4RektgRY/+fGmWnOqErNeYuz/WSInfaJS0YEWhJW3gXKPjdCzNGIBIqbxaFSjU46wu/alh2+tBRFnrYFl1dRQVcTlW0VwwZHcug==
    openssl genpkey -algorithm RSA -outform DER -out privateKey.der -pkeyopt rsa_keygen_bits:2048
    # for MacOS
    base64 -i privateKey.der -o privateKey.txt
    # for Linux 
    base64 -w 0 privateKey.der > privateKey.txt
    openssl rsa -pubout -in privateKey.der -out publicKey.pub
    fun init(
        context: Context,
        licenseSources: List<LicenseSource>,
        masterLicenseSignature: String,
        statusListener: StatusListener<LicensePayload>? = null,
     )
    private fun getMasterSignature(): String {
        Security.insertProviderAt(org.spongycastle.jce.provider.BouncyCastleProvider(), 1)
    
        val privateKeyBase64String = "содержимое файла privateKey.txt"
    
        val sig = Signature.getInstance("SHA512WithRSA")
        val keySpec = PKCS8EncodedKeySpec(Base64.decode(privateKeyBase64String, Base64.DEFAULT))
        val keyFactory = KeyFactory.getInstance("RSA")
        sig.initSign(keyFactory.generatePrivate(keySpec))
        sig.update(packageName.toByteArray(Charsets.UTF_8))
        return Base64.encodeToString(sig.sign(), Base64.DEFAULT).replace("\n", "")
     }
    …
    meta_data:
    {
      "field1": "value1",
      "field2": "value2"
    }
    …
    {
      "iin": "123123123"
    }
    // Редактируем текст кнопки
    OzLiveness.add_lang('ru', {
      action_photo_button: 'Сделать фото'
    });
    OzLiveness.open({
        lang: 'es', // идентификатор нужного языка
        ...
    });
    .
    fromServiceToken
    (
    host
    ,
    token
    ),
    null
    );
    телеметрии
    OzLivenessSDK.setApiConnection(
        OzConnection.fromCredentials(host, username, password),
        statusListener(
            { token -> /* токен */ },
            { ex -> /* ошибка */ }
        )
    )
    OzLivenessSDK.INSTANCE.setApiConnection(
            OzConnection.Companion.fromCredentials(host, username, password),
            new StatusListener<String>() {
                @Override
                public void onStatusChanged(@Nullable String s) {}
                @Override
                public void onSuccess(String token) { /* токен */ }
                @Override
                public void onError(@NonNull OzException e) { /* ошибка */ 
            }
    );
    OzLivenessSDK.setEventsConnection(
        OzConnection.fromCredentials(
            "https://echo.cdn.ozforensics.com/",
            "<[email protected]>",
            "your_telemetry_password"
        )
    )
    OzLivenessSDK.setEventsConnection(
            OzConnection.fromCredentials(
                    "https://tm.ozforensics.com/",
                    "<[email protected]>",
                    "your_telemetry_password"
            )
    );
    documents,
  • collection.

  • circle-exclamation

    Возможные качественные результаты анализов описаны здесь: Статусы API.

    У каждого из анализов есть пороговое значение, определяющее статус анализа на выходе. По умолчанию этот порог равен 0.5 или 50%, для Collection и Biometry (Face Matching) – 0.85 или 85%.

    • Biometry: значение не ниже порога означает, что лица совпадают.

    • Collection: значение не ниже порога означает, что лицо с проанализированного медиафайла совпало с одним из лиц в черном списке.

    • Quality: значение не ниже порога означает наличие атаки.

    Чтобы настроить пороговое значение под ваши нужды, .

    Больше информации по интерпретации численных результатов анализов вы можете найти здесь: .

    hashtag
    Biometry

    hashtag
    Назначение

    Биометрический алгоритм позволяет сравнить несколько фото и оценить уровень схожести запечатленных на них людей. В качестве источников проверки можно передавать фото, видео и страницы документов с фото. Для корректной работы нужно как минимум 2 файла-источника (подробности смотрите на странице Правила назначения анализов).

    hashtag
    Результат

    Анализ выдает уровень схожести изображений лиц в процентах от 100 до 0% (1->0), где:

    • 100% (1) – максимальная схожесть,

    • 0% (0) – схожесть отсутствует.

    hashtag
    Quality (Liveness, Best Shot)

    hashtag
    Назначение

    Алгоритм определения живости Liveness (анализ Quality) предназначен для проверки наличия живого человека в коротком видеоролике или на фото.

    Алгоритм "лучший кадр" (best shot) выбирает из видеозаписи наиболее качественный и удачный кадр с лицом. Алгоритм вызывается дополнительно к анализу liveness.

    hashtag
    Результат

    Анализ выдает возможность спуфинга*/атаки в процентах, где:

    • 100% (1) – атака, перед камерой не живой человек,

    • 0% (0) – перед камерой реальный человек в сознании.

    *Спуфинг в биометрической области – (англ. spoofing – подмена) это ситуация, в которой человек маскируется под другого человека, используя программные и не программные средства (виртуальная камера, демонстрация изображения лица с экрана смартфона или фотографии, маски или силиконовой головы).

    hashtag
    Documents

    hashtag
    Назначение

    Анализ распознавания и проверки документов предназначен для базового определения наличия документа в кадре и проверки корректности полей документа согласно его типу. Параллельно проводится биометрический анализ (сверка фотографии из документа и селфи, сделанного человеком).

    circle-info

    В Oz Api интегрирован сервис OCR-анализа документов от партнера. Также возможно использование другого сервиса OCR по желанию клиента. Свяжитесь с отделом продажenvelope.

    hashtag
    Результат

    Анализ документов выдает два варианта результатов:

    • Документы успешно проверены,

    • Документы не прошли проверку.

    Также выводится набор полей документа с результатами распознавания по каждому полю и результат биометрического анализа.

    hashtag
    Collection

    hashtag
    Назначение

    Алгоритм проверки Collection предназначен для проверки присутствия человека в базе заранее загруженных фото.

    База заранее загруженных фото может называться как "черным списком", если туда внесены фотографии лиц мошенников или других нежелательных для бизнеса людей, так и "Белым списком", если она содержит фотографии лиц VIP-персон.

    hashtag
    Результат

    Анализ по коллекции фото выдает процент схожести от 100 до 0% (1->0), где:

    • 100% (1) – это максимальная схожесть, алгоритм нашел совпадения с изображениями из коллекции.

    • 0% (0) – минимальная схожесть, алгоритм не нашел совпадений с изображениями из коллекции.

    biometry
    quality (liveness, best shot)
    Образец кода для Angulararrow-up-right
  • Образец кода для Reactarrow-up-right

  • Web SDK только работает по протоколу HTTPS (с SSL-шифрованием); на localhost и 127.0.01 можно использовать HTTP для проверки доступности ресурсов.

    Oz Liveness Web SDK состоит из двух частей:

    1. Клиентская – Oz Liveness Web Plugin. Используется в виде подгружаемого JavaScript-файла в Frontend-приложении клиента.

    2. Серверная – Oz Liveness Web Adapter. Устанавливается в виде отдельного серверного модуля с привязкой к Oz API.

    Руководства по интеграции:

    Oz Web SDK можно развернуть как на ваших серверах, так и на наших (SaaS), в последнем случае разворачиваем и поддерживаем программное обеспечение мы, а вы пользуетесь уже готовым и настроенным продуктом. Свяжитесь с намиenvelope для выбора более удобного варианта.

    Для работы Web SDK потребуется информация о доменных именах сайтов, где вы будете его использовать (она необходима для оформления лицензии).

    Пошаговая инструкция по использованию Web SDK:

    1. Интегрируйте плагин в свою страницу.

    2. Если вы хотите настроить интерфейс Oz Web SDK под себя, здесь рассказано, как это сделать.

    здесьarrow-up-right
    Как интегрировать серверную проверку Liveness в ваше Web-приложениеchevron-right
    Как добавить съемку документа и возможность сопоставления лиц в ваше веб- или мобильное приложениеchevron-right
    analysisCancelable = new AnalysisRequest.Builder()
    //mediaToAnalyze – массив объектов OzAbstractMedia
    

    Для удаления медиафайлов после выполнения всех проверок используйте метод clearActionVideos.

    hashtag
    Добавление метаданных

    Для добавления метаданных используйте метод addFolderMeta.

    hashtag
    Извлечение лучшего кадра

    В структуре Analysis можно передать дополнительные параметры, например, для извлечения на сервере лучшего кадра.

    hashtag
    Использование медиафайла, снятого не нашим SDK

    Чтобы использовать медиафайлы, снятые не Oz Android SDK, укажите путь к ним в структуре OzAbstractMedia:

    hashtag
    Добавление медиафайлов в определенную папку

    Для добавления медиафайлов в определенную папку используйте метод setFolderId:

    Типы анализов
    analysisCancelable = AnalysisRequest.Builder()
    // mediaToAnalyze – массив объектов OzAbstractMedia
        .addAnalysis(Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaToAnalyze))// ON_DEVICE для анализа на устройстве
        .build()
    //запуск анализов и установка обработчиков
        .run(object : AnalysisRequest.AnalysisListener {
            override fun onStatusChange(status: AnalysisRequest.AnalysisStatus) { handleStatus(status) //или ваш обработчик шагов сценария 
            }
            override fun onSuccess(result: RequestResult) {
                handleResults(result) //или ваш обработчик результата
            }
            override fun onError(error: OzException) { handleError(error) //или ваш обработчик ошибок 
            }
        })

    Отправка на анализ единым запросом

    В версии 6.0.1 мы добавили возможность отправить все необходимые для анализа данные и получить результат с помощью единственного запроса. До этого взаимодействие с API требовало последовательной отправки нескольких запросов: на создание папки и загрузку медиафайлов, затем на назначение анализов (Liveness, биометрия, черный список), после этого – на получение результата (поллинг или вебхук). Если вам нужны отдельные запросы, вы можете работать таким образом и дальше, но теперь есть и упрощенный способ: все это можно сделать одним запросом, включающим в себя все вышеуказанное.

    hashtag
    Преимущества

    • Вся информация отправляется в одном запросе, снижая вероятность потери по пути части данных.

    • Синхронная работа – как только анализ завершится, вы получите результат, не нужно опрашивать сервер о готовности или настраивать вебхуки.

    • Высокая производительность – до 36 анализов в минуту на один сервер.

    hashtag
    Использование

    Чтобы отправить медиафайлы на анализ одним запросом, вызовите метод POST /api/folders/. В заголовке X-Forensic-Access-Token передайте ваш . Добавьте в тело запроса нужные медиафайлы, а в payload – соответствующие им теги и, если нужно, метаданные.

    hashtag
    Пример запроса

    hashtag
    Пример ответа

    В ответе вам придут результаты анализов.

    Готово.

    Съемка видео

    Для старта записи видео используется метод startActivityForResult:

    val intent = OzLivenessSDK.createStartIntent(listOf(OzAction.Smile, OzAction.Blank))
    startActivityForResult(intent, REQUEST_CODE)
    List<OzAction> actions  = Arrays.asList(
    

    actions – перечень действий пользователя при записи видео.

    Для представления Fragment код приведен ниже. LivenessFragment – Fragmentarrow-up-right для экрана Liveness.

    circle-exclamation

    Для корректной работы лицензии мы рекомендуем сначала инициализировать SDK, и только потом вызывать открытие экрана Liveness.

    Для получения результатов записи видео используется метод onActivityResult:

    • sdkMediaResult – объект с результатами записи видео () для дальнейшего использования при взаимодействии с Oz API.

    • sdkErrorString – описание в случае их возникновения.

    circle-info

    Если наш SDK используется только для съемки, пропустите шаг "Выполнение проверок".

    Если пользователь прервет запись видео (закроет экран), resultCode примет значение Activity.RESULT_CANCELED.

    Пример кода для обработки:

    Как интегрировать проверку Liveness на устройстве в ваше мобильное приложение

    circle-info

    Мы рекомендуем использовать режим анализа на сервере, поскольку он обеспечивает более точные результаты по сравнению с анализом на устройстве.

    Из этой статьи вы узнаете, как интегрировать Oz Liveness Mobile SDK в клиентское мобильное приложение: для съемки видео с лицом и дальнейшей его проверки на устройстве без отправки данных на сервер.

    Oz Liveness Mobile SDK – это:

    Статусы API

    В данном разделе описаны все возможные статусы анализов в API.

    Имя поля / статус
    analyse.state
    analyse.resolution_status
    folder.resolution_status
    system_resolution

    Ошибки вызова сервиса

    Полный список запросов вы можете найти в , в приведен порядок запросов в наиболее распространенных случаях. В данной статье перечислены коды ответов на запросы и ошибки при обработке запросов.

    hashtag
    Коды HTTP-ответов

    Работа с контейнером данных OzCapsula в Web SDK

    OzCapsula – это разработанный нами проприетарный формат, контейнер данных, обеспечивающий сквозную защиту и целостность информации в процессе передачи. Функциональность добавлена в версии 1.9.2. В режиме работы с контейнером данных SDK снимает видео на устройстве конечного пользователя, затем пакует медиафайлы вместе со всей нужной информацией в контейнер (application/octet-stream), после чего:

    • отправляет данные напрямую в Oz API (architecture: normal для полной версии API или lite для Instant API), или

    OzLivenessSDK.setApiConnection(null)
    OzLivenessSDK.INSTANCE.setApiConnection(null, null);
    val isLoggedIn = OzLivenessSDK.isLoggedIn
    boolean isLoggedIn = OzLivenessSDK.INSTANCE.isLoggedIn();
    OzLivenessSDK.logout()
    OzLivenessSDK.INSTANCE.logout();
        .addFolderMeta(
            mapOf(
                "key1" to "value1",
                "key2" to "value2"
            )
        )
    .addFolderMeta(Collections.singletonMap("key", "value")) 
    mapOf("extract_best_shot" to true)
           val file = File(context.filesDir, "media.mp4") // замените context.filesDir на context.getExternalFilesDir(null) для внешнего хранилища смартфона
           val media = OzAbsractMedia.OzVideo(OzMediaTag.VideoSelfieSmile, file.absolutePath)
        .setFolderId(folderId)
    }
    .addMedia(mediaToAnalyze)
    .addAnalysis(new Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaToAnalyze)) //ON_DEVICE для анализа на устройстве
    .build()
    //запуск анализов и установка обработчиков
    .run(new AnalysisRequest.AnalysisListener() {
    @Override
    public void onSuccess(@NonNull RequestResult list) { handleResults(list); } //или ваш обработчик результата
    @Override
    public void onError(@NonNull OzException e) { handleError(e); } //или ваш обработчик ошибок
    @Override
    public void onStatusChange(@NonNull AnalysisRequest.AnalysisStatus analysisStatus) { handleStatus(analysisStatus); } //или ваш обработчик шагов сценария
    });
    обратитесь к намenvelope
    Результаты анализов
    1. Работа на ваших серверах

    • Установите Web SDK. Вам помогут наши инженеры. Лицензия также будет установлена в этот момент. Когда вам потребуется ее обновить, воспользуйтесь этой статьей.

    • Настройте Web Adapter.

    1. SaaS

    • Ничего делать не нужно, установку и настройку серверной части обеспечивают инженеры Oz Forensics. Вы получите ссылку для интеграции (см. п. 2).

    начальное состояние

    начальное состояние

    анализы в процессе

    анализы в процессе

    FAILED

    ошибка системы

    ошибка системы

    ошибка системы

    ошибка системы

    FINISHED

    успешное завершение

    -

    успешное завершение

    DECLINED

    -

    отрицательный анализ

    -

    отрицательный анализ

    OPERATOR_REQUIRED

    -

    требуется перепроверка

    -

    требуется перепроверка

    SUCCESS

    -

    положительный анализ

    -

    положительный анализ

    Ниже приведены разъяснения по каждому статусу.

    hashtag
    Состояние анализа (analyse.state)

    Состояние выполнения анализа принимает следующие значения:

    PROCESSING – в обработке;

    FAILED – анализ выполнить не удалось, произошла ошибка;

    FINISHED – выполнение анализа завершено.

    hashtag
    Результат анализа (analyse.resolution_status)

    Если выполнение анализа завершено, результат выполнения может принимать следующие значения:

    SUCCESS– проверка пройдена успешно;

    OPERATOR_REQUIRED (кроме анализа Liveness) – требуется оператор (т.е. дополнительная проверка человеком);

    circle-info

    Наличие/отсутствие статуса OPERATOR_REQUIRED зависит от настроек биометрии.

    DECLINED – проверка не пройдена (лицо не совпало или совпало с лицом из ЧС в зависимости от настроек, атака, лицо не совпало с лицом в документах).

    Если анализ не завершен, результат наследует значение из analyse.state: PROCESSING (еще в обработке) / FAILED (возникли ошибки, завершить анализ не удалось).

    hashtag
    Состояние заявки (folder.resolution_status)

    Заявка – это папка, в которой лежат медиафайлы для анализа. Если анализы еще не завершены, в resolution_status вы увидите одно из следующих значений:

    INITIAL – анализы не назначены;

    PROCESSING – анализы выполняются;

    FAILED – выполнить анализы не удалось (произошли ошибки);

    FINISHED – папка обработана, выполнение анализов завершено.

    hashtag
    Результат заявки (system_resolution)

    Результат заявки – консолидированный результат всех анализов, назначенных для медиафайлов из этой папки. Обратите внимание: результат заявки представляет собой результат группы анализов, завершившейся последней. Если все назначенные анализы выполнены, результат будет:

    SUCCESS– все хорошо, проверки пройдены успешно;

    OPERATOR_REQUIRED (кроме анализа Liveness) – анализы со статусом DECLINED отсутствуют, но один или больше анализов завершились со статусом OPERATOR_REQUIRED;

    DECLINED – один или больше анализов завершились с результатом DECLINED, то есть проверка не прошла.

    circle-info

    Анализы, которые вы отправляете в одном POST-запросе, объединяются в группу. Результат группы анализов определяется по "худшему" из результатов анализов в этой группе: INITIAL > PROCESSING > FAILED > DECLINED > OPERATOR_REQUIRED > SUCCESS, где SUCCESS означает, что все проверки прошли успешно без каких-либо ошибок.

    INITIAL

    -

    -

    начальное состояние

    начальное состояние

    PROCESSING

    токен доступа

    отправляет данные на ваш бэкенд (architecture: capture).

    Также необходим новый токен: session_token.

    hashtag
    Конфигурация

    Ключевые параметры для использования контейнера

    Параметр

    Значение

    Описание

    use_wasm_container

    true

    Включает функциональность контейнера данныз

    architecture

    normal / lite/ capture

    Определяет, как будут отправляться данные в Oz API – через Web SDK или через ваш бэкенд

    api_use_session_token

    api / client

    Определяет, как будет получен session_token – через Web SDK или запросом в API через ваш бэкенд

    hashtag
    Session Token

    hashtag
    api_use_session_token: "client"

    При таких настройках session token получает ваш бэкенд перед открытием Web SDK.

    Шаги:

    1. Запросите session token у Oz API:

    1. В ответе придет краткосрочный session_token:

    1. Передайте токен в плагин Web SDK:

    circle-info

    Session token действителен в течение нескольких минут. Его необходимо запрашивать перед каждой съемкой видео.

    hashtag
    api_use_session_token: "api"

    При таких настройках SDK получает токен в Oz API автоматически, дополнительно ничего запрашивать или передавать не нужно.

    hashtag
    Описание процесса работы для разных архитектур

    Процесс работы с контейнером зависит от типа архитектуры, который вы используете.

    hashtag
    architecture: "normal"

    В режиме normal Web SDK отправляет сгенерированный контейнер данный в Oz API автоматически. Дополнительно ничего загружать не нужно.

    hashtag
    architecture: "lite"

    В режиме lite Web SDK отправляет сгенерированный контейнер данный в Oz API автоматически. Дополнительно ничего загружать не нужно.

    hashtag
    architecture: "capture"

    В режиме capture Web SDK только снимает видео и пакует все нужные данные в контейнер, но не отправляет их в Oz API. За передачу данных из Web SDK в Oz API отвечает ваш бэкенд.

    Процесс:

    1. Web SDK снимает видео и вызывает callback-функцию on_capture_complete(result, container). Второй аргумент этой функции (container) представляет собой Blob-объект (application/octet-stream).

    2. Вы отправляете этот объект на свой бэкенд.

    3. Ваш бэкенд отправляет этот объект в Oz API запросом HTTPS POST.

    Пример запроса:

    Ответ будет таким же, как и при процессе без использования контейнера.

    hashtag
    Возможные ошибки

    Ошибка

    Описание

    error_wasm_internal_failure_1

    Устройство или браузер не поддерживает WASM

    error_wasm_internal_failure_2

    На устройстве недостаточно памяти

    • error_wasm_internal_failure_3

    • error_wasm_internal_failure_4

    • error_wasm_internal_failure_5

    Контейнер создать не удалось. Попробуйте еще раз

    error_wasm_internal_failure_1000

    Любая другая ошибка не из списка выше

    {
      // (необязательно) метаданные папки, если нужны
      "folder:meta_data": {
        "partner_side_folder_id": "00000000-0000-0000-0000-000000000000",
        "person_info": {
          "first_name": "John",
          "middle_name": "Jameson",
          "last_name": "Doe"
        }
      },
      // (необязательно) метаданные папки, если нужны
      "media:meta_data": {
        "video1": {
          "foo": "bar"
        }
      },
      "media:tags": {
        "video1": [
          "video_selfie",
          "video_selfie_eyes",
          "orientation_portrait"
        ]
      },
      "analyses": [
        {
          "type": "quality",
          // (необязательно) метаданные папки, если нужны
          "meta_data": {
            "example1": "some_example1"
          },
          // дополнительные параметры
          "params": {
            "threshold_spoofing": 0.5,
            "extract_best_shot": false
          }
        }
      ]
    }
    {
      "company_id": "00000000-0000-0000-0000-000000000000",
      "time_created": 1744017549.366616,
      "folder_id": "00000000-0000-0000-0000-000000000000",
      "user_id": "00000000-0000-0000-0000-000000000000",
      "resolution_endpoint": null,
      "resolution_status": "FINISHED",
      "resolution_comment": "[]",
      "system_resolution": "SUCCESS",
      ...
      // метаданные папки, если есть
      "meta_data": {
        "partner_side_folder_id": "00000000-0000-0000-0000-000000000000",
        "person_info": {
          "first_name": "John",
          "middle_name": "Jameson",
          "last_name": "Doe"
        }
      },
      "media": [
        {
          "company_id": "00000000-0000-0000-0000-000000000000",
          "folder_id": "00000000-0000-0000-0000-000000000000",
          "folder_time_created": 1744017549.366616,
          "original_name": "00000000-0000-0000-0000-000000000000.mp4",
          "original_url": null,
          "media_id": "00000000-0000-0000-0000-000000000000",
          "media_type": "VIDEO_FOLDER",
          "tags": "video1": [
    		"video_selfie",
    		"video_selfie_eyes",
    		"orientation_portrait"
    	]
          "info": {},
          "time_created": 1744017549.368665,
          "time_updated": 1744017549.36867,
    	  // метаданные медиафайлов, если есть
          "meta_data": {
            "foo": "bar"
          },
          "thumb_url": null,
          "image_id": "00000000-0000-0000-0000-000000000000"
        }
      ],
      "time_updated": 1744017549.366629,
      "analyses": [
        {
          "company_id": "00000000-0000-0000-0000-000000000000",
          "group_id": "00000000-0000-0000-0000-000000000000",
          "folder_id": "00000000-0000-0000-0000-000000000000",
          "folder_time_created": 1744017549.366616,
          "analysis_id": "00000000-0000-0000-0000-000000000000",
          "state": "FINISHED",
          "resolution_operator": null,
          "results_media": [
            {
             ...
            }
          ],
          "results_data": null,
    	  // метаданные анализа, если есть
          "meta_data": {
            "example1": "some_example1"
          },
          "time_created": 1744017549.369485,
          "time_updated": 1744017550.659305,
          "error_code": null,
          "error_message": null,
          "source_media": [
            {
    	 ...
            }
          ],
          "type": "QUALITY",
          "analyse_id": "00000000-0000-0000-0000-000000000000",
          "resolution_status": "SUCCESS",
          "resolution": "SUCCESS"
        }
      ]
    }
    curl --location '{{host}}/api/authorize/session_token' \
      -H 'X-Forensic-Access-Token: <YOUR_TOKEN>'
    {
      "session_token": "eyJh..."
    }
    OzLiveness.open({
      session_token,
      // other open options
    });
    curl -X POST \
      '{{host}}/api/folders' \
      -H 'Content-Type: application/octet-stream' \
      -H 'X-Forensic-Access-Token: <YOUR_TOKEN>' \
      --data-binary '@/path/to/container.dat'
    OzAction
    .
    Smile
    ,
    OzAction
    .
    Scan
    );
    Intent intent = OzLivenessSDK.createStartIntent(actions);
    startActivityForResult(intent, REQUEST_CODE);
    OzAbstractMedia
    ошибок
    childFragmentManager.beginTransaction()
        .replace(R.id.content, LivenessFragment.create(actions))
        .commit()
    // подписка на результат Fragment
    childFragmentManager.setFragmentResultListener(OzLivenessSDK.Extra.REQUEST_CODE, this) { _, result ->
        when (result.getInt(OzLivenessSDK.Extra.EXTRA_RESULT_CODE)) {
            OzLivenessResultCode.SUCCESS -> { /* запуск анализа */ }
            else -> { /* вывод ошибки */ }  
        }
    }
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.content, LivenessFragment.Companion.create(actions, null, null, false))
            .addToBackStack(null)
            .commit();
    // подписка на результат Fragment
    getSupportFragmentManager().setFragmentResultListener(OzLivenessSDK.Extra.REQUEST_CODE, this, (requestKey, result)
                switch (result.getInt(OzLivenessSDK.Extra.EXTRA_RESULT_CODE)) {
                    case OzLivenessResultCode.SUCCESS: {/* запуск анализа */}
                    default: {/* вывод ошибки */}
                }
            });
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
      super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE) {
          sdkMediaResult = OzLivenessSDK.getResultFromIntent(data)
          sdkErrorString = OzLivenessSDK.getErrorFromIntent(data)
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
            List<OzAbstractMedia> sdkMediaResult = OzLivenessSDK.INSTANCE.getResultFromIntent(data);
            String sdkErrorString = OzLivenessSDK.INSTANCE.getErrorFromIntent(data);
        }
    Готовый интерфейс для съемки видео, который легко встроить в приложение клиента.
  • Высокое качество видео, которое обеспечивает точность проверки Liveness.

  • Для работы Oz Liveness Mobile SDK нужна лицензия, которая привязывается к bundle_id приложения, например com.yourcompany.yourapp. Тестовую лицензию на месяц вы можете оформить самостоятельно на нашем веб-сайтеarrow-up-right, если вам требуется лицензия на более длительный срок – свяжитесь с намиenvelope.

    hashtag
    Android

    hashtag
    1. Добавьте SDK в проект

    В build.gradle проекта добавьте строки:

    В build.gradle модуля добавьте строки

    hashtag
    2. Инициализируйте SDK

    Переименуйте файл лицензии в forensics.license и поместите его в папку res/raw в вашем проекте.

    hashtag
    3. Запустите съемку видео

    Для начала съемки используйте метод startActivityForResult:

    Для получения готового видео используйте метод onActivityResult:

    Готовые видео содержатся в объекте sdkMediaResult.

    hashtag
    4. Запустите анализы

    Для запуска анализов используйте код ниже. mediaList – массив объектов, полученных из sdkMediaResult или извне (если вы снимали видео без использования нашего SDK).

    hashtag
    iOS

    hashtag
    1. Добавьте SDK в проект

    Установите OZLivenessSDK через CocoaPodsarrow-up-right. Чтобы встроить SDK в проект Xcode, в Podfile добавьте:

    hashtag
    2. Инициализируйте SDK

    Переименуйте файл лицензии в forensics.license и поместите его в проект.

    hashtag
    3. Запустите съемку видео

    Создайте контроллер, который будет снимать видео:

    В делегате используйте протокол OZLivenessDelegate:

    hashtag
    4. Запустите анализы

    Для запуска анализов используйте AnalysisRequestBuilder.

    Шаги выше помогут вам в базовой интеграции наших мобильных SDK в ваше приложение. Данные анализов, выполненных в режиме «на устройстве» никуда не отправляются, поэтому, в отличие от данных серверных проверок, они не будут доступны через API или в веб-консоли. Однако обратите внимание: для проверки лицензии потребуется подключение к интернету. Мы также рекомендуем использовать наш сервис логирования – телеметрию. Записи телеметрии помогают в расследовании деталей атак. Необходимые учетные данные мы предоставим.

    для Android

    для iOS

    Android

    iOS

    в PlayMarket

    в TestFlight

    Коды ответов в диапазоне 2XX соответствуют корректно отработавшему запросу (например, при получении данных возвращается код 200, при добавлении новой сущности – 201, при корректном удалении – 204 и так далее);
  • Коды ответов в диапазоне 4XX соответствуют ошибке при обработке запроса, произошедшей на стороне вызывающего клиента (например, 404 – обращение к несуществующему ресурсу);

  • Коды ответов в диапазоне 5XX соответствуют ошибке при обработке запроса на стороне самой системы (например, при временной недоступности базы данных).

  • hashtag
    Тело ответа при ошибке

    Каждая ошибка, возникшая при обработке запроса на стороне системы, помимо соответствующего HTTP-кода ошибки содержит также описание самой ошибки в теле ответа с указанием следующих JSON-полей:

    • error_code – целочисленный код ошибки;

    • error_message– сообщение с описанием возникшей ошибки (используется только для отладочных задач и расследования инцидентов);

    • details – детали ошибки (приводятся в произвольном формате, специфичном для каждого отдельного типа ошибки). Необязательное поле.

    Пример ответа сервера:

    Коды ошибок:

    Код ошибки

    Значение

    Описание

    0

    UNKNOWN

    Неизвестная серверная ошибка.

    1

    NOT ALLOWED

    Вызван недопустимый метод, обычно сопровождается 405 статусом HTTP-ответа при вызове HTTP-метода, не поддерживаемого ресурсом (например PATCH, если ресурс поддерживает только GET/POST).

    2

    NOT REALIZED

    Вызван web-сервис, который не реализован на сервере, может встретиться в случае, если сервис по документации присутствует, однако фактически не реализован (временно или на постоянной основе).

    3

    Коллекции Postman
    Примерах использования

    Установка и использование плагина для Flutter

    Образец кода для Flutter вы можете найти здесьarrow-up-right.

    hashtag
    Установка и лицензирование

    Добавьте строки из блока ниже в pubspec.yaml проекта, где планируется использовать плагин.

    Для 8.22 и новее:

    До 8.21 включительно:

    Поместите файл лицензии (например, 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!).

    hashtag
    Начало работы с Flutter

    hashtag
    Инициализация SDK

    Для инициализации вызовите метод init. Название и путь к файлу лицензии должны совпадать с теми, которые вы указали в pubspec.yaml (например, assets/license.json).

    hashtag
    Подключение SDK к API

    Для подключения используйте полученные от нас логин, пароль и адрес API сервера.

    На стадии коммерческого использования вместо логина и пароля мы рекомендуем использовать токен доступа, который можно получить с помощью метода API /api/authorize/auth.

    По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для :

    или

    hashtag
    Съемка видео

    Для запуска съемки и получения результата вызовите метод startLiveness:

    Обратите внимание: для версий до 8.11 включительно метод для запуска называется executeLiveness. Он возвращает результат съемки.

    Для получения результата съемки в версии 8.12 и новее подпишитесь на livenessResult, как показано ниже:

    hashtag
    Выполнение проверок

    Размещенный ниже код поможет вам запустить анализы.

    Создайте объект Analysis:

    Запустите созданный анализ:

    Если вы хотите запустить анализ для конкретной папки, укажите ее идентификатор:

    Результат анализа запишется в массив объектов analysisResult.

    Для анализа медиафайла, полученного не нашим SDK, используйте следующий код:

    Итоговый блок кода (пример):

    oz-forensics / oz-liveness-android · GitLabGitLabchevron-right

    Настройка Android SDK

    hashtag
    Настройки Oz Mobile SDK

    Применять настройки рекомендуется при старте приложения.

    Журнал изменений

    hashtag
    8.22.0 – 23.12.2025

    • Изменили способ добавления добавления SDK в pubspec.yaml. С обновлением можно ознакомиться в .

    Files · main · oz-forensics / Oz Forensics Public projects / oz-liveness-ios-sample · GitLabGitLabchevron-right
    when (resultCode) {
        Activity.RESULT_CANCELED -> *USER CLOSED THE SCREEN*
        OzLivenessResultCode.SUCCESS -> {
            val sdkMediaResult = OzLivenessSDK.getResultFromIntent(data)
            *SUCCESS*
        }
        else -> {
            val errorMessage = OzLivenessSDK.getErrorFromIntent(data)
            *FAILURE*
        }
    }
    OzLivenessSDK.init(
        context,
        listOf(LicenseSource.LicenseAssetId(R.raw.forensics))
    )
    OzLivenessSDK.INSTANCE.init(
            context,
            Collections.singletonList(new LicenseSource.LicenseAssetId(R.raw.forensics)),
            null
    );
    val OZ_LIVENESS_REQUEST_CODE = 1
    val intent = OzLivenessSDK.createStartIntent(listOf( OzAction.Blank)) startActivityForResult(intent, OZ_LIVENESS_REQUEST_CODE)
    int OZ_LIVENESS_REQUEST_CODE = 1;
    Intent intent = OzLivenessSDK.INSTANCE.createStartIntent(Collections.singletonList(OzAction.Blank));
    startActivityForResult(intent, OZ_LIVENESS_REQUEST_CODE);
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == OZ_LIVENESS_REQUEST_CODE) {
                val sdkMediaResult = OzLivenessSDK.getResultFromIntent(data)
                val sdkErrorString = OzLivenessSDK.getErrorFromIntent(data)
                if (!sdkMediaResult.isNullOrEmpty()) {
                    analyzeMedia(sdkMediaResult)
                } else println(sdkErrorString)
            }
        }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == OZ_LIVENESS_REQUEST_CODE) {
            List<OzAbstractMedia> sdkMediaResult = OzLivenessSDK.INSTANCE.getResultFromIntent(data);
            String sdkErrorString = OzLivenessSDK.INSTANCE.getErrorFromIntent(data);
            if (sdkMediaResult != null && !sdkMediaResult.isEmpty()) {
                analyzeMedia(sdkMediaResult);
            } else System.out.println(sdkErrorString);
        }
    }
    private fun analyzeMedia(mediaList: List<OzAbstractMedia>) {
        AnalysisRequest.Builder()
            .addAnalysis(Analysis(Analysis.Type.QUALITY, Analysis.Mode.ON_DEVICE, mediaList))
            .build()
            .run(object : AnalysisRequest.AnalysisListener {
                override fun onSuccess(result: List<OzAnalysisResult>) {
                    result.forEach { 
                        println(it.resolution.name)
                        println(it.folderId)
                    }
                }
                override fun onError(error: OzException) {
                    error.printStackTrace()
                }
            })
    } 
    private void analyzeMedia(List<OzAbstractMedia> mediaList) {
        new AnalysisRequest.Builder()
                .addAnalysis(new Analysis(Analysis.Type.QUALITY, Analysis.Mode.ON_DEVICE, mediaList, Collections.emptyMap()))
                .build()
                .run(new AnalysisRequest.AnalysisListener() {
                    @Override public void onStatusChange(@NonNull AnalysisRequest.AnalysisStatus analysisStatus) {}
                    @Override
                    public void onSuccess(@NonNull List<OzAnalysisResult> list) {
                        for (OzAnalysisResult result: list) {
                            System.out.println(result.getResolution().name());
                            System.out.println(result.getFolderId());
                        }
                    }
                    @Override
                    public void onError(@NonNull OzException e) { e.printStackTrace(); }
        });
    }
    allprojects {
        repositories {
            maven { url "https://ozforensics.jfrog.io/artifactory/main" }
        }
    }
    dependencies {
        implementation 'com.ozforensics.liveness:full:<version>'
        // номер версии можно найти в журнале изменений для Android
    }
    pod 'OZLivenessSDK', :git => 'https://gitlab.com/oz-forensics/oz-liveness-ios', :tag => '<version>' // You can find the version needed in  iOS changelog
    
    OZSDK(licenseSources: [.licenseFileName("forensics.license")]) { licenseData, error in
        if let error = error {
            print(error.errorDescription)
        }
    }
    let actions: [OZVerificationMovement] = [.selfie]
    let ozLivenessVC: UIViewController = OZSDK.createVerificationVCWithDelegate(delegate, actions: actions) 
    self.present(ozLivenessVC, animated: true)
    let actions: [OZVerificationMovement] = [.selfie]
    let ozLivenessVC: UIViewController = OZSDK.createVerificationVCWithDelegate(delegate, actions: actions) 
    self.present(ozLivenessVC, animated: true)
    let analysisRequest = AnalysisRequestBuilder()
    let analysis = Analysis.init(
    media: mediaToAnalyze, 
    type: .quality, 
    mode: .onDevice)
    analysisRequest.uploadMedia(mediaToAnalyze)
    analysisRequest.addAnalysis(analysis)
    analysisRequest.run(
    scenarioStateHandler: { state in }, // обработчик шагов сценария
    uploadProgressHandler: { (progress) in } // обработчик загрузки файлов
    ) { (analysisResults : [OzAnalysisResult], error) in 
        // получение и обработка результатов анализов
        for result in analysisResults {
            print(result.resolution)
            print(result.folderID)
        }
    }
    {
        "error_code": 0,
        "error_message": "Unknown server side error occurred",
        "details": null
    }
    ozsdk: ^8.22.0
      ozsdk:
        git:
          url: https://gitlab.com/oz-forensics/oz-mobile-flutter-plugin.git
          ref: '8.8.2'
    ->
    {

    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

    Критическая ошибка работы с базой данных на стороне сервера.

    Образец кодаarrow-up-right
    Образец кодаarrow-up-right
    Руководство разработчика
    Руководство разработчика
    Demo apparrow-up-right
    Demo apparrow-up-right

    Параметр

    Тип

    Описание

    actions

    List<VerificationAction>

    Действия на видео

    use_main_camera

    Boolean

    Если установлено True, используется основная камера, False – передняя

    телеметрии
    assets
      - assets/license.json // название файла лицензии должно совпадать с названием из папки assets
    allprojects {
        repositories {
            google()
            mavenCentral()
            maven { url ‘https://ozforensics.jfrog.io/artifactory/main’ } // ссылка на репозиторий
        }
    }
    android.nonTransitiveRClass=false
    defaultConfig {
      ...
      minSDKVersion 21
      ...
    }
    await OZSDK.initSDK([<% название файла лицензии и путь к нему %>]);
    await OZSDK.setApiConnectionWithCredentials(<login>, <password>, <host>);
     await OZSDK.setApiConnectionWithToken(token, host);
    await OZSDK.setEventConnectionWithCredentials(<login>, <password>, <host>);
    await OZSDK.setEventConnectionWithToken(<token>, <host>);
    await OZSDK.startLiveness(<actions>, <use_main_camera>);
    class Screen extends StatefulWidget {
      static const route = 'liveness';
    
      const Screen({super.key});
    
      @override
      State<Screen> createState() => _ScreenState();
    }
    
    class _ScreenState extends State<Screen> {
      late StreamSubscription<List<Media>> _subscription;
    
      @override
      void initState() {
        super.initState();
    
        // подписка на результат liveness
        _subscription = OZSDK.livenessResult.listen(
          (List<Media> medias) {
              // содержит медиафайл liveness
          },
          onError: (Object error) {
            // обработка ошибок, чаще всего PlatformException
          },
        );
      }
    
      @override
      Widget build(BuildContext context) {
        // пропущено для сокращения образца кода
      }
    
      void _startLiveness() async {
        // запустите экран съемки с помощью метода startLiveness
        OZSDK.startLiveness(<list of actions>);
      }
    
      @override
      void dispose() {
        // cancel subscription
        _subscription.cancel();
        super.dispose();
      }
    }
    List<Analysis> analysis = [ Analysis(Type.quality, Mode.serverBased, <media>, {}), ];
    final analysisResult = await OZSDK.analyze(analysis, [], {});
    final analysisResult = await OZSDK.analyze(analysis, folderID, [], {});
    media = Media(FileTypedocumentPhoto, VerificationAction.oneShot, “photo_selfie”, null, <pat
    // замените VerificationAction.blank, если у вас используется другой жест Livenes
    final cameraMedia = await OZSDK.executeLiveness([VerificationAction.blank], use_main_camera);
    
    final analysis = [
      Analysis(Type.quality, Mode.serverBased, cameraMedia, {}),
    ];
    
    final analysisResult = await OZSDK.analyze(analysis, [], {});
    // замените VerificationAction.blank, если у вас используется другой жест Liveness
    final cameraMedia = await OZSDK.executeLiveness([VerificationAction.blank], use_main_camera);
    final biometryMedia = [...cameraMedia];
    biometryMedia.add(
      Media(
        FileType.documentPhoto,
        VerificationAction.blank,
        MediaType.movement,
        null,
        <путь к референсному фото>,
        null,
        null,
        MediaTag.photoSelfie,
      ),
    );
    
    final analysis = [
      Analysis(Type.quality, Mode.serverBased, cameraMedia, {}),
      Analysis(Type.biometry, Mode.serverBased, biometryMedia, {}),
    ];
    
    final analysisResult = await OZSDK.analyze(analysis, [], {});
    
    hashtag
    Настройка интерфейса Oz Mobile SDK

    Чтобы настроить интерфейс Oz Liveness, воспользуйтесь UICustomization. Полный список полей находится здесь.

    OzLivenessSDK.config.customization = UICustomization(
        // параметры настройки верхней панели
        toolbarCustomization = 
    

    По умолчанию SDK использует локаль устройства. Чтобы сменить локаль, используйте код ниже:

    // подключение к серверу API
    OzLivenessSDK.setApiConnection(OzConnection.fromServiceToken(HOST, TOKEN))
    // настройка количества попыток обнаружить действие
    OzLivenessSDK.config.attemptSettings = attemptSettings 
    // возможность отображения дополнительной информации для отладки (чтобы увидеть данные, нажмите на номер версии SDK)
    OzLivenessSDK.config.allowDebugVisualization = allowDebugVisualization 
    // настройки журналирования
    OzLivenessSDK.config.logging = ozLogging 
    OzConfig config = OzLivenessSDK.INSTANCE.getConfig();
    // подключение к серверу API
    OzLivenessSDK.setApiConnection(OzConnection.fromServiceToken(HOST, TOKEN));
    // настройка количества попыток обнаружить действие
    config.setAttemptSettings(attemptSettings); 
    // возможность отображения дополнительной информации для отладки (чтобы увидеть данные, нажмите на номер версии SDK)
    config.setAllowDebugVisualization(allowDebugVisualization); 
    // настройки журналирования
    config.setLogging(ozLogging);
    Android:
    • Исправили ошибку, из-за которой на некоторых моделях телефонов могли записываться зеленые видео.

    • Исправили ошибки, из-за которых SDK мог иногда вылетать на некоторых моделях телефонов.

    • Исправили ошибку с mediaId = null.

    • Улучшили производительность SDK на некоторых устройствах.

    • Обновили SDK в рамках подготовки к внедрению новой функциональности, связанной с безопасностью.

    • Повысили безопасность.

  • iOS:

    • Исправили ошибку, из-за которой SDK мог вылететь после съемки референтного фото с помощью камеры во время анализа Biometry.

    • Исправили ошибку, из-за которой в SDK не отрабатывали связанные с лицензией callback-функции.

    • Исправили ошибку, из-за которой SDK на некоторых устройствах иногда мог не реагировать на действия пользователя.

    • Обновили SDK в рамках подготовки к внедрению новой функциональности, связанной с безопасностью.

    • Повысили безопасность.

  • hashtag
    8.19.0 – 24.11.2025

    • Android:

      • Исправили ошибку, из-за которой при запуске Fragment могло появляться предупреждение.

      • SDK больше не вылетает при вызове copyPlane.

      • Если при гибридном анализе вы выбираете отправку сжатых видео, оригинальные видео больше не сохраняются вместе со сжатыми.

    • iOS:

      • Исправили анимацию жеста Сканирование.

      • Исправили ошибку, при которой SDK при инициализации в дебаг-режиме не вызывал completion.

    • Повысили безопасность.

    hashtag
    8.18.1 – 10.09.2025

    • initSDK в дебаг-режиме для iOS теперь работает корректно.

    hashtag
    8.18.0 – 26.08.2025

    • Добавили возможность выполнять анализ для конкретной папки с использованием ее идентификатора.

    • Исправили ошибку в коде примера.

    • Подсказка для жеста Сканирование теперь озвучивается корректно.

    • При попытке удалить референтное фото SDK теперь запрашивает подтверждение.

    • Исправили ошибку с темным фоном при запуске SDK.

    • Исправили ошибку, из-за которой при биометрическом анализе одно из изображений переворачивалось.

    • Исправили несколько ошибок, возникавших во время анализов на устройстве и при гибридном анализе.

    • Android:

      • Теперь поддерживаем Google Dynamic Feature Delivery.

      • Исправили ошибку, из-за которой SDK мог вылететь при закрытии экрана съемки.

    • iOS:

      • Исправили ошибку с интеграцией через Swift UI.

    • Повысили безопасность и обновили телеметрию.

    hashtag
    8.16.0 – 30.04.2025

    • Обновили логику авторизации.

    • Улучшили логику озвучивания подсказок.

    • Обновления безопасности.

    • Android: валидацию видео – опцию, которая запускает запись видео заново, если получившийся файл состоит из 3 кадров и менее – теперь можно отключить.

    • iOS:

      • SDK теперь сжимает медиафайлы, если их размер превышает 10 МБ.

      • Жесты с движениями головы теперь обрабатываются корректно.

    hashtag
    8.14.0 – 17.12.2024

    • Обновления безопасности и телеметрии.

    • Подсказки SDK и элементы управления интерфейса могут озвучиваться в соответствии с требованиями WCAG.

    • Упростили прохождение проверки для жестов, включающих движение головы.

    • Android:

      • Сжатие больших видео теперь происходит на этапе закрытия экрана Liveness.

      • Исправили ошибку, из-за которой изображение с закрытыми глазами могло быть выбрано в качестве лучшего кадра.

      • Исправили проблемы с кодеками, появлявшиеся на некоторых моделях смартфонов.

    • iOS:

      • Добавили поддержку Xcode 16.

      • При использовании основной (задней) камеры яркость экрана теперь не меняется.

    hashtag
    8.12.0 – 11.10.2024

    • Метод executeLiveness больше не используется. Съемка теперь запускается с помощью метода startLiveness.

    • Обновили код для получения результата съемки.

    • Обновления безопасности и телеметрии.

    hashtag
    8.8.2 – 27.06.2024

    • При попытке передать пустую строку в качестве аргумента для методов addFolderId (iOS) и setFolderID (Android)теперь показывается информативная ошибка.

    • Android:

      • Исправили ошибку с бесконечно крутящимся спиннером, который появлялся при переключении пользователя на другое приложение во время прохождения проверки Liveness.

      • Исправили несколько ошибок, появлявшихся только на определенных моделях смартфонов.

    • Обновления безопасности и телеметрии.

    hashtag
    8.6.0 – 15.04.2024

    • Android:

      • Улучшили модель Liveness для проверки на устройстве.

      • Обновления безопасности.

    • iOS:

      • Синхронизировали с Android сообщения, которые SDK показывает после загрузки медиафайла.

      • Исправили баг с задержками запуска анализа, которые иногда возникали для анализа по одному кадру.

    hashtag
    8.5.0 – 20.03.2024

    • Длительность жеста Селфи теперь можно менять (размер видеофайла также изменится).

    • Убрали паузу после жеста Сканирование.

    • Обновления безопасности и журналирования.

    • Android: если размер записанного видеофайла больше 10 Мбайт, видео будет сжато.

    hashtag
    8.4.0 – 11.01.2024

    • Android: обновили модель Liveness для проверки на устройстве.

    • iOS: изменили поведение для отсутствующих переводов при добавлении новых ключей в локализацию: теперь вместо названия ключа показывается текст на языке по умолчанию (английском).

    • Исправили ошибки.

    hashtag
    8.3.0 – 30.11.2023

    • Добавили возможность использования мастер-лицензии, которая работает с любым bundle_id.

    • Android: исправили ошибку со сжатием видео при гибридном анализе, которая возникала на некоторых моделях телефонов.

    • iOS: исправили ошибку с мигающим фоном при съемке.

    hashtag
    8.2.0 – 17.11.2023

    • Выпущена первая версия.

    соответствующем разделе

    Запуск плагина

    circle-info

    Перед запуском убедитесь, что скрипты плагина загружены.

    Для запуска окна плагина следует воспользоваться методом open(options). Параметры:

    • options – объект с настройками:

      • token – (опционально) токен авторизации;

      • license – объект с информацией о лицензии;

      • licenseUrl

    Пример:

    OzLivenessSDK.INSTANCE.getConfig().setCustomization(new UICustomization(
    // параметры настройки верхней панели
    new ToolbarCustomization(
        R.drawable.ib_close,
        new Color.ColorRes(R.color.white),
        R.style.Sdk_Text_Primary,
        new Color.ColorRes(R.color.white),
        R.font.roboto,
        Typeface.NORMAL,
        100, // непрозрачность текста на верхней панели (в %)
        18, // размер текста на верхней панели (в sp)
        new Color.ColorRes(R.color.black),
        60, // непрозрачность фона верхней панели (в %)
            "Liveness", // текст на верхней панели
        true // центрировать текст на верхней панели
        ),
    // параметры настройки текста подсказки
    new CenterHintCustomization(
        50, // положение по вертикали (в %)
        R.style.Sdk_Text_Primary,
        R.drawable.bg_center_hint_badge,
        new Color.ColorRes(R.color.color_surface),
        100, // непрозрачность фона
        14, // угловой радиус подложки
        100 // непрозрачность текста
        ),
    // параметры настройки анимации подсказки
    new HintAnimation(
        new Color.ColorRes(R.color.red), // цвет градиента
        80, // непрозрачность цвета градиента (в %)
        120, // размер квадрата, в который вписан значок анимации
        false // скрывать ли анимацию
        ),
    // параметры настройки рамки вокруг лица
    new FaceFrameCustomization(     GeometryType.RECTANGLE,
        10, // угловой радиус для прямоугольника
        new Color.ColorRes(R.color.error_red), 
        new Color.ColorRes(R.color.success_green),
        100, // непрозрачность рамки (в %)
        5, // ширина линии рамки (в dp)
        3 // отступ от рамки до области для позиционирования лица (в dp)
        ),
    // параметры настройки фона за рамкой
    new BackgroundCustomization(
        new Color.ColorRes(R.color.black),
        60 // непрозрачность фона (в %)
        ),
    // параметры настройки текста версии SDK
    new VersionTextCustomization(
        R.style.Sdk_Text_Primary,
        R.font.roboto,
        12, // размер шрифта текста версии (в sp)
        new Color.ColorRes(R.color.white),
        100 // непрозрачность текста версии (в %)
        ),
    // параметры настройки дополнительной защиты от мошенничества
    new AntiScamCustomization(
         "Recording .. ",
        R.font.roboto,
        12,
        new Color.ColorRes(R.color.text_color),
        100,
        R.style.Sdk_Text_Primary,
        new Color.ColorRes(R.color.color_surface),
        100,
        14,
        new Color.ColorRes(R.color.green)
        ),
    // параметры настройки логотипа
    new LogoCustomization(
        new Image.Drawable(R.drawable.ic_logo),
        new Size(176, 64),
        100,
        50
        )
     )
    );
    OzLivenessSDK.config.localizationCode = OzLivenessSDK.OzLocalizationCode.RU
    OzLivenessSDK.INSTANCE.getConfig().setLocalizationCode(OzLivenessSDK.OzLocalizationCode.RU);
    В соответствии с требованиями Apple обновили Xcode до версии 16.
    Исправили ошибку, из-за которой некоторые записанные SDK видео были зелеными.
    Исправили ошибку записи видео, появлявшуюся на некоторых моделях смартфонов.
    ToolbarCustomization
    (
    closeIconRes = R.drawable.ib_close,
    closeIconTint = Color.ColorRes(R.color.white),
    titleTextFont = R.font.roboto,
    titleTextSize = 18,
    titleTextAlpha = 100,
    titleTextColor = Color.ColorRes(R.color.white),
    backgroundColor = Color.ColorRes(R.color.black),
    backgroundAlpha = 60,
    isTitleCentered = true,
    title = "Analysis",
    ),
    // параметры настройки текста подсказки
    centerHintCustomization = CenterHintCustomization(
    textFont = R.font.roboto,
    textColor = Color.ColorRes(R.color.text_color),
    textSize = 20,
    verticalPosition = 50,
    textStyle = R.style.Sdk_Text_Primary,
    backgroundColor = Color.ColorRes(R.color.color_surface),
    backgroundOpacity = 56,
    backgroundCornerRadius = 14,
    textAlpha = 100,
    ),
    // параметры настройки анимации подсказки
    hintAnimation = HintAnimation(
    hintGradientColor = Color.ColorRes(R.color.red),
    hintGradientOpacity = 80,
    animationIconSize = 120,
    hideAnimation = false,
    ),
    // параметры настройки рамки вокруг лица
    faceFrameCustomization = FaceFrameCustomization(
    geometryType = GeometryType.Rectangle(10), // 10 – радиус скругления углов
    strokeDefaultColor = Color.ColorRes(R.color.error_red),
    strokeFaceInFrameColor = Color.ColorRes(R.color.success_green),
    strokeAlpha = 100,
    strokeWidth = 5,
    strokePadding = 3,
    ),
    // параметры настройки фона за рамкой
    backgroundCustomization = BackgroundCustomization(
    backgroundColor = Color.ColorRes(R.color.black),
    backgroundAlpha = 60,
    ),
    // параметры настройки текста версии SDK
    versionTextCustomization = VersionTextCustomization(
    textFont = R.font.roboto,
    textSize = 12,
    textColor = Color.ColorRes(R.color.white),
    textAlpha = 100,
    ),
    // параметры настройки дополнительной защиты от мошенничества
    antiScamCustomization = AntiScamCustomization(
    textMessage = "",
    textFont = R.font.roboto,
    textSize = 14,
    textColor = Color.ColorRes(R.color.text_color),
    textAlpha = 100,
    backgroundColor = Color.ColorRes(R.color.color_surface),
    backgroundOpacity = 100,
    cornerRadius = 20,
    flashColor = Color.ColorRes(R.color.green),
    ),
    // параметры настройки логотипа,
    // если лицензия предусматривает возможность его изменения
    logoCustomization = LogoCustomization(
    image = Image.Drawable(R.drawable.ic_logo),
    size = Size(176, 64),
    verticalPosition = 100,
    horizontalPosition = 50,
    )
    )
    Logo
    – строка, содержащая путь к файлу лицензии;
  • 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_complete – callback-функция с одним аргументом, вызываемая после окончания проверки и возвращающая результат анализа (не применяется в режиме capture). Вид результата зависит от параметра настройки Web Adapter result_mode. Описание результата здесь.

  • on_result – callback-функция с одним аргументом, вызываемая раз в несколько секунд в процессе анализа и возвращающая промежуточный результат (не применяется в режиме capture). Вид результата зависит от параметра настройки Web Adapter result_mode. Описание результата здесь.

  • 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 (мс).

  • С помощью следующих параметров (добавлены в 1.7.15) вы можете управлять поведением SDK при зависании getUserMedia():

    • get_user_media_promise_timeout_ms – по истечении установленного здесь таймаута (в мс) SDK вызовет ошибку или покажет инструкцию для пользователя. Этот параметр представляет собой объект с ключами: "platform_browser", "browser", "platform", "default"(приоритет соответствует последовательности).

    • get_user_media_promise_timeout_throw_error – определяет, что именно демонстрирует SDK после таймаута, ошибку (если true) или инструкцию (если false).

  • OzLiveness.open({
        lang: 'en',
        action: [
            'video_selfie_blank',
        ],
        meta: { // если нужно, добавьте метаданные для папки
            'transaction_id': 'your unique transaction identifier', // идентификатор транзакции для поиска через Oz API
            'end_user_id': '<user_or_lead_id>',
            'meta_key': 'meta_value',
        },
        on_result: function (result) {
            console.log('on_result', result);
        },
        on_complete: function (result) {
            console.log('on_complete', result);
        },
        on_close: function () {
            console.log('on_close');
        },
        on_capture_complete: function (result) {
            console.log('on_capture_complete', result);
        }
    });

    Как интегрировать серверную проверку Liveness в ваше мобильное приложение

    Из этой статьи вы узнаете, как интегрировать Oz Liveness Mobile SDK в клиентское мобильное приложение: для съемки видео с лицом и дальнейшей его проверки на сервере.

    Oz Liveness Mobile SDK – это:

    • Готовый интерфейс для съемки видео, который легко встроить в приложение клиента.

    • Высокое качество видео, которое обеспечивает точность проверки Liveness.

    «Под капотом» Oz SDK взаимодействует с OZ API.

    Для интеграции необходимо связаться с нами для получения всех нужных ссылок и доступов:

    Логин: [email protected]

    Пароль: …

    API: https://sandbox.ohio.ozforensics.com

    Web-консоль: https://sandbox.ohio.ozforensics.com

    Для работы Oz Liveness Mobile SDK нужна лицензия, которая привязывается к bundle_id приложения, например com.yourcompany.yourapp. Тестовую лицензию на месяц вы можете оформить самостоятельно , если вам требуется лицензия на более длительный срок – .

    Мы также рекомендуем использовать наш сервис логирования – телеметрию. Записи телеметрии помогают в расследовании деталей атак. Для пользователей Oz API логирование подключается автоматически. Для локальных установок мы предоставим вам необходимые учетные данные.

    hashtag
    Android

    hashtag
    1. Добавьте SDK в проект

    В build.gradle проекта добавьте строки:

    В build.gradle модуля добавьте строки:

    hashtag
    2. Инициализируйте SDK

    Переименуйте файл лицензии в forensics.license и поместите его в папку res/raw в вашем проекте.

    hashtag
    3. Подключите SDK к Oz API

    Вам потребуются полученные от нас логин, пароль и адрес API-сервера.

    На стадии продакшна рекомендуется использовать в коде не логин и пароль, а полученный с помощью на их основе токен доступа access_token. Передайте токен в приложение:

    hashtag
    4. Add face recording

    Для начала съемки используйте метод startActivityForResult:

    Для получения готового видео используйте onActivityResult:

    Готовые видео содержатся в объекте sdkMediaResult.

    hashtag
    5. Запустите анализы

    Для запуска анализов используйте код ниже. mediaList – массив объектов, полученных из sdkMediaResult или извне (если вы снимали видео без использования нашего SDK).

    hashtag
    iOS

    hashtag
    1. Добавьте SDK в проект

    Установите OZLivenessSDK через . Чтобы встроить SDK в проект Xcode, в Podfile добавьте:

    hashtag
    2. Инициализируйте SDK

    Переименуйте файл лицензии в forensics.license и поместите его в проект.

    hashtag
    3. Подключите SDK к Oz API

    Вам потребуются полученные от нас логин, пароль и адрес API-сервера.

    На стадии продакшна рекомендуется использовать в коде не логин и пароль, а полученный с помощью на их основе токен доступа access_token. Передайте токен в приложение:

    hashtag
    4. Запустите съемку видео

    Создайте контроллер, который будет снимать видео:

    В делегате используйте протокол OZLivenessDelegate:

    hashtag
    5. Запустите анализы

    Для запуска анализов используйте AnalysisRequestBuilder. Метод run «под капотом» обратится к Oz API.

    Шаги выше помогут вам в базовой интеграции наших мобильных SDK в ваше приложение. Чтобы получить доступ к снятым видео и результатам анализов, воспользуйтесь или API-запросами.

    В руководстве разработчика вы также найдете инструкции по настройке внешнего вида SDK и список методов SDK как для iOS, так и для Android:

    Объекты системы

    hashtag
    Иерархия объектов

    Объекты системы имеют иерархическую структуру подчинения.

    1. На верхнем уровне находится Компания. Это значит, что один экземпляр установки Oz API может обслуживать пользователей нескольких не зависящих друг от друга компаний.

    2. Пользователь является инициатором любого запроса. В зависимости от пользователя могут присутствовать определенные ограничения на те или иные действия.

    3. При выполнении Пользователем запроса на Анализ система автоматически создает Папку, помещает туда все отправленные пользователем Медиафайлы, а затем запускает собственно (один или несколько). Анализы применяются к медиафайлам из папки в соответствии с . Требования к медиафайлам перечислены .

    hashtag
    Поля объектов

    Каждый объект имеет набор полей для работы и идентификации на уровне REST API запросов.

    hashtag
    Общие поля

    hashtag
    Объект Компания

    hashtag
    Объект Пользователь

    hashtag
    Объект Папка

    hashtag
    Объект Медиа

    hashtag
    Объект Анализ

    Съемка видео и описание коллбэка on_capture_complete

    В этом разделе вы узнаете, как снимать видео и отправлять его Oz API через ваш бэкенд.

    hashtag
    1. Обзор

    Режим capture работает следующим образом:

    1. Oz Web SDK снимает видео и передает его вашему web-приложению в виде последовательности кадров.

    2. Web-приложение вызывает ваш бэкэнд и передает в него архив с кадрами.

    3. После обработки видео ваш бэкэнд вызывает Oz API для выполнения анализов, после чего получает их результаты.

    4. Ваш бэкэнд передает результаты обратно в web-приложение (опционально).

    hashtag
    2. Реализация

    На стороне сервера необходимо сконфигурировать Web SDK для работы в режиме capture: параметру architecture в файле app_config.json значение capture.

    В вашем web-приложении добавьте callback-функцию для обработки кадров при открытии Web SDK:

    Структура получаемого объекта зависит от того, была ли обнаружена виртуальная камера.

    hashtag
    Виртуальная камера не обнаружена

    hashtag
    Виртуальная камера обнаружена

    Список переменных с их значениями приведен ниже.

    hashtag
    Обратите внимание:

    • Видео, полученное через Oz Web SDK, – это последовательность кадров. Чтобы отправить его Oz API, поместите кадры в ZIP-архив, затем используйте метод POST {{host}}/api/folders (пройдите по для ознакомления с коллекцией Postman).

    • Вы можете получить из папки видео в формате MP4 video: вызовите метод /api/folders/{{folder_id}}, указав идентификатор папки. В JSON-ответе найдите preview_url в source_media. В preview_url

    • Для передачи в Oz API используйте данные без кодирования в base64.

    Logo

    Образец кодаarrow-up-right для Android

    Образец кодаarrow-up-right для iOS

    Руководство разработчика Android

    Руководство разработчика iOS

    Demo apparrow-up-right в PlayMarket

    Demo apparrow-up-right в TestFlight

    на нашем веб-сайтеarrow-up-right
    свяжитесь с намиenvelope
    метода авторизацииarrow-up-right
    CocoaPodsarrow-up-right
    метода авторизацииarrow-up-right
    веб-консолью

    Координаты "ориентиров" лица (левый глаз, правый глаз, нос, рот, левое ухо, правое ухо) на лучшем кадре

    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

    Информация о среде клиента

    содержится ссылка на видео. Из плагина получить MP4-видео нельзя (только в виде последовательности кадров).
  • При использовании архитектуры capture также необходимо добавить в запрос POST {{host}}/api/folders дополнительное поле additional_info. Оно нужно для сбора информации о среде клиента. Пример заполнения тела запроса:

  • Переменная

    Тип

    Описание

    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]]

    allprojects {
        repositories {
            maven { url "https://ozforensics.jfrog.io/artifactory/main" }
        }
    }
    dependencies {
        implementation 'com.ozforensics.liveness:full:<version>'
        // номер версии можно найти в журнале изменений для Android
    }
    OzLivenessSDK.init(
        context,
        listOf(LicenseSource.LicenseAssetId(R.raw.forensics))
    )
    OzLivenessSDK.INSTANCE.init(
            context,
            Collections.singletonList(new LicenseSource.LicenseAssetId(R.raw.forensics)),
            null
    );
    OzLivenessSDK.setApiConnection(
        OzConnection.fromCredentials(host, username, password),
        statusListener(
            { token -> /* token */ },
            { ex -> /* error */ }
        )
    )
    OzLivenessSDK.INSTANCE.setApiConnection(
            OzConnection.Companion.fromCredentials(host, username, password),
            new StatusListener<String>() {
                @Override
                public void onStatusChanged(@Nullable String s) {}
                @Override
                public void onSuccess(String token) { /* token */ }
                @Override
                public void onError(@NonNull OzException e) { /* error */ }
            }
    );
    OzLivenessSDK.setApiConnection(OzConnection.fromServiceToken(host, token))
    OzLivenessSDK.INSTANCE.setApiConnection(
            OzConnection.Companion.fromServiceToken(host, token), 
            null
    );
    val OZ_LIVENESS_REQUEST_CODE = 1
    val intent = OzLivenessSDK.createStartIntent(listOf( OzAction.Blank)) startActivityForResult(intent, OZ_LIVENESS_REQUEST_CODE)
    int OZ_LIVENESS_REQUEST_CODE = 1;
    Intent intent = OzLivenessSDK.INSTANCE.createStartIntent(Collections.singletonList(OzAction.Blank));
    startActivityForResult(intent, OZ_LIVENESS_REQUEST_CODE);
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == OZ_LIVENESS_REQUEST_CODE) {
                val sdkMediaResult = OzLivenessSDK.getResultFromIntent(data)
                val sdkErrorString = OzLivenessSDK.getErrorFromIntent(data)
                if (!sdkMediaResult.isNullOrEmpty()) {
                    analyzeMedia(sdkMediaResult)
                } else println(sdkErrorString)
            }
        }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == OZ_LIVENESS_REQUEST_CODE) {
            List<OzAbstractMedia> sdkMediaResult = OzLivenessSDK.INSTANCE.getResultFromIntent(data);
            String sdkErrorString = OzLivenessSDK.INSTANCE.getErrorFromIntent(data);
            if (sdkMediaResult != null && !sdkMediaResult.isEmpty()) {
                analyzeMedia(sdkMediaResult);
            } else System.out.println(sdkErrorString);
        }
    }
    private fun analyzeMedia(mediaList: List<OzAbstractMedia>) {
        AnalysisRequest.Builder()
            .addAnalysis(Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaList))
            .build()
            .run(object : AnalysisRequest.AnalysisListener {
                override fun onSuccess(result: List<OzAnalysisResult>) {
                    result.forEach { 
                        println(it.resolution.name)
                        println(it.folderId)
                    }
                }
                override fun onError(error: OzException) {
                    error.printStackTrace()
                }
            })
    } 
    private void analyzeMedia(List<OzAbstractMedia> mediaList) {
        new AnalysisRequest.Builder()
                .addAnalysis(new Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaList, Collections.emptyMap()))
                .build()
                .run(new AnalysisRequest.AnalysisListener() {
                    @Override public void onStatusChange(@NonNull AnalysisRequest.AnalysisStatus analysisStatus) {}
                    @Override
                    public void onSuccess(@NonNull List<OzAnalysisResult> list) {
                        for (OzAnalysisResult result: list) {
                            System.out.println(result.getResolution().name());
                            System.out.println(result.getFolderId());
                        }
                    }
                    @Override
                    public void onError(@NonNull OzException e) { e.printStackTrace(); }
        });
    }
    pod 'OZLivenessSDK', :git => 'https://gitlab.com/oz-forensics/oz-liveness-ios', :tag => '<version>' // You can find the version needed in  iOS changelog
    
    OZSDK(licenseSources: [.licenseFileName("forensics.license")]) { licenseData, error in
        if let error = error {
            print(error.errorDescription)
        }
    }
    OZSDK.setApiConnection(Connection.fromCredentials(host: “https://sandbox.ohio.ozforensics.com”, login: login, password: p)) { (token, error) in
        // Your code to handle error or token
    }
    OZSDK.setApiConnection(Connection.fromServiceToken(host: "https://api.sandbox.ozforensics.com", token: token)) { (token, error) in
    }
    let actions: [OZVerificationMovement] = [.selfie]
    let ozLivenessVC: UIViewController = OZSDK.createVerificationVCWithDelegate(delegate, actions: actions) 
    self.present(ozLivenessVC, animated: true)
    let actions: [OZVerificationMovement] = [.selfie]
    let ozLivenessVC: UIViewController = OZSDK.createVerificationVCWithDelegate(delegate, actions: actions) 
    self.present(ozLivenessVC, animated: true)
    let analysisRequest = AnalysisRequestBuilder()
    let analysis = Analysis.init(
    media: mediaToAnalyze, 
    type: .quality, 
    mode: .serverBased)
    analysisRequest.uploadMedia(mediaToAnalyze)
    analysisRequest.addAnalysis(analysis)
    analysisRequest.run(
    scenarioStateHandler: { state in }, // обработчик шагов сценария
    uploadProgressHandler: { (progress) in } // обработчик для загрузки файлов 
    ) { (analysisResults : [OzAnalysisResult], error) in 
        // получение и обработка анализов 
        for result in analysisResults {
            print(result.resolution)
            print(result.folderID)
        }
    }
    OZLiveness.open({
      ... // другие параметры
      on_capture_complete: function(result) {
             // Код для обработки кадров / отправки его через ваш API, шаг 2 на схеме
      }
    })
    {
    	"action": <action>,
    	"best_frame": <bestframe>,
    	"best_frame_png": <bestframe_png>,
    	"best_frame_bounding_box": {
    		"left": <bestframe_bb_left>,
    		"top": <bestframe_bb_top>,
    		"right": <bestframe_bb_right>,
    		"bottom": <bestframe_bb_bottom>
    		},
    	"best_frame_landmarks": {
    		"left_eye": [bestframe_x_left_eye, bestframe_y_left_eye],
    		"right_eye": [bestframe_x_right_eye, bestframe_y_right_eye],
    		"nose_base": [bestframe_x_nose_base, bestframe_y_nose_base],
    		"mouth_bottom": [bestframe_x_mouth_bottom, bestframe_y_mouth_bottom],
    		"left_ear": [bestframe_x_left_ear, bestframe_y_left_ear],
    		"right_ear": [bestframe_x_right_ear, bestframe_y_right_ear]
    		},
    	"frame_list": [<frame1>, <frame2>],
    	"frame_bounding_box_list": [
    		{
    		"left": <frame1_bb_left>,
    		"top": <frame1_bb_top>,
    		"right": <frame1_bb_right>,
    		"bottom": <frame1_bb_bottom>
    		},
    		{
    		"left": <frame2_bb_left>,
    		"top": <frame2_bb_top>,
    		"right": <frame2_bb_right>,
    		"bottom": <frame2_bb_bottom>
    		},
    	],
    	"frame_landmarks": [
    		{
    		"left_eye": [frame1_x_left_eye, frame1_y_left_eye],
    		"right_eye": [frame1_x_right_eye, frame1_y_right_eye],
    		"nose_base": [frame1_x_nose_base, frame1_y_nose_base],
    		"mouth_bottom": [frame1_x_mouth_bottom, frame1_y_mouth_bottom],
    		"left_ear": [frame1_x_left_ear, frame1_y_left_ear],
    		"right_ear": [frame1_x_right_ear, frame1_y_right_ear]
    		},
    		{
    		"left_eye": [frame2_x_left_eye, frame2_y_left_eye],
    		"right_eye": [frame2_x_right_eye, frame2_y_right_eye],
    		"nose_base": [frame2_x_nose_base, frame2_y_nose_base],
    		"mouth_bottom": [frame2_x_mouth_bottom, frame2_y_mouth_bottom],
    		"left_ear": [frame2_x_left_ear, frame2_y_left_ear],
    		"right_ear": [frame2_x_right_ear, frame2_y_right_ear]
    		}
    	],
    "from_virtual_camera": null,
    "additional_info": <additional_info>
    }
    {
    	"action": <action>,
    	"best_frame": null,
    	"best_frame_png": null,
    	"best_frame_bounding_box": null,
    	"best_frame_landmarks": null
    	"frame_list": null,
    	"frame_bounding_box_list": null,
    	"frame_landmarks": null,
    	"from_virtual_camera": {
    	"additional_info": <additional_info>,
    		"best_frame": <bestframe>,
    		"best_frame_png": <best_frame_png>,
    		"best_frame_bounding_box": {
    			"left": <bestframe_bb_left>,
    			"top": <bestframe_bb_top>,
    			"right": <bestframe_bb_right>,
    			"bottom": <bestframe_bb_bottom>
    			},
    		"best_frame_landmarks": {
    			"left_eye": [bestframe_x_left_eye, bestframe_y_left_eye],
    			"right_eye": [bestframe_x_right_eye, bestframe_y_right_eye],
    			"nose_base": [bestframe_x_nose_base, bestframe_y_nose_base],
    			"mouth_bottom": [bestframe_x_mouth_bottom, bestframe_y_mouth_bottom],
    			"left_ear": [bestframe_x_left_ear, bestframe_y_left_ear],
    			"right_ear": [bestframe_x_right_ear, bestframe_y_right_ear]
    			},
    		"frame_list": [<frame1>, <frame2>],
    		"frame_bounding_box_list": [
    			{
    			"left": <frame1_bb_left>,
    			"top": <frame1_bb_top>,
    			"right": <frame1_bb_right>,
    			"bottom": <frame1_bb_bottom>
    			},
    			{
    			"left": <frame2_bb_left>,
    			"top": <frame2_bb_top>,
    			"right": <frame2_bb_right>,
    			"bottom": <frame2_bb_bottom>
    			},
    			],
    		"frame_landmarks": [
    			{
    			"left_eye": [frame1_x_left_eye, frame1_y_left_eye],
    			"right_eye": [frame1_x_right_eye, frame1_y_right_eye],
    			"nose_base": [frame1_x_nose_base, frame1_y_nose_base],
    			"mouth_bottom": [frame1_x_mouth_bottom, frame1_y_mouth_bottom],
    			"left_ear": [frame1_x_left_ear, frame1_y_left_ear],
    			"right_ear": [frame1_x_right_ear, frame1_y_right_ear]
    			},
    			{
    			"left_eye": [frame2_x_left_eye, frame2_y_left_eye],
    			"right_eye": [frame2_x_right_eye, frame2_y_right_eye],
    			"nose_base": [frame2_x_nose_base, frame2_y_nose_base],
    			"mouth_bottom": [frame2_x_mouth_bottom, frame2_y_mouth_bottom],
    			"left_ear": [frame2_x_left_ear, frame2_y_left_ear],
    			"right_ear": [frame2_x_right_ear, frame2_y_right_ear]
    			}
    		]
    	}
    }
    "VIDEO_FILE_KEY": VIDEO_FILE_ZIP_BINARY
    "payload": "{
            "media:meta_data": {
               "VIDEO_FILE_KEY": {
                  "additional_info": <additional_info>
                  }
               }
    }"

    технические поля, зарезервированные для работы модулей

    фамилия

    middle_name

    String

    отчество

    email

    String

    email, который является логином пользователя

    password

    String

    пароль, указывается при добавлении нового пользователя или при изменении пароля. Если пользователя не admin, необходимо указать поле password_old

    can_start_analyze_*

    String

    см.

    company_id

    UUID

    код компании пользователя

    is_admin

    Boolean

    is_service

    Boolean

    список для этого файла

    данные результата анализа

    Поле

    Тип

    Описание

    time_created

    Timestamp

    время создания объекта (кроме пользователя и компании)

    time_updated

    Timestamp

    время изменения объекта

    meta_data

    Json

    любые пользовательские поля

    technical_meta_data

    Поле

    Тип

    Описание

    company_id

    UUID

    код компании в системе

    name

    String

    наименование компании в системе

    Поле

    Тип

    Описание

    user_id

    UUID

    код пользователя в системе

    user_type

    String

    роль пользователя в системе

    first_name

    String

    имя

    last_name

    Поле

    Тип

    Описание

    folder_id

    UUID

    код папки в системе

    resolution_status

    ResolutionStatus

    статус последнего анализа папки

    Поле

    Тип

    Описание

    media_id

    UUID

    код медиа

    original_name

    String

    оригинальное имя файла (в файловой системе клиента)

    original_url

    Url

    HTTP-ссылка на файл на сервере API

    tags

    Поле

    Тип

    Описание

    analyse_id

    UUID

    код анализа

    folder_id

    UUID

    код папки

    type

    String

    тип анализа (BIOMETRY\QUALITY\DOCUMENTS)

    results_data

    роли
    Анализ
    Правилами назначения анализов
    здесь

    Json

    String

    Array(String)

    Json

    Работа с контейнером данных OzCapsula в мобильных SDK

    OzCapsula – это разработанный нами проприетарный формат, контейнер данных, обеспечивающий сквозную защиту и целостность информации в процессе передачи. Функциональность добавлена в версии 8.22. Для использования контейнера введены следующие методы:

    • createMediaCaptureScreen(request) запускает съемку видео и затем пакует готовый файл в контейнер;

    • AnalysisRequest.addContainer добавляет контейнер в запрос на анализ.

    Также необходим новый токен: session_token. Как его получить, мы рассказываем .

    hashtag
    Примеры кода

    С примерами кода вы можете ознакомиться, пройдя по ссылкам ниже. Также ниже размещены краткие иллюстративные примеры.

    hashtag
    Kotlin

    hashtag
    Swift

    hashtag
    Методы и поля

    hashtag
    addContainer

    Метод заменяет addAnalysis в структуре AnalysisRequest при использовании контейнера.

    Input

    hashtag
    createMediaCaptureScreen

    Запускает съемку видео и затем пакует снятое видео и сопутствующую ему информацию в контейнер данных.

    Входные параметры

    Выходные параметры

    hashtag
    public data class CaptureRequest

    Распознает запрос на съемку видео.

    hashtag
    public data class AnalysisProfile

    Содержит информацию о медиафайлах и анализах, которые на них назначены.

    hashtag
    public sealed class MediaRequest

    Содержит информацию о медиафайле.

    circle-exclamation

    Обратите внимание: параметры actionMedia и userMedia – взаимоисключающие, структура должна содержать только один из них.

    hashtag
    Список ошибок

    Если во время съемки возникнет ошибка, из-за которой пользователь не сможет завершить сценарий, контейнер данных будет удален.

    Если у вас остались вопросы, пожалуйста, свяжитесь с нами.

    роль
    роли пользователей
    флаг админа
    флаг сервисного пользователя
    тегов

    Параметр

    Тип

    Описание

    OzDataContainer

    bytearray[]

    Зашифрованный файл с медиа и сопутствующей информацией, результат вызова метода

    Параметр

    Type

    Description

    request

    Распознает запрос на съемку видео

    session_token

    String

    Токен для текущей сессии

    Параметр

    Type

    Description

    OzDataContainer

    bytearray[]

    Зашифрованный файл с медиа и сопутствующей информацией

    Параметр

    Тип

    Описание

    analysisProfileList

    List<>

    Список объектов с информацией о медиафайлах и анализах, которые на них назначены

    folderMeta (необязательно)

    Map<String, Any>

    Метаданные папки

    additionalMediaList (необязательно)

    List<>

    Дополнительные медиафайлы, которые вы хотите загрузить, но для анализа они не обязательны

    cameraPosition (optional)

    String

    front (по умолчанию) – передняя камера

    back – задняя камера

    Параметр

    Тип

    Описание

    mediaList

    List<>

    Список медиа для анализа

    type

    String ( (Android) or (iOS))

    Тип анализа

    params (необязательно)

    Map<String, Any>

    Дополнительные параметры анализа

    Параметр

    Тип

    Описание

    id

    String (UUID v4)

    Идентификатор медиафайла

    actionMedia

    (Android) or (iOS)

    Действие, которое пользователь выполняет на видео

    userMedia

    (Android) or (iOS)

    Файл не из нашего SDK, например, референсное фото или фото документа

    Ошибка

    Текст

    Описание

    session_token_is_empty

    Session token must not be empty

    Отсутствует session token – обязательный параметр

    data_container_internal_failure_1

    Internal failure occurred while processing the data container

    На устройстве недостаточно памяти

    • data_container_internal_failure_2

    • data_container_internal_failure_3

    • data_container_internal_failure_4

    Internal failure occurred while processing the data container

    Контейнер создать не удалось. Попробуйте еще раз

    data_container_internal_failure_1000

    Internal failure occurred while processing the data container

    Любая другая ошибка не из списка выше

    здесь
    Kotlinarrow-up-right
    Javaarrow-up-right
    Swiftarrow-up-right
    // захват и упаковка видео
    val referentPhoto = MediaRequest.UserMedia(OzAbstractMedia.OzDocumentPhoto(OzMediaTag.Blank, referentPhotoPath))
    val blinkVideo = MediaRequest.ActionMedia(OzAction.EyeBlink)
    val scanVideo = MediaRequest.ActionMedia(OzAction.Scan)
    
    val intent = OzLivenessSDK.createMediaCaptureScreen(
        CaptureRequest(
            listOf(
                AnalysisProfile(
                    Analysis.Type.BIOMETRY,
                    listOf(referentPhoto, scanVideo)
                ),
                AnalysisProfile(
                    Analysis.Type.QUALITY,
                    listOf(referentPhoto, scanVideo, blinkVideo)
                ),
            ),
        ),
        sessionToken
    )
    startActivityForResult(intent, REQUEST_CODE_SDK)
    
    // подписка на результаты
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE_SDK) {
            when (resultCode) {
                OzLivenessResultCode.USER_CLOSED_LIVENESS -> { /* user closed the screen */ }
                OzLivenessResultCode.SUCCESS -> {
                // result
                    val container = OzLivenessSDK.getContainerFromIntent(data)
                    ...
                }
                else -> {
                // обработка ошибок
                    val errorMessage = OzLivenessSDK.getErrorFromIntent(data)
                    ...
                }
            }
        }
    }
    
    // запуск анализов
    AnalysisRequest.Builder()
        .addContainer(container)
        .build()
        .run(
            object: AnalysisRequest.AnalysisListener {
                override fun onSuccess(result: RequestResult) {
                    ...
                }
                override fun onError(exception: OzException) {
                    ...
                }
            }
        )
    // захват и упаковка видео
    let mediaRequest = MediaRequest.actionMedia(.selfie)
    let profile = AnalysisProfile(mediaList: [mediaRequest],
                               type: .quality,
                               params: ["extract_best_shot" : true])
                 
    let request = CaptureRequest(analysisProfileList: [profile], cameraPosition: cameraPosition)
    self.ozLivenessVC = try OZSDK.createMediaCaptureScreen(self, request, sessionToken: sessionToken)
    self.present(ozLivenessVC, animated: true)
    
    // подписка на результат
    extension ViewController: LivenessDelegate {
       
      func onError(status: OZVerificationStatus?) {
          // обработка ошибок
      }
     // запуск анализов  
      func onResult(container: DataContainer) {
        let analysisRequest = AnalysisRequestBuilder()
        analysisRequest.addContainer(container)
         
        analysisRequest.run(statusHandler: { [weak self] state in
         },
                  errorHandler: { [weak self] error in
         // обработка ошибок
        }) { result in
    // результат анализа
            }
       }
    createMediaCaptureScreen
    CaptureRequest
    AnalysisProfile
    MediaRequest
    MediaRequest
    Type
    AnalysisType
    OzAction
    OzVerificationMovement
    OzAbstractMedia
    OZMedia

    Журнал изменений

    Журнал изменений для iOS.

    hashtag
    9.0.0 – 17.02.2026

    • Положение логотипа теперь можно настраивать (если изменение логотипа предусмотрено лицензией).

    • Жест Сканирование теперь озвучивается корректно.

    hashtag
    8.23.0 – 06.02.2026

    • Обновили sample.

    • Длинные антискам-сообщения теперь выводятся корректно.

    • SDK больше не вылетает, когда экран съемки вызывается несколько раз подряд с небольшими интервалами.

    hashtag
    8.22.0 – 09.12.2025

    • Исправили ошибку, из-за которой в SDK не отрабатывали связанные с лицензией callback-функции.

    • Повысили безопасность.

    hashtag
    8.21.0 – 21.11.2025

    • Исправили ошибку, из-за которой SDK на некоторых устройствах иногда мог не реагировать на действия пользователя.

    • Обновили SDK в рамках подготовки к внедрению новой функциональности, связанной с безопасностью.

    hashtag
    8.20.0 – 17.10.2025

    • Исправили ошибку, из-за которой SDK мог вылететь после съемки референтного фото с помощью камеры во время анализа Biometry.

    • Повысили безопасность.

    hashtag
    8.19.0 – 23.09.2025

    • Исправили анимацию жеста Сканирование.

    • Исправили ошибку, при которой SDK при инициализации в дебаг-режиме не вызывал completion.

    • Повысили безопасность.

    hashtag
    8.18.2 – 22.08.2025

    • Исправили ошибку, из-за которой SDK иногда вылетал при добавлении лицензии.

    hashtag
    8.18.1 – 06.08.2025

    circle-exclamation

    Настоятельно рекомендуем обновиться до этой версии.

    • Исправили ошибку с интеграцией через Swift UI.

    • SDK больше не вылетает на устройствах, где осталось мало свободного места.

    • Повысили безопасность и обновили телеметрию.

    hashtag
    8.17.0 – 12.06.2025

    • Повысили безопасность.

    hashtag
    8.16.2 – 22.04.2025

    • В соответствии с требованиями Apple обновили Xcode до версии 16.

    hashtag
    8.16.1 – 09.04.2025

    • Повысили безопасность.

    hashtag
    8.16.0 – 11.03.2025

    • Обновили логику авторизации.

    • Улучшили логику озвучивания подсказок.

    • SDK теперь сжимает медиафайлы, если их размер превышает 10 МБ.

    hashtag
    8.15.0 – 30.12.2024

    • Добавлен правильный порядок фокусировки для VoiceOver при включенной антискам-подсказке.

    • Добавлена ​​публичная настройка extract_action_shot в Демо Приложении.

    • Исправили ошибки.

    hashtag
    8.14.0 – 03.12.2024

    • Обновления доступности для пользователей с инвалидностью согласно требованиям WCAG: можно настроить озвучивание подсказок SDK и элементов управления.

    • Упростили прохождение проверки для жестов, включающих движение головы.

    • Исправили незначительные ошибки.

    hashtag
    8.13.0 – 11.11.2024

    • При использовании основной (задней) камеры яркость экрана теперь не меняется.

    • Исправили ошибку записи видео, появлявшуюся на некоторых моделях смартфонов.

    • Повысили безопасность и обновили телеметрию.

    hashtag
    8.12.2 – 24.10.2024

    • Улучшили работу SDK.

    hashtag
    8.12.1 – 30.09.2024

    • Добавили поддержку Xcode 16.

    • Повысили безопасность и обновили телеметрию.

    hashtag
    8.11.0 – 10.09.2024

    • Повысили безопасность.

    hashtag
    8.10.1 – 23.08.2024

    • Исправили ошибки.

    hashtag
    8.10.0 – 01.08.2024

    • Для работы SDK теперь нужен Xcode 15 и новее.

    • Повысили безопасность.

    • Исправили ошибки.

    hashtag
    8.9.1 – 16.07.2024

    • Улучшили работу SDK.

    hashtag
    8.8.3 – 11.07.2024

    • Улучшили работу SDK.

    hashtag
    8.8.2 – 25.06.2024

    • Исправили ошибки.

    hashtag
    8.8.1 – 25.06.2024

    • Обновили телеметрию.

    hashtag
    8.8.0 – 18.06.2024

    • Повысили безопасность.

    hashtag
    8.7.0 – 10.05.2024

    • Теперь вы можете установить iOS SDK через Swift Package Manager.

    • Добавили .

    • При попытке передать пустую строку в качестве аргумента для метода addFolderId теперь показывается информативная ошибка.

    hashtag
    8.6.0 – 10.04.2024

    • Синхронизировали с Android сообщения, которые SDK показывает после загрузки медиафайла.

    • Исправили баг с задержками запуска анализа, которые иногда возникали для анализа по одному кадру.

    hashtag
    8.5.0 – 06.03.2024

    • Длительность жеста Селфи теперь можно (размер видеофайла также изменится).

    • Вы можете заменить логотип Oz , если ваша лицензия это предусматривает.

    • Убрали паузу после жеста Сканирование.

    hashtag
    8.4.2 – 24.01.2024

    • Повысили безопасность.

    hashtag
    8.4.0 – 09.01.2024

    • Изменили поведение для отсутствующих переводов при добавлении новых ключей в локализацию: теперь вместо названия ключа показывается текст на языке по умолчанию (английском).

    • Исправили ошибки.

    hashtag
    8.3.3 – 11.12.2023

    • Улучшили работу механизмов лицензирования.

    hashtag
    8.3.0 – 17.11.2023

    • Добавили возможность использования мастер-лицензии, которая работает с любым bundle_id.

    • Исправили ошибку с мигающим фоном при съемке.

    hashtag
    8.2.1 – 11.11.2023

    • Исправили ошибки.

    hashtag
    8.2.0 – 30.10.2023

    • Добавили в структуру Analysis поле sizeReductionStrategy. Оно определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа.

    • Сообщения для получаемых из API ошибок теперь более информативны.

    hashtag
    8.1.1 – 09.10.2023

    • Если несколько анализов назначаются на папку одновременно, система отправляет их группой. Таким образом, выбирается “худший” результат среди всех анализов, а не последний назначенный. Прочитать про отправку анализов группой можно .

    • В анализе Liveness для количественного результата теперь берется максимальный из вычисленных. Прочитать о результате можно .

    hashtag
    8.1.0 – 07.09.2023

    • Обновили модель Liveness для проверки на устройстве.

    • Добавили португальский язык (бразильский вариант).

    • Вы теперь можете добавить язык или изменить текущие переводы самостоятельно. Как это сделать, описано .

    hashtag
    8.0.2 – 15.08.2023

    • Исправили ошибки, улучшили работу алгоритмов SDK.

    hashtag
    8.0.0 – 27.06.2023

    • Добавлен новый тип анализа – гибридный (сейчас работает только для Liveness). В случае спорных результатов анализа на устройстве проводится дополнительная проверка на сервере.

    • Обновлены модели для выполнения анализов на устройстве.

    • Обновили метод run.

    hashtag
    7.3.0 – 06.06.2023

    • Добавили настройки для фона подсказки.

    • Добавили новые формы рамки (круг, квадрат).

    • Добавили виджет для защиты от мошенничества и набор настроек к нему. С помощью этого виджета вы можете уведомлять пользователей, что ведется съемка видео для, например, отправления заявки на кредит. Таким образом вы сможете защитить пользователей, если мошенники попытаются убедить их подтвердить такой запрос.

    hashtag
    7.2.1 – 24.05.2023

    • Исправили ошибки, связанные с проведением однокадрового анализа на стороне сервера.

    hashtag
    7.2.0 – 18.05.2023

    • Улучшили работу алгоритмов SDK.

    hashtag
    7.1.6 – 04.05.2023

    • Исправлен баг с серверными анализами при отсутствии видео: если по каким-то причинам видео не загрузилось в папку (например, при потере интернет-соединения), папка будет пустой – без видео и назначенных анализов.

    hashtag
    7.1.5 – 03.04.2023

    • Улучшили работу Liveness-анализов на устройстве.

    hashtag
    7.1.4 – 24.03.2023

    • Обновили анимацию для солнечных очков / маски.

    • Исправили ошибку с добавлением анализа.document.

    hashtag
    7.1.2 – 21.02.2023

    • Обновили версию TensorFlow до 2.11.

    • Исправили несколько багов, в том числе ошибки биометрической проверки, возникавшие на некоторых моделях телефонов.

    hashtag
    7.1.1 – 06.02.2023

    • Добавили возможность управлять цветом анимации.

    hashtag
    7.1.0 – 20.01.2023

    • Обновили модель для выполнения анализов.

    • Добавили метод uploadMedia в AnalysisRequest. Метод addMedia больше не используется.

    hashtag
    7.0.0 – 08.12.2022

    • Значительно расширили и обновили дизайн. Если вы хотите вернуть дизайн из прошлых версий, соответствующие настройки описаны .

    hashtag
    6.7.0

    • Синхронизировали ответы методов run с Android SDK, теперь метод возвращает .

    hashtag
    6.4.0

    • Синхронизировали нумерацию версий с Android SDK.

    • Добавили новое поле params в структуру Analysis – с его помощью можно задавать дополнительные параметры, например, для извлечения на сервере лучшего кадра. Алгоритм "лучший кадр" выбирает из видеозаписи наиболее качественный и удачный кадр с лицом.

    hashtag
    3.0.1

    • Жесты отдаления и приближения больше не поддерживаются.

    hashtag
    3.0.0

    • Добавили новую упрощенную структуру анализа AnalysisRequest.

    hashtag
    2.3.0

    • Добавили методы для локального анализа: runOnDeviceLivenessAnalysis и runOnDeviceBiometryAnalysis.

    • Версию для установки можно выбрать: стандартная установка дает доступ ко всем функциям, а в версии core (OzLivenessSDK/Core) отсутствует возможность делать анализы локально на устройстве.

    hashtag
    2.2.3

    • Добавили турецкий язык.

    hashtag
    2.2.1

    • Добавили киргизский язык.

    • Добавили Completion Handler для результатов анализа.

    • Добавили в телеметрию передачу Error User Info, теперь можно узнавать подробности об ошибке, которая происходит в работе анализа.

    hashtag
    2.2.0

    • Добавили локальные анализы – теперь анализ можно делать прямо на устройстве.

    • Добавили рамки для лица, теперь их две – овал и прямоугольник.

    • Теперь поддерживаем Xcode 12.5.1+.

    hashtag
    2.1.4

    • Добавили конфигурацию SDK через лицензии.

    hashtag
    2.1.3

    • Добавили жест One Shot.

    • В OZVerificationResult добавили bestShotURL (содержит изображение лучшего кадра) и preferredMediaURL (содержит медиаконтейнер с url лучшего видео для назначения анализа)

    hashtag
    2.1.2

    • Авторизационные сессии теперь пролонгируются автоматически.

    • Обновили интерфейсы авторизации.

    hashtag
    2.1.1

    • Добавили казахский язык.

    • Добавили тексты для ошибок лицензирования.

    hashtag
    2.1.0

    • Сетевые запросы теперь можно отменить.

    • Для лицензии можно указать Bundle.

    • Добавили параметризации анализов documentAnalyse.

    hashtag
    2.0.0

    • Добавили поддержку лицензий.

    • Теперь поддерживаем Xcode 12. 11 поддерживать перестали.

    • Исправили ошибку documentAnalyse – анализы не назначались без указания analyseStates. Теперь все корректно.

    Обновили зависимости.
    Жесты с движениями головы теперь обрабатываются корректно.
  • Повысили безопасность.

  • Повысили безопасность.
    Обновили телеметрию.

    Исправили ошибки.

    Обновили код в Readme.mdarrow-up-right.
  • Повысили безопасность и обновили телеметрию.

  • Настройка
    toFrameGradientColor
    для кастомизации подсказки
    hintAnimationCustomization
    больше не используется. Вместо нее используйте
    hintGradientColor
    .
  • Вернули поддержку iOS 11.

  • Если медиафайл по каким-то причинам не загрузился, система теперь повторяет загрузку.

  • Добавили новый метод для получения идентификатора телеметрии (логирования): getEventSessionId.

  • Методы setPermanentAccessToken, configure и login больше не используются. Вместо них, пожалуйста, используйте метод setApiConnection.

  • Метод setLicense(from path:String) больше не используется. Вместо него, пожалуйста, используйте метод setLicense(licenseSource: LicenseSource).

  • Исправили ошибки и улучшили работу SDK.

  • Добавили новые структуры RequestStatus (статус анализа), ResultMedia (статус анализов для одного медиафайла) и RequestResult (сводный результат анализа для всех медиа).

  • Структура OzAnalysisResult больше не используется; вместо нее – обновленная структура AnalysisResult.

  • Для объекта OZMedia теперь можно добавить дополнительные теги не из списка основных.

  • Длительность видео для жеста “Селфи” снижена до 0,7 секунд, соответственно, уменьшились размер файла и время его загрузки на сервер.

  • Текст подсказки теперь может выходить за границы рамки для лица по горизонтали (для основной камеры).

  • Прекращена поддержка методов:

  • AnalysisRequest.run

    addMedia

    uploadMedia

    Синхронизировали значения настроек кастомизации по умолчанию с Android.

  • Добавили испанский язык.

  • iOS 11 больше не поддерживается; минимальная необходимая версия – 12.

  • Исправили ошибку в жесте Комбо.
  • Добавили кнопку для сброса настроек языка и темы SDK.

  • Увеличили тайм-аут сетевых запросов до 90 с.

  • Добавили возможность управлять размером значка анимации.

  • Исправили баги.

  • Исправили ошибки локализации.
  • Поменяли жест Комбо.

  • Теперь можно запускать проверку Liveness на устройстве для анализа изображений, снятых вне SDK.

  • Добавили универсальный метод для загрузки данных на сервер и немедленного запуска анализов: uploadAndAnalyse.

  • Дополнили процесс лицензирования: теперь лицензию можно указать при инициализации SDK. Воспользуйтесь методом OZSDK(licenseSources: [LicenseSource], completion: @escaping ((LicenseData?, LicenseError?) -> Void)), где LicenseSource – путь до лицензии, LicenseData – информация о лицензии.

  • Добавили метод setLicense для принудительной установки лицензии.

  • При запуске локальной проверки теперь можно указать тип камеры: front / back.

    Исправили ошибки при сборках проекта. (Xcode 12.4 / Cocoapods 1.10.1).

    Поправили ошибки в сборе логов.

    Удаленный метод

    Замена

    analyse

    AnalysisRequest.run

    addToFolder

    uploadMedia

    documentAnalyse

    AnalysisRequest.run

    uploadAndAnalyse

    AnalysisRequest.run

    runOnDeviceBiometryAnalysis

    AnalysisRequest.run

    образец кода для SwiftUIarrow-up-right
    менять
    своим
    здесь
    здесь
    здесь
    список настроек кастомизации SDK
    здесь
    массив результатов анализов

    runOnDeviceLivenessAnalysis

    Журнал изменений

    Журнал изменений API Core.

    hashtag
    6.4.2-18 – 12.02.2026

    • Нарушение обратной совместимости: чтобы подключение при использовании S3 не пропадало, установите OZ_STATIC_S3_BUCKET_URL="None".

    • Контейнер теперь можно отправить в уже существующую папку. Используйте метод POST api/folders/{folder_id}/media.

    • Повысили производительность анализа Collection.

    • Слишком длинные видео теперь можно обрезать. Установите параметру OZ_FFMPEG_VIDEO_CROPPING_ENABLED значению true для автоматической обрезки всех видео длиннее OZ_VIDEO_DURATION_MAX. Записи об обрезке сохраняются в логах.

    • При невозможности обработки контейнера (ошибка 14) для упрощения расследования мы теперь сохраняем и данные соответствующей заявки.

    • Для невалидных контейнеров, чтобы удобнее было искать информацию, теперь сохраняем в логах API folder_id.

    • При удалении папки в конфгурациях local-local и local-s3 файлы статики теперь удаляются корректно.

    hashtag
    6.4.1-40 – 24.12.2025

    • Добавили новую функциональность: проприетарный формат передачи данных OzCapsula.

    • Исправлена проблема с периодическими ложными отказами при использовании медиа, полученных из Web SDK.

    • Анализ Collection теперь игнорирует изображения с тегом photo_id_back.

    hashtag
    6.4.0 – 24.11.2025

    circle-info

    Только для SaaS.

    • Обновили API в рамках подготовки к внедрению новой функциональности.

    hashtag
    6.3.5 – 03.11.2025

    • Исправили ошибки, из-за которых по запросу GET /api/folders/ могли возвращаться некорректные результаты.

    hashtag
    6.3.4 – 20.10.2025

    • Обновили API в рамках подготовки к внедрению новой функциональности.

    • Исправили ошибки.

    hashtag
    6.3.3 – 29.09.2025

    • Исправили ошибку, из-за которой при отправке поврежденного видео с помощью методов POST /api/instant/folders/ и POST /api/folders/ система возвращала “500 Internal Server Error”. Теперь возвращается “400 Bad Request”.

    • Обновили API в рамках подготовки к внедрению новой функциональности.

    hashtag
    6.3.0 – 05.08.2025

    • API 6 теперь поддерживает новые : может извлекать из видеороликов, на которых пользователь делает жесты, кадры с действиями.

    • Вы можете убрать права администратора у пользователя с ролью CLIENT ADMIN, изменив его роль на CLIENT с помощью метода PATCH /api/users/{{user_id}}.

    • Теперь вы можете создать сервисный токен для пользователя с ролью OPERATOR.

    hashtag
    6.2.5 – 18.06.25

    • Оптимизировали API и улучшили его производительность.

    hashtag
    6.2.3 – 02.06.25

    • Анализы теперь могут выполняться параллельно друг другу. Для включения опции установите значение true параметру OZ_ANALYSE_PARALLELED_CHECK_MEDIA_ENABLED в файле config.py (значение по умолчанию – false).

    • Вы можете выключить авторизацию для Instant API (режима работы без сохранения данных). Добавьте в файл конфигурации config.py параметр OZ_AUTHORIZE_DISABLED_STATELESS

    hashtag
    6.0.1 – 30.04.25

    • Оптимизировали хранилище и базу данных.

    • Добавили новый способ отправки данных на анализ: . Этот запрос включает в себя создание папки и назначение анализов в одном и том же запросе – все необходимые данные указываются в payload.

    • Добавили новый режим работы API, при котором данные запроса и ответа не сохраняются ни локально, ни в какой-либо базе данных. может использоваться и сам по себе, и с другими компонентами API.

    hashtag
    5.3.1 – 24.12.2024

    • Оптимизировали потребление серверных ресурсов при проведении биометрического анализа.

    hashtag
    5.3.0 – 21.11.2024

    • API теперь может извлекать из видеороликов, на которых пользователь делает жесты, кадры с действиями. Доработка выполнена в связи с вводом новых регуляторных требований к биометрической идентификации в Казахстане. Требования к версиям других компонентов описаны .

    • Подготовили новый шаблон отчета, который также соответствует этим требованиям.

    • Миниатюры для нового отчета генерируются на основе кадров с действиями.

    hashtag
    5.2.0 – 06.09.2024

    • Обновили коллекцию Postman. Опубликовали новую коллекцию и на .

    • Добавили метод проверки настроек таймзоны: GET {{host}}/api/config

    • Добавили параметры к методу GET {{host}}/api/event_sessions:

    hashtag
    5.1.1 – 16.07.2024

    • Обновления безопасности.

    hashtag
    5.1.0 – 20.03.2024

    • Добавили возможность сравнения лица с большой базой фотографий, содержащей миллион фото и более, – Face Identification 1:N.

    • Анализ Liveness (QUALITY) теперь игнорирует фото с тегами photo_id, photo_id_front или photo_id_back.

    hashtag
    5.0.1 – 16.07.2024

    • Обновления безопасности.

    hashtag
    5.0.0 – 17.11.2023

    • Анализ Liveness (QUALITY) теперь работает и с изображениями.

    • Исправили ошибку, из-за которой анализ Liveness мог завершиться с успехом при отсутствии медиафайлов в папке (заявке).

    • Для extract_best_shot изменили значение по умолчанию на True

    hashtag
    4.0.8-patch1 – 16.07.2024

    • Обновления безопасности.

    hashtag
    4.0.8 – 22.05.2023

    • Настроили авторотацию логов.

    • Добавили консольную команду для удаления пользователя.

    • Генерацию предпросмотра видео теперь можно отключить.

    hashtag
    4.0.2 – 13.09.2022

    • Система теперь удаляет ненужные кадры, оставшиеся после раскадровки видео.

    • Добавили новые методы GET and POST для media/<media_id>/snapshot/

    • Заменили шаблон отчета по умолчанию.

    hashtag
    3.33.0

    • Модули Photo Expert и KYC удалены.

    • Обновили конечную точку для изменения пароля пользователя: POST users/user_id/change-password вместо PATCH.

    hashtag
    3.32.1

    • Доступен лог для Celery.

    hashtag
    3.32.0

    • Добавили в параметры запроса Folder [LIST] фильтры: analyse.time_created, analyse.results_data для анализа Documents, results_data для анализа Biometry, results_media_results_data для анализа QUALITY. Для включения фильтра установите True в параметре запроса with_results_media_filter.

    hashtag
    3.31.0

    • Добавили новый атрибут для пользователей – is_active (по умолчанию True). Если выставлено False, пользователь не может совершать никакие действия.

    • Добавили новую ошибку, которая выводится в ответ на попытку заблокированного пользователя что-либо сделать.

    hashtag
    3.30.0

    • Добавили превью наборов изображений.

    • Теперь наборы можно сохранять на диск через атрибуты original_local_path, original_url.

    • Добавили атрибут original_info

    hashtag
    3.29.0

    • Добавили “проверку здоровья” системы - метод GET api/healthcheck. Можно задать перечень имен / очередей задач на проверку активности.

    hashtag
    3.28.1

    • Поправили ссылку на миниатюру для набора изображений.

    hashtag
    3.28.0

    • Первое изображение в наборе теперь устанавливается как миниатюра для превью набора.

    hashtag
    3.27.0

    • Поменяли политики – максимальное количество попыток анализа увеличили до 3 и ввели настраиваемую задержку.

    • Поменяли алгоритм вызова callbacks.

    • Переработали и описали инструменты командной строки.

    hashtag
    3.25.0

    • Поменяли подметод и метод для удаления персональных данных – с delete_pi на /pi и с POST на DELETE соответственно.

    hashtag
    3.23.1

    • Улучшили алгоритм удаления персональных данных.

    • В папки, которые были очищены, теперь нельзя добавлять медиа.

    hashtag
    3.23.0

    • Поменяли название подметода авторизации с auth на auth_restore.

    • Добавили тег video_selfie_oneshot.

    • Добавили настройки валидации пароля.

    hashtag
    3.22.2

    • Добавили ошибку, которая появляется при попытке синхронизировать пустые коллекции.

    hashtag
    3.22.0

    • Добавили параметр fields_to_check к анализу документов (по умолчанию проверяет все поля).

    • Добавили параметр double_page_spread к анализу документов (по умолчанию включен).

    hashtag
    3.21.3

    • Поправили синхронизацию коллекций.

    hashtag
    3.21.0

    • Теперь можно продлить токен авторизации с помощью expire_token.

    hashtag
    3.20.1

    • Добавили поддержку application/x-gzip.

    hashtag
    3.20.0

    • Переименовали shots_set.images в shots_set.frames.

    hashtag
    3.18.0

    • Добавили набор функций по управлению сессиями пользователя.

    • Пользователи могут менять владельцев заявок (в соответствии со своими доступами).

    • Поменяли правила зависимостей.

    hashtag
    3.16.0

    • Переместили функционал синхронизации коллекций в oz_core.

    hashtag
    3.15.3

    • Упростили работу с наборами изображений. Один набор – один архив.

    hashtag
    3.15.2

    • Улучшено распознавание документов для Dockered-версии.

    hashtag
    3.15.1

    • Переместили проверку тега ориентации в анализ Quality.

    hashtag
    3.15.0

    • Добавили шаблон отчета по умолчанию для ролей Admin и Operator.

    hashtag
    3.14.0

    • Обновили биометрическую модель.

    hashtag
    3.13.2

    • Исправили ошибку с созданием объекта набора изображений без изображений.

    • Добавили новый формат обмена данными для модуля распознавания документов.

    hashtag
    3.13.1

    • Если для персон в коллекции проводились какие-либо анализы, коллекцию теперь нельзя удалить.

    hashtag
    3.13.0

    • Добавили к анализам временные метки time_task_send_to_broker, time_task_received, time_task_finished.

    hashtag
    3.12.0

    • Добавили новый механизм авторизации – соединение с Active Directory через LDAP.

    hashtag
    3.11.0

    • Добавили новый тип медиа в заявку: "shots_set"

    • Персону в коллекции теперь нельзя удалить, если с ней производились какие-либо анализы.

    hashtag
    3.10.

    • Переименовали поле заявки resolution_suggest в operator_status.

    • Добавили к заявке текстовое поле operator_comment.

    • Доступ на редактирование полей заявки operator_status и operator_comment есть у Admin, Operator, Client Service, Client Operator и Client Admin.

    hashtag
    3.9.0:

    • Исправили удаление отчетов – теперь они удаляются при удалении их автора.

    hashtag
    3.8.1

    • Поправили доступы – Client теперь может просматривать только свой профиль.

    hashtag
    3.8.0

    • Client Operator теперь может редактировать только свой профиль.

    • Client больше не может удалять свои заявки, любые медиа, отчеты или анализы.

    • Client Service может создавать персон в коллекциях и просматривать отчеты в рамках компании.

    hashtag
    3.7.1

    • У ролей Client, Client Admin, Client Operator теперь есть доступы на просмотр профилей пользователя только внутри компании.

    • Запустили альфа/бета-тестирование.

    • Теперь поддерживаем заголовок с датой просрочки токена авторизации.

    hashtag
    3.7.0

    • Добавили роль Client Operator – это Client Admin, но без доступа к управлению аккаунтом и компанией.

    • И Client Admin, и Client Operator могут менять статус анализа.

    • Создавать, редактировать и удалять что-либо в моделях Collection и CollectionPerson в рамках компании теперь могут только Admin и Client Admin.

    Журнал изменений

    Журнал изменений Web SDK.

    hashtag
    1.9.2-15 – 30.12.2025

    • Теперь можно менять внешний вид овала: добавили класс . Поддерживаются все стандартные инструменты CSS.

    Внесены внутренние улучшения.

    Повысили безопасность.

    и установите ему значение
    true
    (значение по умолчанию –
    false
    ).
  • Исправили ошибку, из-за которой видео в MP4 могло не проигрываться после скачивания из SDK.

  • Для запросов без авторизации теперь возвращается корректная ошибка.

  • Исправили ошибку, из-за которой временами появлялась ошибка 500. Это происходило, если в видео было слишком мало кадров. Добавили соответствующую проверку и сделали описания ошибок более информативными.

  • Улучшили производительность, сделали удобнее процесс установки, повысили безопасность.

  • Теперь можно комбинировать рабочие системы, использующие асинхронные методы или Celery worker (локальная обработка, обработка через Celery). Для каждой из комбинаций добавлена поддержка хранения в S3.

  • Повысили безопасность.

  • Прекратили поддержку RAR-архивов.

  • Временно не поддерживаем Active Directory. В будущих релизах планируем вернуть эту функциональность.

  • Длительность анализа теперь считается точнее.

  • Для роли CLIENT заменили флаги is_admin и is_service новыми ролями: CLIENT ADMIN и CLIENT SERVICE соответственно. Для установки роли воспользуйтесь параметром user_type.

  • Чтобы выписать сервисный токен для пользователя с помощью метода {{host}}/api/authorize/service_token/, убедитесь, что этому пользователю назначена роль CLIENT SERVICE. Токен для другого пользователя с такой ролью можно создать с помощью {{host}}/api/authorize/service_token/{user_id}.

  • Убрали атрибуты коллекции и персоны из COLLECTION.analysis.

  • Мы больше не записываем кадры в SHOTS_SET как отдельные объекты. Для сохранения одного из кадров вашего видео вы можете воспользоваться опцией "Лучший кадр".

  • Больше не поддерживаем установку через Podman.

  • Обновили методы API: Oz API 6.0arrow-up-right.

  • Заменили параметры и точки входа:

  • can_start_analysis_quality

    expire_date в {{host}}/api/authorize/auth и {{host}}/api/authorize/refresh

    access_token.exp из payload

    session_id в {{host}}/api/authorize/auth и {{host}}/api/authorize/refresh

    token_id

  • 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 не мог установить новый пароль для пользователя из своей компании.

  • .
  • Архивы RAR больше не поддерживаются.

  • По умолчанию в analyses.results_media.results_data теперь один параметр: confidence_spoofing. Если для обратной совместимости нужны все три (confidence_replay, confidence_liveness и confidence_spoofing), это можно настроить.

  • Обновили PDF-отчет, который грузится по умолчанию.

  • Название PDF-отчета теперь содержит folder_id.

  • Токен доступа для роли ADMIN теперь действителен 5 лет.
  • Добавили идентификатор папки folder_id к названию отчета.

  • Исправили ошибки и оптимизировали работу API.

  • Превью для набора кадров теперь показывается с исходным соотношением сторон.
  • 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 добавили журналирование.

  • Обновили алгоритм удаления компании.

  • Улучшили логику обработки черных списков.

  • Исправили несколько багов.

  • для набора изображений – в нем хранятся сумма md5, размер, mime-тип.
  • Исправили отчет для наборов изображений.

  • Провели рефакторинг модулей.

    Добавили задержки для auth, rest_unauthorized, rps_with_token (OZ_THROTTLING_RATES в настройках, по умолчанию отключено).

  • Теперь можно проверять доступы пользователя к статичным файлам (OZ_USE_PERMISSIONS_FOR_STATIC в настройках, по умолчанию – False).

  • Добавили новый подметод для заявки - /delete_pi. С его помощью можно удалить в заявке все персональные данные и связанные с ними анализы.

  • Поправили баг с продлением авторизации.

    Доступ на удаление заявки, медиа из заявки, шаблонов отчетов и их вложений, самих отчетов и анализов теперь есть только у Admin и Client Admin (в рамках компании).

    Добавили поддержку модуля распознавания документов для стенделона и Docker.

    При создании отчета по заявке теперь проверяются доступы пользователя к шаблонам.

  • Поправили код статуса, который возвращается при создании коллекции, с 200 на 201.

  • PATCH users/{{user_id}}/ для смены пароля

    POST /api/users/{{user_id}}/change-password

    DELETE images|media/<media_id> для удаления фото персоны из коллекции

    DELETE collections/<collection_id>/persons/<person_id>/images/<media_id>/

    image_id, video_id и shots_set_id

    media_id

    analyse_id

    analysis_id

    can_start_analyse_biometry

    can_start_analysis_biometry

    can_start_analyse_collection

    can_start_analysis_collection

    can_start_analyse_documents

    can_start_analysis_documents

    требования регулятора в Казахстане
    единый запрос
    Instant API
    здесьarrow-up-right
    здесь
    https://apidoc.ozforensics.com/arrow-up-right

    can_start_analyse_quality

    Добавили поддержку для kk как кода для казахского языка дополнительно к kz. OzLiveness.set_lang('kk') и OzLiveness.set_lang('kz') применяются одинаково.
  • Состояние методов OzLiveness.hide() и show() теперь сохраняется между сессиями, больше не нужно вызывать их каждый раз.

  • Добавили коллбэки:

    • on_media_stream_start вызывается при успешном завершении getUserMedia,

    • on_media_stream_stop вызывается после окончания захвата видео.

  • Promise ready() теперь инициализирует плагин. Добавили методы:

    • OzLiveness.ready(): Promise<void> возвращает Promise, который выполняется после загрузки всех ресурсов плагина,

    • OzLiveness.isReady(): Boolean проверяет статус инициализации.

  • Исправили ошибку, из-за которой на экране между обработкой данных и загрузкой возникал пустой loader.

  • При вводе неправильного кода языка SDK теперь показывает ошибку корректно.

  • Локализация теперь работает корректно и при первом вызове open() call.

  • Повысили безопасность.

  • hashtag
    1.8.1 – 09.10.2025

    • Web SDK больше не вылетает с ошибкой, когда вы вызываете метод OzLiveness.hide() сразу после запуска плагина.

    • Улучшили производительность.

    • Повысили безопасность.

    hashtag
    1.8.0 – 26.09.2025

    • Web Plugin теперь можно запустить в оконном режиме. Установите нужное значение parent_container в OpenOptions: parent_container: string | HTMLElement.

    • Добавили возможность настройки переходов для loader. Соответствующие настройки приведены здесь.

    • SDK теперь лучше работает с жестами наклона и подъема головы.

    • Исправлена проблема с чрезмерным количеством сообщений об ошибках в консоли.

    • Обновили телеметрию.

    • Повысили безопасность.

    hashtag
    1.7.15 – 12.08.2025

    • Вы можете настроить собственный loader вместо используемого по умолчанию. Соответствующие настройки приведены здесь.

    • Вы можете управлять поведением SDK, если получение доступа к камере занимает слишком много времени. Воспользуйтесь настройками get_user_media_promise_timeout_*, приведенными здесь.

    • Повысили безопасность и улучшили телеметрию.

    hashtag
    1.7.14-89-1 – 09.07.2025

    • Критические изменения: мы больше не передаем в коллбэках значения оценок. confidence_spoofing нужно заменить на 0 для SUCCESS и на 1 для других статусов.

    • Исправили ошибку чтения свойств image_data_tensor.

    • Исправили ошибку, из-за которой OzLiveness иногда вызывался позже, чем нужно.

    • Обновление безопасности.

    hashtag
    1.7.14 – 13.06.2025

    • Добавили поддержку API 6.0.

    • При настройке конфигурации сервера переменные в заголовках CORS теперь указываются без кавычек.

    • Добавили новый параметр auth , который указывает, используется ли авторизация, и если да, то каким способом:

      • true (по умолчанию) – включена авторизация на базе генерируемого ключа доступа;

      • user:pass – включена авторизация на базе логина и пароля;

      • false – авторизация выключена.

    • Добавили возможность .

    • Настройки цвета для 3D-маски теперь работают корректно.

    • Зеркалирование при отключенном use_for_liveness теперь также работает корректно.

    • Поправили ошибку, из-за которой не выполнялось сканирование документа в плагине.

    • Улучшили работу озвучки SDK: экранные дикторы читают подсказки по мере прохождения проверок (доступ к камере, загрузка и обработка данных, запрос результата) правильнее и при переключении подсказок реагируют быстрее.

    • Добавили возможность проверки лицензии: [GET] /check_license.php.

    • Уменьшили размер загружаемых компонентов.

    • Результаты анализа в коллбэке on_complete при result_mode: full теперь передаются корректно.

    • Исправили ошибку, из-за которой кнопка переключения камеры могла не отображаться.

    • Передняя камера больше не отзеркаливает действия пользователя.

    • Улучшили обработку ошибок.

    • SDK теперь лучше работает на устройствах с низкой производительностью.

    • Добавили проверку на закрытые глаза для жеста Scan.

    • Исправили ошибки, повысили безопасность, обновили телеметрию и улучшили работу SDK в целом.

    hashtag
    1.6.15 – 27.12.2024

    • Упрощены проверки, требующие от пользователя движения головы: актуально для жестов поворота головы влево или вправо, наклона головы вперед или назад.

    • Пороговая дистанция для жестов, связанных с движением головы, была снижена: актуально для жестов поворота головы влево или вправо, наклона головы вперед или назад.

    • Поведением приложения при обнаружении открытых инструментов разработчика теперь можно управлять.

    • Теперь можно настроить сигнатуры методов с помощью контрольной суммы измененной функции, чтобы сделать их доверенными.

    • Исправлена ошибка, из-за которой на экране съёмки после захвата жестов с движением головы неверно отображалась стрелка.

    • Исправлена ошибка, из-за которой на экране съёмки при отображении фразы "Отлично!" исчезал овал.

    • Улучшен поиск .

    • Обновления безопасности.

    hashtag
    1.6.12 – 18.10.2024

    • Обновления безопасности.

    • Исправили ошибку, из-за которой видео могло некорректно создаваться из последовательности кадров.

    hashtag
    1.6.0 – 24.06.2024

    • Коллбэк-функция 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.

    hashtag
    1.5.3 – 28.05.2024

    • Если доступ к камере отсутствует в течение длительного времени, пользователям теперь показывается инструкция, как его включить. Для всех браузеров, кроме Facebook, отображается инструкция по умолчанию, для Facebook – отдельная.

    • Добавили несколько записей в файл локализации Web SDK. Новые ключи локализации:

      • accessing_camera_switch_to_another_browser,

      • error_camera_timeout_instruction,

      • error_camera_timeout_title,

      • error_camera_timeout_android_facebook_instruction.

    hashtag
    1.5.0 – 05.05.2024

    • Улучшили работу с картоматами: расстояние, на котором может распознаваться лицо пользователя, увеличено.

    • Добавили в 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

    • Если SDK не может найти перевод для какого-либо из имеющихся ключей, соответствующее сообщение будет показываться на английском.

    • Бессерверный Web SDK теперь можно распространять через Node Package Manager.

    • Демонстрацию ошибок API в модальном окне теперь можно отключить. Установите параметру disable_adapter_errors_on_screen значение True.

    • Мобильные браузеры теперь используют основную (заднюю) камеру для съемки документов.

    • Обновили образцы кода.

    • Исправили ошибку, когда при повторной попытке пользователя пройти сценарий после неудачи 3D-маска не реагировала на лицо.

    • Обновления безопасности и журналирования.

    hashtag
    1.4.3 – 15.04.2024

    • Исправили ошибку, из-за которой при съемке лица в горизонтальной ориентации на мобильных устройствах не показывалось предупреждение о необходимости поворота устройства вертикально.

    • У некоторых пользователей ранее наблюдались зависания при использовании WebView. Теперь в этих случаях пользователь может нажать кнопку, чтобы продолжить работу с приложением. В связи с этим обновили файл со строками в разделе локализации. Ключ: tap_to_continue.

    hashtag
    1.4.2 – 14.03.2024

    • Расширили возможности отладки.

    hashtag
    1.4.1 – 27.02.2024

    • Крупные обновления безопасности: улучшили защиту от виртуальных камер и модификации 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

    hashtag
    1.4.0 – 07.02.2024

    • 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" />), чтобы избежать конфликтов.

    • Исправлены некоторые ошибки и улучшено журналирование.

    hashtag
    1.3.1 – 12.01.2024

    • Улучшили защиту против инъекционных атак.

    • Заменили идентификатор языка для бразильского португальского с pt на pt-br согласно стандарту ISO.

    • Удалили конфигурационный параметр lang_default.

    • Прозрачность 3D-маски теперь можно настраивать.

    • Добавили возможность использования мастер-лицензии, которая работает без ограничений по домену.

    • Добавили параметр master_license_signature в параметры конфигурации Web Adapter.

    • Исправили ошибки.

    hashtag
    1.2.2 – 15.12.2024

    • Улучшили работу SDK.

    hashtag
    1.2.1 – 04.11.2023

    • Добавили 3D-маску, которая заменяет овал при съемке видео нашим SDK. Для включения маски установите конфигурационному параметру load_3d_mask значение true.

    • Обновили телеметрию (журналирование).

    hashtag
    1.1.5 – 27.10.2023

    • Обновления журналирования.

    hashtag
    1.1.4 – 10.2023

    • Обновления безопасности.

    hashtag
    1.1.3 – 29.09.2023

    • Улучшили работу SDK.

    hashtag
    1.1.2 – 21.09.2023

    • Улучшили работу SDK.

    hashtag
    1.1.1 – 29.08.2023

    • Исправили ошибки.

    hashtag
    1.1.0 – 24.08.2023

    • Изменили сигнатуру коллбэка on_error(): теперь он возвращает не только код ошибки, но и сообщение, а также идентификатор телеметрии для журналирования.

    • Добавили параметр конфигурации для режима debug. Если он принимает значение True, в Web SDK можно открыть страницу /debug.php, на которой размещена информация о текущих конфигурации и лицензии.

    • Исправили несколько ошибок и улучшили журналирование.

    hashtag
    1.0.2 – 06.07.2023

    • Добавили возможность выбора камеры при запуске плагина (если на устройстве их несколько).

    hashtag
    1.0.1 – 01.07.2023

    • Полностью переделали дизайн для SDK и демо, в том числе добавили настройки защиты от мошенников: при включении опции во время записи видео появляется дополнительное сообщение. Новые возможности настройки интерфейса описаны здесь.

    • Перевели SDK на португальский, испанский и казахский языки.

    • Добавили жест Комбо.

    • Добавили шкалу прогресса для загрузки медиа.

    • Жесты Zoom in и Zoom out больше не поддерживаются.

    • Съемка видео в альбомной ориентации теперь работает корректно для планшетов.

    • Убрали опцию lang_allow из файла конфигурации Web Adapter.

    hashtag
    0.9.1 – 01.03.2023

    • В архитектуре capture при обнаружении виртуальной камеры параметр additional_info теперь отображается внутри списка from_virtual_camera.

    • Добавили возможность обрезать кадр с лицом без потери качества.

    • Координаты "ориентиров" лица для архитектуры capture теперь передаются корректно.

    hashtag
    0.9.0 – 20.02.2023

    • Улучшили качество съемки;

    • Значительно переработали лицензирование:

      • добавили описание ошибок, теперь понятно, что и почему произошло;

      • теперь можно указывать лицензию в 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 выводятся фактические параметры конфигурации.

    hashtag
    0.7.6 – 27.09.2022

    • Изменили расширение некоторых файлов системы Oz Forensics с .bin на .dat.

    hashtag
    0.7.5

    • Ссылки на дополнительные скрипты теперь формируются с использованием адреса основного скрипта.

    hashtag
    0.7.4

    • Добавили возможность распространять Web SDK только статическими файлами, без адаптера (в режиме capture).

    • Web SDK теперь может работать с CDN.

    • Теперь можно запускать несколько экземпляров Oz Liveness Web Plugin на разных страницах, в этом случае необходимо указать на этих страницах путь для загрузки скриптов.

    circle-info

    При обновлении с 0.4.0 лицензию необходимо также обновить.

    hashtag
    0.4.1

    • Исправили ошибку экрана съемки.

    hashtag
    0.4.0

    • Добавили лицензирование, для получения лицензии необходим origin.

    • Внешний вид Web SDK теперь можно настраивать.

    hashtag
    0.3.2044

    • Исправили ошибки интеграции с Angular.

    hashtag
    0.3.2043

    • Исправили ошибку с отсутствием секции IMAGE_FOLDER в JSON-ответе при включенном lossless-кадре.

    hashtag
    0.3.2042

    • Исправили ошибки работы с библиотекой ravenjs.

    hashtag
    0.3.2041

    • Рамку для фото документов теперь можно настроить.

    hashtag
    0.3.2012

    • Повысили безопасность SDK.

    hashtag
    0.3.2009 (0.4.8)

    • Названия всех доступных пользователю камер теперь добавляем в метаинформацию.

    hashtag
    0.3.2005 (0.4.8)

    • В формате видео / режиме zip теперь можно загружать lossless-кадр.

    • Best Shot теперь работает корректно.

    hashtag
    0.3.2004 (0.4.8)

    • В ответах сервера код ошибки и расшифровка теперь передаются раздельно.

    hashtag
    0.3.2001 (0.4.6)

    • Если режим для SDK настроен в переменных окружения architecture, api_url, то он применяется в настройках автоматически.

    • В режиме lite можно выбрать best frame для любого действия.

    • В режиме lite фото, отправленное через API, получает статус on_complete только при успешном liveness.

    • Можно управлять cors из переменных окружения (по умолчанию заголовки cors не добавляются).

    hashtag
    0.3.1999

    • Добавили значение folder для result_mode: оно возвращает тот же ответ, что и значение status, но с folder_id.

    hashtag
    0.3.1997 (0.4.5)

    • Оптимизировали шифрование: теперь шифруем только метаданные, необходимые для расшифровки объекта.

    • Оптимизировали отправку данных: теперь изображения отправляются в отдельных полях формы, а не в одном JSON-объекте.

    • Добавили проверку поддерживаемых параметров камеры.

    hashtag
    0.3.1992 (0.4.4)

    • Включили новый метод шифрования изображений.

    • Оптимизировали формат отправки изображений.

    hashtag
    0.3.1991

    • Добавили опцию use_for_liveness: при съемке лица на мобильных устройствах выбирается тыловая камера, а на десктопе отключаются флип и обводка овала. По умолчанию опция отключена.

    hashtag
    0.3.1990 (0.4.3)

    • Уменьшили время видео video_selfie_best (жест Selfie) с 1 до 0,2 сек.

    • Оптимизировали загрузку скриптов – теперь ее можно настраивать.

    • Повысили точность работы алгоритмов.

    hashtag
    0.3.1988 (0.4.2)

    • Добавили казахский язык.

    • Добавили инструкцию по доступу к камере для десктопа.

    • Дополнили журналирование – пишутся запросы к plugin_liveness.php и user-agent в лог сервера.

    • Добавили возможность работы с режимом Lite.

    hashtag
    0.3.1987 (0.4.1)

    • Добавили шифрование.

    • Обновили библиотеки.

    hashtag
    0.3.1986 (0.3.91)

    • Добавили возможность скрывать логотип Oz Forensics.

    hashtag
    0.3.1984

    • Дополнили руководства для некоторых браузеров и социальных сетей.

    • Добавили обработку неизвестных и руководство для "неизвестных" браузеров.

    hashtag
    0.3.1983

    • Оптимизировали потребление памяти для рамки.

    • Добавили руководство по включению камер в различных браузерах под Android.

    .ozliveness_face_stroke

    oz_tutorial_camera_android_edge_title

  • error_camera_timeout_instruction

  • error_camera_timeout_title

  • oz_tutorial_camera_android_webview_title

    скрыть кнопку переключения камеры
    лучшего кадраarrow-up-right
    Добавили параметры

    Журнал изменений

    Журнал изменений для Android.

    hashtag
    9.0.2 – 25.02.2026

    • Обновили внутренние зависимости.

    hashtag
    9.0.1 – 18.02.2026

    • Исправили ошибку, из-за которой SDK мог возвращать "Unknown error" даже в случае успешного прохождения проверки.

    • SDK больше не вылетает из-за некорректного скалирования превью на некоторых устройствах.

    hashtag
    9.0.0 – 10.02.2026

    • Положение логотипа теперь (если изменение логотипа предусмотрено лицензией).

    • Если при проверке лицензии подключение к интернету было прервано, SDK теперь возвращает корректную ошибку.

    hashtag
    8.23.1 – 30.01.2026

    • Исправили проблему, из-за которой на некоторых устройствах видео становилось зеленым.

    • SDK больше не вылетает, если у камеры на устройстве не выставлены необходимые доступы.

    • Исправили незначительные ошибки.

    hashtag
    8.23.0 – 30.12.2025

    • Исправили ошибку, связанную с вылетом SDK из-за ошибок “Invalid to call at Released state” и “Pending dequeue output buffer request cancelled”.

    • Исправили ошибку, связанную с вылетом SDK из-за "java.util.concurrent.TimeoutException".

    • Android SDK теперь передаёт теги ориентации и типа медиа вместе с тегом действия.

    hashtag
    8.22.1 – 10.12.2025

    • Исправили незначительную ошибку.

    hashtag
    8.22.0 – 01.12.2025

    • Исправили ошибки, из-за которых SDK мог иногда вылетать на некоторых моделях телефонов.

    • Повысили безопасность.

    hashtag
    8.21.0 – 12.11.2025

    • Улучшили производительность SDK на некоторых устройствах.

    • Обновили SDK в рамках подготовки к внедрению новой функциональности, связанной с безопасностью.

    hashtag
    8.20.0 – 10.10.2025

    • Исправили ошибку, из-за которой на некоторых моделях телефонов могли записываться зеленые видео.

    • Исправили ошибку с mediaId = null.

    • Повысили безопасность.

    hashtag
    8.19.0 – 15.09.2025

    • Исправили ошибку, из-за которой при запуске Fragment могло появляться предупреждение.

    • SDK больше не вылетает при вызове copyPlane.

    • Если при гибридном анализе вы выбираете отправку сжатых видео, оригинальные видео больше не сохраняются вместе со сжатыми.

    hashtag
    8.18.4 – 29.08.2025

    • Чтобы обеспечить поддержку размера страниц памяти в 16 КБ, перевели TensorFlow на Lite RT.

    hashtag
    8.18.2 – 07.08.2025

    circle-exclamation

    Настоятельно рекомендуем обновиться до этой версии.

    • Исправили ошибку с увеличением длительности и размера видео.

    hashtag
    8.18.0 – 16.07.2025

    • Теперь поддерживаем Google Dynamic Feature Delivery.

    • Исправили ошибку, из-за которой SDK мог вылететь при нажатии кнопки закрытия экрана Liveness.

    • Исправили ошибку вылета SDK с исключением CameraDevice was already closed.

    hashtag
    8.17.3 – 02.07.2025

    • Устранили проблему несовместимости версий OkHttp.

    • Исправили ошибку с Fragment, который не мог обнаружить контекст.

    hashtag
    8.17.2 – 26.06.2025

    • Исправили ошибку доступа к камере, которая иногда возникала на некоторых моделях смартфонов.

    hashtag
    8.17.1 – 23.06.2025

    • Обновления безопасности.

    hashtag
    8.17.0 – 22.05.2025

    • Обновления безопасности.

    hashtag
    8.16.3 – 08.04.2025

    • Обновления безопасности.

    hashtag
    8.16.2 – 19.03.2025

    • Исправили ошибку, из-за которой SDK мог вылететь при закрытии экрана съемки.

    hashtag
    8.16.1 – 14.03.2025

    • Обновления безопасности.

    hashtag
    8.16.0 – 11.03.2025

    • Обновили логику авторизации.

    • Улучшили логику озвучивания подсказок.

    • Исправили наблюдавшуюся на некоторых устройствах ошибку с зависанием SDK после завершения съемки видео.

    hashtag
    8.15.6 – 26.02.2025

    • Обновления безопасности.

    hashtag
    8.15.5 – 18.02.2025

    • Валидацию видео – опцию, которая запускает запись видео заново, если получившийся файл состоит из 3 кадров и менее – теперь можно отключить. Воспользуйтесь настройкой .

    • Исправили ошибку, из-за которой на некоторых моделях телефонов могли записываться зеленые видео.

    • Обновления безопасности.

    hashtag
    8.15.4 – 11.02.2025

    • Исправили ошибки, из-за которых на некоторых моделях телефонов могли возникать сбои.

    hashtag
    8.15.0 – 30.12.2024

    • Добавлен правильный порядок фокусировки для VoiceOver при включенной антискам-подсказке.

    • Добавлена ​​публичная настройка extract_action_shot в Демо Приложении.

    • Исправили ошибки.

    hashtag
    8.14.1 – 05.12.2024

    • Исправили ошибку, из-за которой некоторые записанные SDK видео были зелеными.

    • Исправили проблемы с кодеками, появлявшиеся на некоторых моделях смартфонов.

    hashtag
    8.14.0 – 02.12.2024

    • Обновления доступности для пользователей с инвалидностью согласно требованиям WCAG: можно настроить озвучивание подсказок SDK и элементов управления.

    • Упростили прохождение проверки для жестов, включающих движение головы.

    • Сжатие больших видео теперь происходит позже: на этапе закрытия экрана Liveness.

    hashtag
    8.13.0 – 12.11.2024

    • Обновления безопасности и телеметрии.

    hashtag
    8.12.4 – 01.10.2024

    • Обновления безопасности.

    hashtag
    8.12.2 – 10.09.2024

    • Обновления безопасности.

    hashtag
    8.12.0 – 29.08.2024

    • Обновления безопасности и телеметрии.

    hashtag
    8.11.0 – 19.08.2024

    • Исправили ошибку RuntimeException, появлявшуюся в режиме серверного Liveness на некоторых моделях телефонов.

    • Обновления безопасности.

    hashtag
    8.10.0 – 26.07.2024

    • Обновления безопасности.

    • Исправили ошибки.

    hashtag
    8.9.0 – 18.07.2024

    • Подняли версию плагина Android Gradle до 8.0.0.

    • Улучшили работу SDK.

    hashtag
    8.8.3 – 11.07.2024

    • Улучшили работу SDK.

    hashtag
    8.8.2 – 21.06.2024

    • Обновления безопасности.

    hashtag
    8.8.1 – 12.06.2024

    • Обновления безопасности.

    hashtag
    8.8.0 – 04.06.2024

    • Обновления безопасности.

    hashtag
    8.7.3 – 03.06.2024

    • Обновления безопасности.

    hashtag
    8.7.0 – 06.05.2024

    • При попытке передать пустую строку в качестве аргумента для метода setFolderId теперь показывается информативная ошибка.

    • Исправили ошибку с бесконечно крутящимся спиннером, который появлялся при переключении пользователя на другое приложение во время прохождения проверки Liveness.

    • Исправили несколько ошибок, появлявшихся только на определенных моделях смартфонов.

    hashtag
    8.6.0 – 05.04.2024

    • Улучшили модель Liveness для проверки на устройстве.

    • Обновления безопасности.

    hashtag
    8.5.0 – 27.02.2024

    • Длительность жеста Селфи теперь можно (размер видеофайла также изменится).

    • Вы можете логотип Oz своим, если ваша лицензия это предусматривает.

    • Убрали паузу после жеста Сканирование.

    hashtag
    8.4.4 – 06.02.2024

    • Изменили алгоритм валидации для мастер-лицензии.

    hashtag
    8.4.3 – 29.01.2024

    • Снизили требования к compileSdkVersion с 34 до 33.

    hashtag
    8.4.2 – 15.01.2024

    • Обновления безопасности.

    hashtag
    8.4.0 – 04.01.2024

    • Обновили модель Liveness для проверки на устройстве.

    • Исправили ошибки.

    hashtag
    8.3.3 – 11.12.2023

    • Улучшили работу механизмов лицензирования.

    hashtag
    8.3.2 – 30.11.2023

    • Улучшили работу SDK.

    hashtag
    8.3.1 – 24.11.2023

    • Исправили ошибки.

    hashtag
    8.3.0 – 17.11.2023

    • Добавили возможность использования мастер-лицензии, которая работает с любым bundle_id.

    • Исправили ошибку со сжатием видео при гибридном анализе, которая возникала на некоторых моделях телефонов.

    hashtag
    8.2.1 – 01.11.2023

    • Исправили ошибки.

    hashtag
    8.2.0 – 23.10.2023

    • Добавили в структуру Analysis поле sizeReductionStrategy. Оно определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа.

    • Настройка toFrameGradientColor для кастомизации подсказки hintAnimationCustomization больше не используется. Вместо нее используйте hintGradientColor.

    hashtag
    8.1.1 – 02.10.2023

    • Если несколько анализов назначаются на папку одновременно, система отправляет их группой. Таким образом, выбирается “худший” результат среди всех анализов, а не последний назначенный. Прочитать про отправку анализов группой можно .

    • В анализе Liveness для количественного результата теперь берется максимальный из вычисленных. Прочитать о результате можно .

    hashtag
    8.1.0 – 07.09.2023

    • Обновили модель Liveness для проверки на устройстве.

    • Добавили португальский язык (бразильский вариант).

    • Вы теперь можете добавить язык или изменить текущие переводы самостоятельно. Как это сделать, описано .

    hashtag
    8.0.3 – 24.08.2023

    • Исправили ошибки.

    hashtag
    8.0.2 – 13.07.2023

    • При установке baseURL = null SDK теперь работает корректно.

    hashtag
    8.0.1 – 28.06.2023

    • Версии зависимостей SDK приведены в соответствие с версией Kotlin.

    hashtag
    8.0.0 – 19.06.2023

    • Добавлен новый тип анализа – гибридный (сейчас работает только для Liveness). В случае спорных результатов анализа на устройстве проводится дополнительная проверка на сервере.

    • Требования к версии Kotlin понижены до 1.7.21.

    • Обновлены модели для анализов на устройстве.

    chevron-rightИзменения в публичном интерфейсеhashtag

    hashtag
    Новые сущности

    hashtag
    7.3.1 – 07.06.2023

    • Обновили экран настроек.

    • Добавили настройки для фона подсказки.

    • Добавили новые формы рамки (круг, квадрат).

    circle-info

    Обратите внимание: с этой версии используется Kotlin 1.8.20.

    hashtag
    7.2.0 – 04.05.2023

    • Улучшили работу алгоритмов SDK.

    hashtag
    7.1.4 – 30.03.2023

    • Обновили модель для выполнения анализов на устройстве.

    • Обновили анимацию для солнечных очков / маски.

    • Немного уменьшили размеры овала для Liveness.

    hashtag
    7.1.3 – 03.03.2023

    • Исправили ошибку, появлявшуюся при выполнении серверных анализов после использования для авторизации permanentAccessToken.

    hashtag
    7.1.2 – 22.02.2023

    • Добавили возможность .

    • Полосу статуса и системные кнопки теперь можно скрывать (работает с версии 7.0.0).

    • В метод OzLivenessSDK.init теперь нужно первым параметром передавать context

    hashtag
    7.1.1 – 16.01.2023

    • Исправили ошибку с вылетами на версиях Android <6.

    • Поправили расположение овала для некоторых моделей телефонов.

    • Улучшили работу SDK.

    hashtag
    7.1.0 – 16.12.2022

    • Обновили систему безопасности.

    • Добавили некоторые внутренние улучшения.

    • Метод addMedia больше не работает. Для загрузки медиафайлов воспользуйтесь методом uploadMedia.

    hashtag
    7.0.0 – 23.11.2022

    • Из соображений безопасности мы теперь поставляем два типа библиотек: sdk только для серверного анализа и full для серверного анализа и анализа на устройстве.

    • Заменили OzCustomization на UICustomization.

    • Значительно расширили

    hashtag
    6.4.2

    • Исправили ошибку с зависаниями на некоторых моделях телефонов.

    • SDK теперь снимает видео в разрешении 720p (с 6.4.2.3).

    hashtag
    6.4.1

    • Наименование режимов анализа приведено в соответствие с iOS: SERVER_BASED и ON_DEVICE.

    • Исправили ошибку с отображением настроек локализации.

    hashtag
    6.4.0

    • Теперь в качестве Liveness-экрана можно использовать Fragment.

    • Добавили новое поле params в структуру Analysis – с его помощью можно задавать дополнительные параметры, например, для извлечения на сервере лучшего кадра. Алгоритм "лучший кадр" выбирает из видеозаписи наиболее качественный и удачный кадр с лицом.

    hashtag
    6.3.7

    • Жесты отдаления и приближения больше не поддерживаются.

    hashtag
    6.3.6

    • Обновили биометрическую модель.

    hashtag
    6.3.5

    • Добавили новую упрощенную структуру AnalysisRequest – теперь конструировать запросы на анализы стало проще и удобнее.

    hashtag
    6.3.4

    • Добавили модуль для выполнения анализов локально на устройстве. Подключите модуль:

    Для запуска анализов biometry и liveness используйте соответствующие методы класса OzLivenessSDK: runOnDeviceBiometryAnalysis и runOnDeviceLivenessAnalysis.

    hashtag
    6.3.3

    • Liveness теперь работает плавнее.

    • На устройствах Xiaomi больше не зависает камера.

    • Оптимизировали преобразования изображений с камеры.

    hashtag
    6.3.1

    • В OzLivenessSDK.uploadMedia добавили параметр metadata и методы OzLivenessSDK.uploadMediaAndAnalyze для передачи metadata в папки.

    hashtag
    6.2.8

    • Добавили функции для инициализации SDK с лицензиями LicenseSources: LicenseSource.LicenseAssetId иLicenseSource.LicenseFilePath. Для инициализации используйте метод OzLivenessSDK.init.

    • Добавили возможность получения информации о лицензии после инициализации val licensePayload = OzLivenessSDK.getLicensePayload().

    hashtag
    6.2.4

    • Добавили киргизский язык.

    hashtag
    6.2.0

    • Добавили функции для локальных анализов.

    • Добавили конфигурацию рамки вокруг лица.

    • Номер версии на экране Liveness теперь отображается корректно.

    hashtag
    6.1.0

    • Добавили поддержку основной камеры.

    hashtag
    6.0.0

    • Добавили жест OneShot.

    • Добавили состояний в OzAnalysisResult.Resolution.

    • Добавили метод uploadMediaAndAnalyze

    hashtag
    5.1.0

    • Токен доступа теперь обновляется автоматически.

    • Переименовали accessToken в permanentAccessToken.

    • Добавили правила R8.

    hashtag
    5.0.2

    • Исправили овальную рамку.

    • Убрали неиспользуемые параметры params из AnalyseRequest.

    • Убрали лимит по умолчанию на количество попыток.

    hashtag
    5.0.0

    • Убрали свойства конфигурации - baseURL, accessToken и так далее. Заменили их на свойство config, которое нужно инициализировать с помощью OzConfig.Builder.

    • Добавили поддержку лицензий. Их нужно устанавливать как raw ресурсы и передавать в OzConfig через setLicenseResourceId.

    Настройка интерфейса

    Для настройки интерфейса воспользуйтесь разделом style в методе Ozliveness.open. Полный список настроек приведен после примера.

    Пример использования:

    hashtag
    baseColorCustomization

    Повысили безопасность.

    Обновили ссылку на сайт Oz Forensics.

  • Повысили безопасность.

  • Обновления безопасности и телеметрии.
    SDK больше не вылетает при попытке обратиться к закрытым или не инициализированным ресурсам.
  • Обновления безопасности.

  • Обновления безопасности.
    Исправили ошибку, из-за которой изображение с закрытыми глазами могло быть выбрано в качестве лучшего кадра.
  • Исправили незначительные ошибки.

  • Обновления телеметрии.

  • Если размер записанного видеофайла больше 10 Мбайт, видео будет сжато.
  • Обновления безопасности и журналирования.

  • Сообщения для получаемых из API ошибок теперь детализированы.

    Если медиафайл по каким-то причинам не загрузился, система повторяет загрузку.

  • Добавили новый метод для получения идентификатора телеметрии (логирования): getEventSessionId.

  • Методы auth и login больше не используются. Вместо них, пожалуйста, используйте метод setApiConnection.

  • OzConfig.baseURL и OzConfig.permanentAccessToken больше не используются.

  • Если пользователь закрывает экран во время съемки видео, соответствующая ошибка обрабатывается SDK.

  • Исправили ошибки и улучшили работу SDK.

  • На некоторых моделях телефонов исправлена ошибка fatal device.

  • Текст подсказки теперь может выходить за границы рамки для лица по горизонтали (для основной камеры).

  • Фото, снятые во время однокадрового анализа, теперь передаются на сервер в оригинальном размере.

  • Удален класс OzAnalysisResult. В параметре onSuccess метода AnalysisRequest.run вместо списка OzAnalysisResult теперь передается структура RequestResult.

  • Все исключения перенесены в папку com.ozforensics.liveness.sdk.core.exceptions (детальная информация ниже).

  • Связанные с AnalysisRequest классы перенесены в com.ozforensics.liveness.sdk.analysis (детальная информация ниже).

  • Прекращена поддержка методов:

  • AnalysisRequest.Builder.uploadMedia

    AnalysisRequest.Type.HYBRID в com.ozforensics.liveness.sdk.analysis.entity
  • AnalysisError в com.ozforensics.liveness.sdk.analysis.entity

  • SourceMedia в com.ozforensics.liveness.sdk.analysis.entity

  • ResultMedia в com.ozforensics.liveness.sdk.analysis.entity

  • RequestResult в com.ozforensics.liveness.sdk.analysis.entity

  • hashtag
    Перенос

    • NoAnalysisException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    • NoNetworkException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    • TokenException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    • NoMediaInAnalysisException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    • EmptyMediaListException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    • NoSuchMediaException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    • LicenseException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.security.exception

    • Analysis из com.ozforensics.liveness.sdk.analysis.entity в com.ozforensics.liveness.sdk.core.model

    • AnalysisRequest из com.ozforensics.liveness.sdk.analysis в com.ozforensics.liveness.sdk.core

    • AnalysisListener из com.ozforensics.liveness.sdk.analysis в com.ozforensics.liveness.sdk.core

    • AnalysisStatus из com.ozforensics.liveness.sdk.analysis в com.ozforensics.liveness.sdk.core

    • AnalysisRequest.Builder из com.ozforensics.liveness.sdk.analysis в com.ozforensics.liveness.sdk.core

    • OzException из com.ozforensics.liveness.sdk.exceptions в com.ozforensics.liveness.sdk.core.exceptions

    hashtag
    Измененные классы

    OzLivenessSDK

    • Удален метод uploadMediaAndAnalyze

    • Удален метод uploadMedia

    • Удален метод runOnDeviceBiometryAnalysis

    • Удален метод runOnDeviceLivenessAnalysis

    AnalysisRequest

    • Удален метод build(): AnalysisRequest

    AnalysisRequest.Builder

    • Удален метод addMedia

    • Удален метод onSuccess(result: List<OzAnalysisResult>)

    • Добавлен метод onSuccess(result: RequestResult)

    Добавили виджет для защиты от мошенничества и набор настроек к нему. С помощью этого виджета вы можете уведомлять пользователей, что ведется съемка видео для, например, отправления заявки на кредит. Таким образом вы сможете защитить пользователей, если мошенники попытаются убедить их подтвердить такой запрос.
  • Метод OzLivenessSDK::init при передаче параметра StatusListener теперь работает корректно.

  • Изменили анимацию жеста "Сканирование".

  • .
  • OzAnalysisResult теперь корректно показывает оценки по серверным анализам.

  • Исправлены ошибки инициализации и некорректного отображения настроек кастомизации, а также ошибки некорректной авторизации на версиях Android < 7.1.1.

  • и обновили дизайн. Если вы хотите вернуть дизайн из прошлых версий, соответствующие настройки описаны
    .
  • Добавили испанский язык.

  • – он загружает список изображений/видео на сервер и сразу отправляет их на анализ.
  • OzMedia превратили в OzAbstractMedia и добавили подклассы изображений и видео.

  • Исправили ошибки камеры на некоторых устройствах.

  • Упростили процесс конфигурации. Свойства config теперь можно менять.

    Убрали методы, которым нужен был контекст. Заменили аналогами.

  • Анализ изображений теперь работает лучше.

  • Убрали ненужные зависимости.

  • Поправили ошибки журналирования.

  • Удаленный метод

    Замена

    OzLivenessSDK.uploadMediaAndAnalyze

    AnalysisRequest.run

    OzLivenessSDK.uploadMedia

    AnalysisRequest.Builder.uploadMedia

    OzLivenessSDK.runOnDeviceBiometryAnalysis

    AnalysisRequest.run

    OzLivenessSDK.runOnDeviceLivenessAnalysis

    AnalysisRequest.run

    AnalysisRequest.build(): AnalysisRequest

    -

    можно настраивать
    disableFramesCountValidation
    менять
    заменить
    здесь
    здесь
    здесь
    анимации подсказки

    AnalysisRequest.Builder.addMedia

    список настроек кастомизации SDK
    здесь
        implementation 'com.ozforensics.liveness:on-device:6.3.4'
    val mediaList: List<OzAbstractMedia> = ...
    val biometryAnalysisResult: OzAnalysisResult = OzLivenessSDK.runOnDeviceBiometryAnalysis(mediaList)
    val livenessAnalysisResult: OzAnalysisResult = OzLivenessSDK.runOnDeviceLivenessAnalysis(mediaList)
    Основные цветовые настройки.

    Параметр

    Описание

    textColorPrimary

    Основной цвет текста

    backgroundColorPrimary

    Основной цвет фона

    textColorSecondary

    Дополнительный цвет текста

    backgroundColorSecondary

    Дополнительный цвет фона

    iconColor

    Цвет значков

    hashtag
    baseFontCustomization

    Основные настройки шрифта.

    Параметр

    Описание

    textFont

    Шрифт

    textSize

    Размер шрифта

    textWeight

    Насыщенность шрифта

    textStyle

    Стиль текста

    hashtag
    titleFontCustomization

    Настройки шрифта заголовка.

    Параметр

    Описание

    textFont

    Шрифт

    textSize

    Размер шрифта

    textWeight

    Насыщенность шрифта

    textStyle

    Стиль текста

    hashtag
    buttonCustomization

    Настройки кнопок.

    Параметр

    Описание

    textFont

    Шрифт

    textSize

    Размер шрифта

    textWeight

    Насыщенность шрифта

    textStyle

    Стиль текста

    textColorPrimary

    Основной цвет текста

    backgroundColorPrimary

    Основной цвет фона

    hashtag
    toolbarCustomization

    Настройки панели инструментов.

    Параметр

    Описание

    closeButtonIcon

    Значок кнопки закрытия

    iconColor

    Цвет значка

    hashtag
    centerHintCustomization

    Настройки подсказки в центре.

    Параметр

    Описание

    textFont

    Шрифт

    textSize

    Размер шрифта

    textWeight

    Насыщенность шрифта

    textStyle

    Стиль текста

    textColor

    Цвет текста

    backgroundColor

    Цвет фона

    hashtag
    hintAnimation

    Анимация подсказки.

    Параметр

    Описание

    hideAnimation

    Скрыть анимацию

    hintGradientColor

    Цвет градиента

    hintGradientOpacity

    Непрозрачность градиента

    animationIconSize

    Размер значка анимации

    hashtag
    faceFrameCustomization

    Настройки рамки вокруг лица.

    Параметр

    Описание

    geometryType

    Форма рамки – прямоугольник или овал

    cornersRadius

    Угловой радиус прямоугольника

    strokeDefaultColor

    Цвет рамки (лицо не в кадре)

    strokeFaceInFrameColor

    Цвет рамки (лицо в кадре)

    strokeOpacity

    Непрозрачность обводки

    strokeWidth

    Толщина линии обводки

    hashtag
    documentFrameCustomization

    Настройки рамки для съемки документа.

    Параметр

    Описание

    cornersRadius

    Угловой радиус

    templateColor

    Цвет шаблона

    templateOpacity

    Непрозрачность шаблона

    hashtag
    backgroundCustomization

    Настройки фона.

    Параметр

    Описание

    backgroundColor

    Цвет фона

    backgroundOpacity

    Непрозрачность фона

    hashtag
    antiscamCustomization

    Настройки защиты от мошенников: при включении во время записи видео появляется дополнительное сообщение.

    Параметр

    Описание

    textMessage

    Текст сообщения

    textFont

    Шрифт

    textSize

    Размер шрифта

    textWeight

    Насыщенность шрифта

    textStyle

    Стиль текста

    textColor

    Цвет текста

    hashtag
    versionTextCustomization

    Настройки текста версии SDK.

    Параметр

    Описание

    textFont

    Шрифт

    textSize

    Размер шрифта

    textWeight

    Насыщенность шрифта

    textStyle

    Стиль текста

    textColor

    Цвет текста

    textOpacity

    Непрозрачность текста

    hashtag
    maskCustomization

    Настройки 3D-маски, добавленной в версии 1.2.1.

    Параметр

    Описание

    maskColor

    Цвет самой маски

    glowColor

    Цвет обводки маски

    minAlpha

    Минимальный уровень прозрачности маски (добавлено в 1.3.1)

    maxAlpha

    Максимальный уровень прозрачности маски (добавлено в 1.3.1)

    hashtag
    switchCameraButtonCustomization

    Настройка управляет видимостью кнопки переключения камеры (добавлено в 1.7.14).

    Parameter

    Description

    enableSwitchCameraButton

    • true (по умолчанию) – кнопка видна,

    • false – кнопка скрыта.

    hashtag
    loaderSlot

    Настройки loader (добавлено в 1.7.15).

    Событие

    Payload

    Вызов

    loader:init

    {os, browser, platform}

    сразу после вставки слота

    loader:waitingCamera

    {os, browser, platform, waitedMs}

    каждые waitedMs мс, пока нет доступа к камере

    loader:cameraReady

    когда доступ к камере получен и loader нужно скрыть

    loader:processing

    {phase: 'start' | 'end'}

    до / после подготовки данных

    hashtag
    loaderTransition

    Настройки переходов loader (добавлено в 1.8.0).

    Параметр

    Описание

    type

    Тип анимации: none, fade, slide, scale

    duration

    Длительность анимации в мс

    easing (опционально)

    Сглаживание: linear, ease-in-out и так далее

    hashtag
    .ozliveness_face_stroke

    Используйте этот класс для настройки внешнего вида овала (с версии 1.9.2). Поддерживаются все стандартные инструменты CSS.

    hashtag
    Переход на новый дизайн с предыдущих версий (до 1.0.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

    OzLiveness.open({
    style: {
        baseColorCustomization: {
            textColorPrimary: "#000000",
            backgroundColorPrimary: "#FFFFFF",
            textColorSecondary: "#8E8E93",
            backgroundColorSecondary: "#F2F2F7",
            iconColor: "#00A5BA"
        },
        baseFontCustomization: {
            textFont: "Roboto, sans-serif",
            textSize: "16px",
            textWeight: "400",
            textStyle: "normal"
        },
        titleFontCustomization: {
            textFont: "inherit",
            textSize: "36px",
            textWeight: "500",
            textStyle: "normal"
        },
        buttonCustomization: {
            textFont: "inherit",
            textSize: "14px",
            textWeight: "500",
            textStyle: "normal",
            textColorPrimary: "#FFFFFF",
            backgroundColorPrimary: "#00A5BA",
            textColorSecondary: "#00A5BA",
            backgroundColorSecondary: "#DBF2F5",
            cornerRadius: "10px"
        },
        toolbarCustomization: {
            closeButtonIcon: "cross",
            iconColor: "#707070"
        },
        centerHintCustomization: {
            textFont: "inherit",
            textSize: "24px",
            textWeight: "500",
            textStyle: "normal",
            textColor: "#FFFFFF",
            backgroundColor: "#1C1C1E",
            backgroundOpacity: "56%",
            backgroundCornerRadius: "14px",
            verticalPosition: "38%"
        },
        hintAnimation: {
            hideAnimation: false,
            hintGradientColor: "#00BCD5",
            hintGradientOpacity: "100%",
            animationIconSize: "80px"
        },
        faceFrameCustomization: {
            geometryType: "oval",
            cornersRadius: "0px",
            strokeDefaultColor: "#D51900",
            strokeFaceInFrameColor: "#00BCD5",
            strokeOpacity: "100%",
            strokeWidth: "6px",
            strokePadding: "4px"
        },
        documentFrameCustomization: {
            cornersRadius: "20px",
            templateColor: "#FFFFFF",
            templateOpacity: "100%"
        },
        backgroundCustomization: {
            backgroundColor: "#FFFFFF",
            backgroundOpacity: "88%"
        },
        antiscamCustomization: {
            enableAntiscam: false,
            textMessage: "",
            textFont: "inherit",
            textSize: "14px",
            textWeight: "500",
            textStyle: "normal",
            textColor: "#000000",
            textOpacity: "100%",
            backgroundColor: "#F2F2F7",
            backgroundOpacity: "100%",
            backgroundCornerRadius: "20px",
            flashColor: "#FF453A"
        },
        versionTextCustomization: {
            textFont: "inherit",
            textSize: "16px",
            textWeight: "500",
            textStyle: "normal",
            textColor: "#000000",
            textOpacity: "56%"
        },
        maskCustomization: {
                maskColor: "#008700",
                glowColor: "#000102",
                minAlpha: "30%", // от 0 до 1 или 0-100%
                maxAlpha: "100%" // от 0 до 1 или 0-100%
        },
        switchCameraButtonCustomization: {
                enableSwitchCameraButton: true,
        },
       .ozliveness_wrap_overlay .ozliveness_face_stroke {
                overflow: hidden;
                box-shadow: 0 0 10px rgb(90 201 207);
                border: none; /* важно: удалите используемую по умолчанию рамку */
            }, 
    /* для HTML-строки используйте тип string; HTMLElement нужно вставить через cloneNode(true) */
        loaderSlot: yourLoader, /* <string | HTMLElement> */
        loaderTransition: {type: 'fade', duration: 500}
        
        }
    });

    textColorSecondary

    Дополнительный цвет текста

    backgroundColorSecondary

    Дополнительный цвет фона

    cornerRadius

    Угловой радиус кнопки

    backgroundOpacity

    Непрозрачность фона

    backgroundCornerRadius

    Угловой радиус подложки

    verticalPosition

    Положение по вертикали

    strokePadding

    Отступ в рамке

    textOpacity

    Непрозрачность текста

    backgroundColor

    Цвет фона

    backgroundOpacity

    Непрозрачность фона

    backgroundCornerRadius

    Угловой радиус подложки

    flashColor

    Цвет мигающего индикатора

    loader:uploading

    {phase: 'start' | 'progress' | 'end', percent?}

    до / во время / после отправки данных

    loader:destroy

    при скрытии слота

    centerHint.letterSpacing

    -

    centerHint.fontStyle

    centerHintCustomization.textStyle

    closeButton.image

    -

    backgroundOutsideFrame.color

    backgroundCustomization.backgroundColor

    Роли пользователей

    Роли указываются при создании новых пользователей и созданы для ограничения доступа к API при интеграции с прямым доступом.

    • ADMIN – Администратор системы. Имеет неограниченный доступ ко всем ресурсам системы через API, кроме принятия решений по анализам;

    • OPERATOR – Системный оператор. Имеет неограниченный доступ на просмотр заявок и может принимать решения по анализам, с помощью кнопки Принять решение (обычно используется в случае появления OPERATOR_REQUIRED);

    • CLIENT – Клиентская учетная запись. В рамках своей компании имеет доступ к загрузке медиафайлов, запуску анализов, просмотру результатов в своих папках, выгрузке отчетности по заявке;

      • is_admin – если установлен, пользователь получает доступ к данным всех пользователей внутри своей компании

    • CLIENT ADMIN – администратор компании, который может управлять пользователями и аккаунтом своей компании. CLIENT ADMIN может просматривать данные всех пользователей и редактировать их, просматривать статистику, удалять файлы в папках, шаблоны отчетов вместе с вложениями, сами отчеты и отдельные анализы, а также может добавлять шаблоны отчетов и изображения в ЧС.

    • CLIENT OPERATOR – имеет такие же права, как и OPERATOR, но в рамках своей компании.

    • CLIENT SERVICE – сервисный аккаунт для автоматических соединений. При авторизации под таким пользователем выдаётся токен с долгим временем жизни (по умолчанию 5 лет). Время жизни токенов для обычных пользователей составляет 15 минут (параметризуется), по умолчанию время жизни токенов продлевается при каждом обращении (параметризуется).

    chevron-rightДля версий API < 6.0hashtag

    В версиях 5.3 и ниже для создания пользователя с правами администратора или сервисного пользователя назначьте ему роль CLIENT и установите true в соответствующем флаге:

    • is_admin дает пользователю права администратора в рамках своей компании.

    Подробное описание уровней доступа приведено ниже.

    hashtag
    Компания

    hashtag
    Папка

    hashtag
    Шаблон отчета

    hashtag
    Приложения к шаблону отчета

    hashtag
    Отчет

    hashtag
    Анализ

    hashtag
    Коллекция

    hashtag
    Персона

    hashtag
    Фото персоны

    hashtag
    Пользователь

    can_start_analyse_biometry – дополнительный флаг для ограничения доступа к проведению биометрии (по умолчанию разрешено)
  • can_start_analyse_quality – дополнительный флаг для ограничения доступа к проведению анализов Liveness (по умолчанию разрешено)

  • is_service предназначен для создания сервисных пользователей учётных записей для входа автоматизированным способом. При авторизации под таким пользователем выдаётся токен с долгим временем жизни (по умолчанию 5 лет). Время жизни токенов для обычных пользователей составляет 15 минут (параметризуется), по умолчанию время жизни токенов продлевается при каждом обращении (параметризуется).

    CLIENT

    -

    данные своей компании

    -

    -

    CLIENT SERVICE

    -

    данные своей компании

    -

    -

    CLIENT OPERATOR

    -

    данные своей компании

    -

    -

    CLIENT ADMIN

    -

    данные своей компании

    данные своей компании

    данные своей компании

    CLIENT

    свои папки

    свои папки

    свои папки

    -

    CLIENT SERVICE

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT OPERATOR

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    CLIENT

    -

    в рамках своей компании

    -

    -

    CLIENT SERVICE

    -

    в рамках своей компании

    -

    -

    CLIENT OPERATOR

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT SERVICE

    -

    в рамках своей компании

    -

    CLIENT OPERATOR

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в своих папках

    -

    CLIENT SERVICE

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT OPERATOR

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    CLIENT

    в своих папках

    в своих папках

    -

    -

    CLIENT SERVICE

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT OPERATOR

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    CLIENT

    -

    в рамках своей компании

    -

    -

    CLIENT SERVICE

    в рамках своей компании

    в рамках своей компании

    -

    -

    CLIENT OPERATOR

    -

    в рамках своей компании

    -

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT SERVICE

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT OPERATOR

    -

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    -

    CLIENT SERVICE

    -

    в рамках своей компании

    -

    CLIENT OPERATOR

    -

    в рамках своей компании

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    CLIENT

    -

    свои данные

    свои данные

    -

    CLIENT SERVICE

    -

    в рамках своей компании

    свои данные

    -

    CLIENT OPERATOR

    -

    в рамках своей компании

    свои данные

    -

    CLIENT ADMIN

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    в рамках своей компании

    Создание

    Чтение

    Обновление

    Удаление

    ADMIN

    +

    +

    +

    +

    OPERATOR

    -

    +

    -

    Создание

    Чтение

    Обновление

    Удаление

    ADMIN

    +

    +

    +

    +

    OPERATOR

    +

    +

    +

    Создание

    Чтение

    Обновление

    Удаление

    ADMIN

    +

    +

    +

    +

    OPERATOR

    +

    +

    +

    Создание

    Чтение

    Удаление

    ADMIN

    +

    +

    +

    OPERATOR

    +

    +

    -

    CLIENT

    Создание

    Чтение

    Удаление

    ADMIN

    +

    +

    +

    OPERATOR

    +

    +

    -

    CLIENT

    Создание

    Чтение

    Обновление

    Удаление

    ADMIN

    +

    +

    +

    +

    OPERATOR

    +

    +

    +

    Создание

    Чтение

    Обновление

    Удаление

    ADMIN

    +

    +

    +

    +

    OPERATOR

    -

    +

    -

    Создание

    Чтение

    Удаление

    ADMIN

    +

    +

    +

    OPERATOR

    -

    +

    -

    CLIENT

    Создание

    Чтение

    Удаление

    ADMIN

    +

    +

    +

    OPERATOR

    -

    +

    -

    CLIENT

    Создание

    Чтение

    Обновление

    Удаление

    ADMIN

    +

    +

    +

    +

    OPERATOR

    -

    +

    свои данные

    статуса

    -

    -

    -

    -

    по своим папкам

    -

    -

    -

    -

    -

    Методы API Lite

    circle-info

    Начиная с версии 1.1.0, Oz API Lite может принимать изображения и шаблоны в формате base64, а также возвращать в этом формате шаблоны биометрических проверок. Для включения этой опции необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    version – проверка версии компонентов

    С помощью этого метода можно узнать, какие версии компонентов используются (начиная с версии 1.1.1).

    Call GET /version

    Входные параметры

    -

    hashtag
    Пример запроса

    GET localhost/version

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает сообщение со следующими параметрами.

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    Биометрия

    hashtag
    health – проверка состояния биометрического процессора biometry

    С помощью этого метода можно проверить, корректно ли работает процессор.

    Вызов метода: GET /v1/face/pattern/health

    Входные параметры

    -

    hashtag
    Пример запроса

    GET localhost/v1/face/pattern/health

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает сообщение со следующими параметрами.

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    extract – извлечение биометрического шаблона

    Метод предназначен для извлечения биометрического шаблона из изображения. Тип контента HTTP-запроса: “image/jpeg” или “image/png”

    Вызов метода: POST /v1/face/pattern/extract

    hashtag
    Входные параметры

    chevron-right*hashtag

    Для параметров типа Stream имя указывать не нужно.

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает биометрический шаблон.

    Тип контента HTTP-ответа: “application/octet-stream”.

    circle-info

    Если в headers запроса передавалось поле Content-Transfer-Encoding со значением base64, то шаблон тоже вернется в base64.

    hashtag
    Выходные параметры

    chevron-right*hashtag

    Для параметров типа Stream имя указывать не нужно.

    hashtag
    Пример ответа

    hashtag
    compare – сравнение биометрических шаблонов

    Метод предназначен для сравнения двух биометрических шаблонов.

    Тип контента HTTP-запроса: “multipart/form-data”.

    Вызов метода: POST /v1/face/pattern/compare

    hashtag
    Входные параметры

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает результат сравнения двух шаблонов.

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    verify – биометрическая верификация

    Метод объединяет два описанных выше метода extract и compare – извлекает биометрический шаблон из изображения и сравнивает его с другим биометрическим шаблоном, который также передается в запросе.

    Тип контента HTTP-запроса: “multipart/form-data”.

    Вызов метода: POST /v1/face/pattern/verify

    hashtag
    Входные параметры

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает результат сравнения двух биометрических шаблонов.

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    extract_and_compare – извлечение из двух изображений и сравнение полученных шаблонов

    Метод объединяет два описанных выше метода extract и compare. Он извлекает биометрические шаблоны из двух изображений, сравнивает их и в качестве ответа передает результат сравнения.

    Тип контента HTTP-запроса: “multipart/form-data”.

    Вызов метода: POST /v1/face/pattern/extract_and_compare

    hashtag
    Входные параметры

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает результат сравнения двух извлеченных биометрических шаблонов.

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    compare_n – сравнение биометрических шаблонов 1:N

    Метод предназначен для сравнения биометрических шаблонов в режиме 1:N.

    Тип контента HTTP-запроса: “multipart/form-data”.

    Вызов метода: POST /v1/face/pattern/compare_n

    hashtag
    Входные параметры

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает результаты сравнений 1:N .

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    verify_n – биометрическая верификация 1:N

    Метод объединяет два описанных выше метода extract и compare_n. Метод извлекает биометрический шаблон из изображения и сравнивает его cо списком биометрических шаблонов, которые также передаются в запросе.

    Тип контента HTTP-запроса: “multipart/form-data”.

    Вызов метода: POST /v1/face/pattern/verify_n

    hashtag
    Входные параметры

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает результаты сравнений 1:N .

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    extract_and_compare_n – извлечение и сравнение полученных шаблонов 1:N

    Метод объединяет два описанных выше метода extract и compare_n. Он извлекает биометрические шаблоны из изображения-кандидата и изображений из списка, а затем сравнивает их в режиме 1:N.

    Тип контента HTTP-запроса: “multipart/form-data”.

    Вызов метода: POST /v1/face/pattern/extract_and_compare_n

    hashtag
    Входные параметры

    circle-info

    Для передачи данных в base64 необходимо в headers запроса передать Content-Transfer-Encoding = base64.

    hashtag
    Пример запроса

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает результаты сравнений 1:N .

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    Ошибки методов

    Тип контента HTTP-ответа: “application/json”.

    chevron-right*hashtag

    Биометрический образец – входное изображение.

    hashtag
    Liveness

    hashtag
    health – проверка состояния биометрического процессора liveness

    Вызов метода: GET /v1/face/liveness/health

    Входные параметры отсутствуют.

    hashtag
    Пример запроса

    GET localhost/v1/face/liveness/health

    hashtag
    Успешный ответ метода

    В случае успешного ответа метод возвращает сообщение со следующими параметрами.

    Тип контента HTTP-ответа: “application/json”.

    hashtag
    Выходные параметры

    hashtag
    Пример ответа

    hashtag
    detect – обнаружение презентационных атак

    Метод detect предназначен для обнаружения презентационных атак. Он ищет лицо на каждом изображении или видео (с версии 1.2.0), отправляет найденные лица на анализ и возвращает результат.

    Поддерживаются следующие Content-Type:

    • image/jpeg или image/png для изображения;

    • multipart/form-data для изображений, видео или архивов. Для добавления дополнительных параметров, влияющих на анализ, используйте payload.

    Запуск метода:POST /{version}/face/liveness/detect.

    hashtag
    Изображение

    Принимает изображение в формате JPEG или PNG; без payload.

    chevron-rightПример запросаhashtag
    chevron-rightПример успешного ответаhashtag

    hashtag
    Multipart/form-data

    Принимает запрос multipart/form-data.

    • Название каждого медиафайла должно быть уникальным, например, media_key1, media_key2.

    • Параметры payload должны быть в виде JSON, помещенного в поле payload.

    circle-info

    Временные идентификаторы будут удалены после выполнения запроса.

    chevron-rightПример запросаhashtag
    chevron-rightПример успешного ответаhashtag

    hashtag
    Multipart/form-data с Best Shot

    Для извлечения лучшего кадра укажите в блоке analyses в payload extract_best_shot = true (как в примере запроса ниже). В таком случае API Lite после анализа ваших медиафайлов вернет в ответе лучший кадр – изображение в base64 будет в analysis->output_images->image_b64. Лучший кадр можно извлекать только из видео или архивов.

    Также в блоке analyses вы можете изменить порог для прохождения Liveness в параметре threshold_spoofing: если итоговая оценка выше значения этого параметра, результат анализа будет DECLINED, в ином случае проверка Liveness будет считаться пройденной.

    chevron-rightПример запросаhashtag
    chevron-rightПример успешного ответаhashtag
    chevron-rightПоле payloadhashtag

    hashtag
    Ошибки методов

    Тип контента HTTP-ответа: “application/json”.

    chevron-right*hashtag

    Биометрический образец – входное изображение.

    Рекомендуемое решение по полученному score.

    approved - положительный результат. Лица совпадают.

    operator_required - требуется дополнительная проверка оператора.

    declined - негативный результат. Лица не совпадают.

    Рекомендуемое решение по полученному score.

    approved - положительный результат. Лица совпадают.

    operator_required - требуется дополнительная проверка оператора.

    declined - негативный результат. Лица не совпадают.

    Рекомендуемое решение по полученному score.

    approved – положительный результат. Лица совпадают.

    operator_required – требуется дополнительная проверка оператора.

    declined – негативный результат. Лица не совпадают.

    Не удалось прочитать биометрический шаблон

    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.

    Неверный Content-Type части multiparted HTTP-запроса

    500

    LDE-001001

    Внутренняя ошибка БП обнаружения витальности

    400

    LDE-001002

    Ошибка TFSS. Необходимо вызвать метод liveness health.

    Наименование параметра

    Тип

    Описание

    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

    Наименование параметра

    Тип

    Описание

    sample_1

    Stream

    Обязательный параметр.

    Изображение - кандидат(1).

    templates_n

    Stream

    Обязательный параметр.

    Список(N) биометрических шаблонов. Каждый биометрический шаблон должен быть передан отдельно, но необходимо чтобы имя параметра было templates_n. Также требуется, чтобы в заголовке был передан filename.

    Наименование параметра

    Тип

    Описание

    results

    List[JSON]

    Список результатов сравнения кандидата со списком(N). Для каждого сравнения из списка(N) результат имеет следующие поля:

    *filename

    String

    Значение filename в заголовке соответствующего шаблона из списка(N).

    *score

    Float

    Результат сравнения кандидата с соответствующим шаблоном из списка(N).

    *decision

    Наименование параметра

    Тип

    Описание

    sample_1

    Stream

    Обязательный параметр.

    Изображение – кандидат(1).

    samples_n

    Stream

    Обязательный параметр.

    Список(N) изображений. Каждое изображение должно быть передано отдельно, но необходимо чтобы имя параметра было samples_n. Также требуется, чтобы в заголовке был передан filename.

    Наименование параметра

    Тип

    Описание

    results

    List[JSON]

    Список результатов сравнения кандидата со списком(N). Для каждого сравнения из списка(N) результат имеет следующие поля:

    *filename

    String

    Значение filename в заголовке соответствующего изображения из списка(N).

    *score

    Float

    Результат сравнения кандидата с соответствующим изображением из списка(N).

    *decision

    Коды ответов HTTP

    Значение параметра “code”

    Описание

    400

    BPE-002001

    Неверный Content-Type HTTP-запроса

    400

    BPE-002002

    Неверный метод HTTP-запроса

    400

    BPE-002003

    Не удалось прочитать *биометрический образец

    400

    Наименование параметра

    Тип

    Описание

    status

    Int

    0 - биометрический процессор работает корректно.

    3 - биометрический процессор неработоспособен.

    message

    String

    Сообщение.

    Коды ответов HTTP

    Значение параметра “code”

    Описание

    400

    LDE-002001

    Неверный Content-type HTTP-запроса

    400

    LDE-002002

    Неверный метод HTTP-запроса

    400

    LDE-002004

    Не удалось прочитать биометрический образец*

    400

    String

    String

    String

    BPE-002004

    LDE-002005

    200 OK
    Content-Type: application/json
    {
    2	"core": "core_version",
    3	"tfss": "tfss_version",
    4	"models": [
    5		{
    6			"name": "model_name",
    7			"version": "model_version"
    8		}
    9	]
    10}
    200 OK
    Content-Type: application/json
    {“status”: 0, message: “”}
    POST localhost/v1/face/pattern/extract
    Content-Type: image/jpeg
    {Поток байт изображения}
    200 OK
    Content-Type: application/octet-stream
    {Поток байт биометрического шаблона}
    POST localhost/v1/face/pattern/compare
    Content-Type: multipart/form-data;
    boundary=--BOUNDARY--
    Content-Length: Длина тела сообщения
    --BOUNDARY--
    Content-Disposition: form-data; name=”bio_feature”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”bio_template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    200 OK
    Content-Type: application/json
    {“score”: 1.0, “decision”: “approved”}
    POST localhost/v1/face/pattern/verify
    Content-Type: multipart/form-data;
    boundary=--BOUNDARY--
    Content-Length: Длина тела сообщения
    --BOUNDARY--
    Content-Disposition: form-data; name=”bio_template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”sample”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    200 OK
    Content-Type: application/json
    {“score”: 1.0, “decision”: “approved”}
    POST localhost/v1/face/pattern/extract_and_compare
    Content-Type: multipart/form-data;
    boundary=--BOUNDARY--
    Content-Length: Длина тела сообщения
    --BOUNDARY--
    Content-Disposition: form-data; name=”sample_1”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    Content-Disposition: form-data; name=”sample_2”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    200 OK
    Content-Type: application/json
    {“score”: 1.0, “decision”: “approved”}
    POST localhost/v1/face/pattern/compare_n
    Content-Type: multipart/form-data;
    boundary=--BOUNDARY--
    Content-Length: Длина тела сообщения
    --BOUNDARY--
    Content-Disposition: form-data; name=”template_1”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”templates_n”; filename=”1.template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”templates_n”; filename=”2.template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”templates_n”; filename=”3.template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    200 OK
    Content-Type: application/json
    {'results': [
        {'filename': '1.template', 'score': 0.0, 'decision': 'declined'}, 
        {'filename': '2.template', 'score': 1.0, 'decision': 'approved'}, 
        {'filename': '3.template', 'score': 0.21, 'decision': 'declined'}
    ]}
    POST localhost/v1/face/pattern/verify_n
    Content-Type: multipart/form-data;
    boundary=--BOUNDARY--
    Content-Length: Длина тела сообщения
    --BOUNDARY--
    Content-Disposition: form-data; name=”sample_1”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    Content-Disposition: form-data; name=”templates_n”; filename=”1.template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”templates_n”; filename=”2.template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    Content-Disposition: form-data; name=”templates_n”; filename=”3.template”
    Content_type: application/octet-stream
    {Поток байт биометрического шаблона}
    --BOUNDARY--
    200 OK
    Content-Type: application/json
    {'results': [
        {'filename': '1.template', 'score': 0.0, 'decision': 'declined'}, 
        {'filename': '2.template', 'score': 1.0, 'decision': 'approved'}, 
        {'filename': '3.template', 'score': 0.21, 'decision': 'declined'}
    ]}
    POST localhost/v1/face/pattern/extract_and_compare_n
    Content-Type: multipart/form-data;
    boundary=--BOUNDARY--
    Content-Length: Длина тела сообщения
    --BOUNDARY--
    Content-Disposition: form-data; name=”sample_1”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    Content-Disposition: form-data; name=”samples_n”; filename=”1.jpeg”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    Content-Disposition: form-data; name=”samples_n”; filename=”2.jpeg”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    Content-Disposition: form-data; name=”samples_n”; filename=”3.jpeg”
    Content_type: image/jpeg
    {Поток байт изображения}
    --BOUNDARY--
    200 OK
    Content-Type: application/json
    {'results': [
        {'filename': '1.jpeg', 'score': 0.0, 'decision': 'declined'}, 
        {'filename': '2.jpeg', 'score': 1.0, 'decision': 'approved'}, 
        {'filename': '3.jpeg', 'score': 0.21, 'decision': 'declined'}
    ]}
    200 OK
    Content-Type: application/json
    {“status”: 0, message: “”}
    POST /v1/face/liveness/detect HTTP/1.1
    Host: localhost
    Content-Type: image/jpeg
    Content-Length: [длина тела сообщения]
    [поток байт изображения]
    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "passed": false,
      "score": 0.999484062
    }
    POST /v1/face/liveness/detect HTTP/1.1
    Host: localhost
    Content-Length: [длина тела сообщения]
    Content-Type: multipart/form-data; boundary=--BOUNDARY--
    
    --BOUNDARY--
    Content-Disposition: form-data; name="media_key1"; filename="video.mp4"
    Content-Type: multipart/form-data; 
    
    [поток байт медиафайла]
    --BOUNDARY--
    Content-Disposition: form-data; name="payload"
    
        {
            "folder:meta_data": {
                "partner_side_folder_id": "partner_side_folder_id_if_needed",
                "person_info": {
                    "first_name": "John",
                    "middle_name": "Jameson",
                    "last_name": "Doe"
                }
            },
            "resolution_endpoint": "https://www.your-custom-endpoint.com",
            "media:meta_data": {
                "media_key1": {
                    "foo": "bar2"
                }
            },
            "media:tags": {
                "media_key1": [
                    "video_selfie",
                    "video_selfie_blank"
                ]
            },
            "analyses": [
              {
                "type": "quality",
                "meta_data": {
                  "example1": "some_example1"
                },
                "params": {
                    "threshold_spoofing": 0.6,
                    "extract_best_shot": false
                }
              }
    ]
        }
    --BOUNDARY--
    {
        "company_id": null,
        "time_created": 1720180784.769608,
        "folder_id": "folder_id", // временный ID
        "user_id": null,
        "resolution_endpoint": "https://www.your-custom-endpoint.com",
        "resolution_status": "FINISHED",
        "resolution_comment": "[]",
        "system_resolution": "SUCCESS",
        "resolution_time": null,
        "resolution_author_id": null,
        "resolution_state_hash": null,
        "operator_comment": null,
        "operator_status": null,
        "is_cleared": null,
        "meta_data": {
            "partner_side_folder_id": "partner_side_folder_id_if_needed",
            "person_info": {
                "first_name": "John",
                "middle_name": "Jameson",
                "last_name": "Doe"
            }
        },
        "technical_meta_data": {},
        "time_updated": 1720180787.531983,
        "media": [
            {
                "folder_id": "folder_id", // временный ID
                "media_id": "video_id", // временный ID
                "media_type": "VIDEO_FOLDER",
                "info": {
                    "thumb": null,
                    "video": {
                        "duration": 3.76,
                        "FPS": 22.83,
                        "width": 960,
                        "height": 720,
                        "md5": "8879b4fa9ee7add77aceb8d7d5d7b92d",
                        "size": 6017119,
                        "mime-type": "video/mp4"
                    }
                },
                "tags": [
                    "video_selfie",
                    "video_selfie_blank",
                    "orientation_portrait"
                ],
                "original_name": "video-5mb.mp4",
                "original_url": null,
                "company_id": null,
                "technical_meta_data": {},
                "time_created": 1719573752.78253,
                "time_updated": 1720180787.531801,
                "meta_data": {
                    "foo4": "bar5"
                },
                "thumb_url": null,
                "folder_time_created": null,
                "video_id": "video_id", // временный ID
                "video_url": null
            }
        ],
        "analyses": [
            {
                "analyse_id": null,
                "analysis_id": null,
                "folder_id": "folder_id", // временный ID
                "folder_time_created": null,
                "type": "QUALITY",
                "state": "FINISHED",
                "company_id": null,
                "group_id": null,
                "results_data": null,
                "confs": {
                    "threshold_replay": 0.5,
                    "extract_best_shot": false,
                    "threshold_liveness": 0.5,
                    "threshold_spoofing": 0.42
                },
                "error_message": null,
                "error_code": null,
                "resolution_operator": null,
                "technical_meta_data": {},
                "time_created": 1720180784.769944,
                "time_updated": 1720180787.531877,
                "meta_data": {
                    "some_key": "some_value"
                },
                "source_media": [
                    {
                        "folder_id": "folder_id", // временный ID
                        "media_id": "video_id", // временный ID
                        "media_type": "VIDEO_FOLDER",
                        "info": {
                            "thumb": null,
                            "video": {
                                "duration": 3.76,
                                "FPS": 22.83,
                                "width": 960,
                                "height": 720,
                                "md5": "8879b4fa9ee7add77aceb8d7d5d7b92d",
                                "size": 6017119,
                                "mime-type": "video/mp4"
                            }
                        },
                        "tags": [
                            "video_selfie",
                            "video_selfie_blank",
                            "orientation_portrait"
                        ],
                        "original_name": "video-5mb.mp4",
                        "original_url": null,
                        "company_id": null,
                        "technical_meta_data": {},
                        "time_created": 1719573752.78253,
                        "time_updated": 1720180787.531801,
                        "meta_data": {
                            "foo4": "bar5"
                        },
                        "thumb_url": null,
                        "folder_time_created": null,
                        "video_id": "video_id", // временный ID
                        "video_url": null
                    }
                ],
                "results_media": [
                    {
                        "company_id": null,
                        "media_association_id": "video_id", // временный ID
                        "analysis_id": null,
                        "results_data": {
                            "confidence_spoofing": 0.000541269779
                        },
                        "source_media_id": "video_id", // временный ID
                        "output_images": [],
                        "collection_persons": [],
                        "folder_time_created": null
                    }
                ],
                "resolution_status": "SUCCESS",
                "resolution": "SUCCESS"
            }
        ]
    }
    POST /v1/face/liveness/detect HTTP/1.1
    Host: localhost
    Content-Length: [длина тела сообщения]
    Content-Type: multipart/form-data; boundary=--BOUNDARY--
    
    --BOUNDARY--
    Content-Disposition: form-data; name="media_key1"; filename="video.mp4"
    Content-Type: multipart/form-data; 
    
    [поток байт медиафайла]
    --BOUNDARY--
    Content-Disposition: form-data; name="payload"
    
        {
            "folder:meta_data": {
                "partner_side_folder_id": "partner_side_folder_id_if_needed",
                "person_info": {
                    "first_name": "John",
                    "middle_name": "Jameson",
                    "last_name": "Doe"
                }
            },
            "resolution_endpoint": "https://www.your-custom-endpoint.com",
            "media:meta_data": {
                "media_key1": {
                    "foo": "bar2"
                }
            },
            "media:tags": {
                "media_key1": [
                    "video_selfie",
                    "video_selfie_blank"
                ]
            },
            "analyses": [
              {
                "type": "quality",
                "meta_data": {
                  "example1": "some_example1"
                },
                "params": {
                    "threshold_spoofing": 0.6,
                    "extract_best_shot": true
                }
              }
    ]
        }
    --BOUNDARY--
    {
        "company_id": null,
        "time_created": 1720177371.120899,
        "folder_id": "folder_id", // временный ID
        "user_id": null,
        "resolution_endpoint": "https://www.your-custom-endpoint.com",
        "resolution_status": "FINISHED",
        "resolution_comment": "[]",
        "system_resolution": "SUCCESS",
        "resolution_time": null,
        "resolution_author_id": null,
        "resolution_state_hash": null,
        "operator_comment": null,
        "operator_status": null,
        "is_cleared": null,
        "meta_data": {
            "partner_side_folder_id": "partner_side_folder_id_if_needed",
            "person_info": {
                "first_name": "John",
                "middle_name": "Jameson",
                "last_name": "Doe"
            }
        },
        "technical_meta_data": {},
        "time_updated": 1720177375.531137,
        "media": [
            {
                "folder_id": "folder_id", // временный ID
                "media_id": "media_id", // временный ID
                "media_type": "VIDEO_FOLDER",
                "info": {
                    "thumb": null,
                    "video": {
                        "duration": 3.76,
                        "FPS": 22.83,
                        "width": 960,
                        "height": 720,
                        "md5": "8879b4fa9ee7add77aceb8d7d5d7b92d",
                        "size": 6017119,
                        "mime-type": "video/mp4"
                    }
                },
                "tags": [
                    "video_selfie",
                    "video_selfie_blank",
                    "orientation_portrait"
                ],
                "original_name": "video-5mb.mp4",
                "original_url": null,
                "company_id": null,
                "technical_meta_data": {},
                "time_created": 1719573752.781861,
                "time_updated": 1720177373.772401,
                "meta_data": {
                    "foo4": "bar5"
                },
                "thumb_url": null,
                "folder_time_created": null,
                "video_id": "media_id", // временный ID
                "video_url": null
            }
        ],
        "analyses": [
            {
                "analyse_id": null,
                "analysis_id": null,
                "folder_id": "folder_id", // временный ID
                "folder_time_created": null,
                "type": "QUALITY",
                "state": "FINISHED",
                "company_id": null,
                "group_id": null,
                "results_data": null,
                "confs": {
                    "threshold_replay": 0.5,
                    "extract_best_shot": true,
                    "threshold_liveness": 0.5,
                    "threshold_spoofing": 0.42
                },
                "error_message": null,
                "error_code": null,
                "resolution_operator": null,
                "technical_meta_data": {},
                "time_created": 1720177371.121241,
                "time_updated": 1720177375.531043,
                "meta_data": {
                    "some_key": "some_value"
                },
                "source_media": [
                    {
                        "folder_id": "folder_id", // временный ID
                        "media_id": "media_id", // временный ID
                        "media_type": "VIDEO_FOLDER",
                        "info": {
                            "thumb": null,
                            "video": {
                                "duration": 3.76,
                                "FPS": 22.83,
                                "width": 960,
                                "height": 720,
                                "md5": "8879b4fa9ee7add77aceb8d7d5d7b92d",
                                "size": 6017119,
                                "mime-type": "video/mp4"
                            }
                        },
                        "tags": [
                            "video_selfie",
                            "video_selfie_blank",
                            "orientation_portrait"
                        ],
                        "original_name": "video-5mb.mp4",
                        "original_url": null,
                        "company_id": null,
                        "technical_meta_data": {},
                        "time_created": 1719573752.781861,
                        "time_updated": 1720177373.772401,
                        "meta_data": {
                            "foo4": "bar5"
                        },
                        "thumb_url": null,
                        "folder_time_created": null,
                        "video_id": "media_id", // временный ID
                        "video_url": null
                    }
                ],
                "results_media": [
                    {
                        "company_id": null,
                        "media_association_id": "media_id", // временный ID
                        "analysis_id": null,
                        "results_data": {
                            "confidence_spoofing": 0.000541269779
                        },
                        "source_media_id": "media_id", // temporary ID
                        "output_images": [
                            {
                                "folder_id": "folder_id", // временный ID
                                "media_id": "media_id", // временный ID
                                "media_type": "IMAGE_RESULT_ANALYSIS_SINGLE",
                                "info": {
                                    "thumb": null,
                                    "original": {
                                        "md5": "e6effeceb94e79b8cb204c6652283b57",
                                        "width": 720,
                                        "height": 960,
                                        "size": 145178,
                                        "mime-type": "image/jpeg"
                                    }
                                },
                                "tags": [],
                                "original_name": "<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=720x960 at 0x766811DF8E90>",
                                "original_url": null,
                                "company_id": null,
                                "technical_meta_data": {},
                                "time_created": 1719573752.781861,
                                "time_updated": 1719573752.781871,
                                "meta_data": null,
                                "folder_time_created": null,
                                "image_b64": "",
                                "media_association_id": "media_id" // временный ID
                            }
                        ],
                        "collection_persons": [],
                        "folder_time_created": null
                    }
                ],
                "resolution_status": "SUCCESS",
                "resolution": "SUCCESS"
            }
        ]
    }
    {
        "folder:meta_data": {
            "partner_side_folder_id": "partner_side_folder_id_if_needed",
            "person_info": {
                "first_name": "John",
                "middle_name": "Jameson",
                "last_name": "Doe"
            }   },
        "resolution_endpoint": "https://www.your-custom-endpoint.com",
        "media:meta_data": {
            "media_key1": {
                "foo": "bar2",
                "additional_info": "additional_info" // может влиять на оценку
            },
            "media_key2": {
                "foo2": "bar3"
            },
            "media_key3": {
                "foo4": "bar5"
            }
        },
        "media:tags": {
            "media_key1": [
                "video_selfie",
                "video_selfie_blank",
                "orientation_portrait"
            ],
            "media_key2": [
                "photo_selfie"
            ],
            "media_key3": [
                "video_selfie",
                "video_selfie_blank",
                "orientation_portrait"
            ]
        },
    "analyses": [
        {
          "type": "quality",
          "meta_data": {
            "some_key": "some_value"
          },
          "params": {
          	"threshold_spoofing": 0.42, // влияет на результат
          	"extract_best_shot":true // вернется лучший кадр
          }
        }
      ]
    }

    Методы и поля iOS SDK

    hashtag
    OZSDK

    Синглтон (шаблон-одиночка) для Oz SDK.

    hashtag
    Методы

    hashtag
    OZSDK

    Инициализирует OZSDK, используя данные лицензии. В качестве замыкания передаются либо данные о лицензии, либо .

    Возвращает

    -

    hashtag
    setLicense

    Принудительно устанавливает лицензию.

    hashtag
    setApiConnection

    Запрашивает токен доступа для пользователя.

    Возвращает

    Токен доступа или ошибку.

    hashtag
    setEventsConnection

    Запрашивает токен доступа для отправки телеметрии.

    Возвращает

    Токен доступа или ошибку.

    hashtag
    isLoggedIn

    Проверяет, существует ли токен доступа.

    Параметры

    -

    Возвращает

    Результат проверки – true или false.

    hashtag
    logout

    Удаляет сохраненный токен доступа.

    Параметры

    -

    Возвращает

    -

    hashtag
    createVerificationVCWithDelegate

    Создает контроллер для проверки Liveness.

    Возвращает

    UIViewController или исключение.

    hashtag
    createVerificationVC

    Создает контроллер для проверки Liveness.

    Возвращает

    UIViewController или исключение.

    hashtag
    cleanTempDirectory

    Удаляет все видеоролики.

    Параметры

    -

    Возвращает

    -

    hashtag
    getEventSessionId

    Запрашивает идентификатор сессии телеметрии.

    Параметры

    -

    Возвращает

    Идентификатор сессии телеметрии (String).

    hashtag
    set

    Устанавливает кастомный бандл, в котором содержатся переводы строк.

    Возвращает

    -

    hashtag
    setSelfieLength

    Устанавливает длительность жеста Селфи (в миллисекундах).

    hashtag
    generateSignedPayload

    Создает payload с подписями медиафайлов.

    Возвращает

    payload для загрузки вместе с медиафайлами, для которых он был сгенерирован.

    hashtag
    Поля

    hashtag
    localizationCode

    Язык SDK (если язык не указывается, локаль устанавливается автоматически).

    hashtag
    host

    Хост, к которому обращается система для проверки Liveness.

    hashtag
    attemptSettings

    Количество попыток выполнения анализов, после которого SDK выдаст ошибку.

    hashtag
    version

    Версия SDK.

    hashtag
    OZLivenessDelegate

    Делегат OZSDK.

    hashtag
    Методы

    hashtag
    onOZLivenessResult

    Запрашивает результаты проверки Liveness.

    Возвращает

    -

    hashtag
    onError

    Обрабатывает ошибки.

    Возвращает

    -

    hashtag
    AnalysisRequest

    Протокол для выполнения проверок.

    hashtag
    Методы

    hashtag
    AnalysisRequestBuilder

    Создает инстанс AnalysisRequest.

    Возвращает

    Инстанс AnalysisRequest.

    hashtag
    addAnalysis

    Добавляет в AnalysisRequest анализы.

    Возвращает

    -

    hashtag
    uploadMedia

    Загружает медиафайл(ы) на сервер.

    Возвращает

    -

    hashtag
    addFolderId

    Добавляет идентификатор папки для загрузки на сервер.

    Возвращает

    -

    hashtag
    addFolderMeta

    Добавляет в папку метаданные.

    Возвращает

    -

    hashtag
    run

    Запускает анализы.

    Возвращает

    Результат проверок или ошибку.

    hashtag
    Customization

    Настройки кастомизации OzLivenessSDK (используйте OZSDK.customization).

    hashtag
    toolbarCustomization

    Настройки кастомизации верхней панели.

    hashtag
    centerHintCustomization

    Настройки кастомизации текста подсказки, ориентируясь на который, пользователь снимает фото или видео.

    hashtag
    hintAnimationCustomization

    Настройки кастомизации для анимации подсказки.

    hashtag
    faceFrameCustomization

    Настройки кастомизации рамки вокруг лица.

    hashtag
    backgroundCustomization

    Настройки кастомизации фона за рамкой.

    hashtag
    versionCustomization

    Настройки кастомизации текста версии SDK.

    hashtag
    antiscamCustomization

    Настройки защиты от мошенников – сообщения, предупреждающего человека о том, что его снимают.

    hashtag
    logoCustomization

    Параметры настройки логотипа, если лицензия предусматривает возможность его изменения. По умолчанию логотип расположен в нижнем левом углу.

    hashtag
    Переменные и объекты

    hashtag
    enum LicenseSource

    Источник лицензии.

    hashtag
    struct LicenseData

    Полная информация о лицензии

    hashtag
    enum OzVerificationMovement

    Действие, представленное на видео.

    hashtag
    enum OZLocalizationCode

    Код языка SDK в соответствии с .

    hashtag
    struct OZMedia

    Содержит информацию о медиафайле.

    Параметр
    Тип
    Описание

    hashtag
    enum MediaType

    Тип медиафайла.

    hashtag
    enum OZVerificationStatus

    Описание не актуально (deprecated) и будет удалено в будущих релизах.

    hashtag
    struct Analysis

    Содержит информацию о том, какие анализы и к каким медиафайлам применять.

    hashtag
    enum AnalysisType

    Тип анализа.

    circle-info

    В настоящее время для типа DOCUMENTS режим onDevice не поддерживается.

    hashtag
    enum AnalysisMode

    Режим анализа.

    hashtag
    enum ScenarioState

    Отображает статус обработки медиафайлов.

    hashtag
    struct AnalysisStatus

    Отображает статус загрузки файлов.

    hashtag
    RequestStatus

    Отображает промежуточный результат обработки анализов.

    hashtag
    ResultMedia

    Описывает результат анализа для одного медиафайла.

    hashtag
    RequestResult

    Сводный результат анализа для всех медиафайлов.

    hashtag
    class AnalysisResult

    Содержит результат проверок.

    hashtag
    enum AnalyseResolutionStatus

    Сводный статус по выполненным анализам.

    hashtag
    struct AnalyseResolution

    Содержит результаты одиночных анализов.

    hashtag
    enum GeometryType

    Форма рамки.

    hashtag
    enum LicenseError

    Возможные ошибки лицензирования.

    hashtag
    enum Connection

    Тип авторизации.

    hashtag
    struct UploadMediaSettings

    Настройки повторной отправки медиафайлов.

    Параметр
    Тип
    Описание

    hashtag
    enum SizeReductionStrategy

    Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа. По умолчанию отправляется сжатое видео.

    Case
    Description

    UIColor

    Цвет фона верхней панели

    titleText

    String

    Текст на верхней панели

    Bool

    Скрывает подложку подсказки

    backgroundCornerRadius

    Int

    Угловой радиус подложки

    CGFloat

    Толщина линии (в dp, 0-20)

    strokePadding

    CGFloat

    Отступ от рамки до овала, куда нужно поместить лицо (в dp, 0-10)

    UIColor

    Цвет подложки сообщения

    customizationAntiscamCornerRadius

    CGFloat

    Угловой радиус подложки

    customizationAntiscamFlashColor

    UIColor

    Цвет мигающего индикатора рядом с сообщением

    Поворот головы направо

    down

    Наклон головы вниз

    up

    Подъем головы наверх

    Испанский

    pt-BR

    Португальский (бразильский вариант)

    custom(String)

    Кастомный язык (код языка ISO 639-1, две буквы)

    bestShotURL

    URL

    URL лучшего кадра в формате PNG

    preferredMediaURL

    URL

    URL медиаконтейнера API

    timestamp

    Date

    Время окончания проверки

    Нельзя выполнить проверку, так как время, отведенное на съемку, закончилось

    failedBecauseOfLowMemory

    Нельзя выполнить проверку, так как не хватает памяти

    String

    Дополнительные параметры

    String

    Тип медиафайла: VIDEO / IMAGE / SHOT_SET

    media

    Анализируемый медиафайл

    error

    AnalysisError (наследуется от базового Error)

    Ошибка

    AnalysisError (наследуется от базового Error)

    Ошибка

    resultMedia

    []

    Список результатов анализов по отдельным медиафайлам

    confidenceScore

    Float

    Итоговая оценка

    serverRawResponse

    String

    Ответ сервера

    Результат анализов должен быть дополнительно перепроверен оператором

    Параметр

    Тип

    Описание

    licenseSources

    [LicenseSource]

    Источник лицензии

    Параметр

    Тип

    Описание

    licenseSource

    LicenseSource

    Источник лицензии

    Параметр

    Тип

    Описание

    apiConnection

    Connection

    Параметры авторизации

    Параметр

    Тип

    Описание

    eventsConnection

    Connection

    Параметры авторизации для телеметрии

    Параметр

    Тип

    Описание

    delegate

    OZLivenessDelegate

    Делегат Oz Liveness

    actions

    OzVerificationMovement

    Действие на видео

    cameraPosition (опционально)

    AVCaptureDevice.Position

    front – фронтальная камера (по умолчанию), back – основная камера

    Параметр

    Тип

    Описание

    actions

    OzVerificationMovement

    Действие на видео

    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

    OZMedia

    Массив медиафайлов

    folderMeta

    [String]

    Дополнительные метаданные папки

    Параметр

    Тип

    Описание

    OZLocalizationCode

    String

    Код локали

    Параметр

    Тип

    Описание

    host

    String

    Адрес хоста

    Параметр

    Тип

    Описание

    singleCount

    Int

    Количество попыток для одного действия/;tcnf

    commonCount

    Int

    Суммарное количество попыток для всех действий/жестов, если используется последовательность (комбо)

    faceAlignmentTimeout

    Float

    Время, в течение которого нужно поместить лицо в рамку

    uploadMediaSettings

    UploadMediaSettings

    Настройки повторной отправки медиафайлов

    Параметр

    Тип

    Описание

    version

    String

    Номер версии

    Параметр

    Тип

    Описание

    results

    [OzMedia]

    Массив объектов OzMedia

    Параметр

    Тип

    Описание

    status

    OZVerificationStatus

    Описание ошибки

    Параметр

    Тип

    Описание

    folderId (опционально)

    String

    Идентификатор папки; указывается только в том случае, если нужно загрузить файлы в определенную папку

    Параметр

    Тип

    Описание

    analysis

    Analysis

    Структура с информацией об анализах

    Параметр

    Тип

    Описание

    media

    OZMedia

    Объект или массив объектов 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

    Цвет текста на верхней панели

    Параметр

    Тип

    Описание

    textFont

    UIFont

    Шрифт текста подсказки

    textColor

    UIColor

    Цвет текста подсказки

    backgroundColor

    UIColor

    Цвет фона текста подсказки

    verticalPosition

    Int

    Положение подсказки по вертикали (от верхнего края экрана, в %, 0-100)

    Параметр

    Тип

    Описание

    hideAnimation

    Bool

    Переключатель для отображения анимации, значение True скрывает анимацию

    animationIconSize

    CGfloat

    Размер стороны квадрата, в который вписана иконка анимации

    hintGradientColor

    UIColor

    Цвет градиента у рамки

    Параметр

    Тип

    Описание

    geometryType

    GeometryType

    Форма рамки: овал, прямоугольник, круг или квадрат

    cornerRadius

    CGFloat

    Угловой радиус прямоугольника/квадрата (в dp)

    strokeFaceNotAlignedColor

    UIColor

    Цвет рамки, когда лицо не в кадре

    strokeFaceAlignedColor

    UIColor

    Цвет рамки, когда лицо в кадре

    Параметр

    Тип

    Описание

    backgroundColor

    UIColor

    Цвет фона за рамкой

    Параметр

    Тип

    Описание

    textFont

    UIFont

    Шрифт текста версии SDK

    textColor

    UIColor

    Цвет текста версии SDK

    Parameter

    Type

    Description

    customizationEnableAntiscam

    Bool

    Включает защиту от мошенников

    customizationAntiscamTextMessage

    String

    Текст сообщения

    customizationAntiscamTextFont

    UIFont

    Шрифт текста сообщения

    customizationAntiscamTextColor

    UIColor

    Цвет текста сообщения

    Parameter

    Type

    Description

    image

    UIImage

    Изображение для лого

    size

    CGSize

    Размер лого (в dp)

    verticalPosition

    Int (0-100), по умолчанию: 100

    Смещение по вертикали

    horizontalPosition

    Int (0-100), по умолчанию: 0

    Смещение по горизонтали

    Значение

    Описание

    licenseFilePath

    Абсолютный путь к лицензии (String)

    licenseFileName

    Имя файла лицензии

    Параметр

    Тип

    Описание

    appIDS

    [String]

    Массив идентификаторов приложений

    expires

    TimeInterval

    Период времени, спустя который срок действия лицензии истечет

    features

    Features

    Особенности лицензии

    configs (опционально)

    ABTestingConfigs

    Дополнительная конфигурация

    Значение

    Описание

    smile

    Улыбка

    eyes

    Моргание

    scanning

    Сканирование

    selfie

    Селфи с проверкой позиционирования лица

    one_shot

    Лучший кадр из снятого видео

    left

    Поворот головы налево

    Значение

    Описание

    en

    Английский

    ru

    Русский

    hy

    Армянский

    kk

    Казахский

    ky

    Кыргызский

    tr

    Турецкий

    movement

    OZVerificationMovement

    Действие на видео

    mediaType

    MediaType

    Тип медиафайла

    metaData

    [String]

    Метаданные, если есть

    videoURL

    URL

    Значение

    Описание

    movement

    Видео/фото с действием

    documentBack

    Фото оборотной стороны документа

    documentFront

    Фото лицевой стороны документа

    Значение

    Описание

    userNotProcessed

    Проверка не была обработана

    failedBecauseUserCancelled

    Проверка была прервана пользователем.

    failedBecauseCameraPermissionDenied

    Нельзя выполнить проверку из-за отсутствия доступа к камере

    failedBecauseOfBackgroundMode

    Нельзя выполнить проверку, так как приложение было свернуто

    failedBecauseOfTimeout

    Нельзя выполнить проверку, так как время, отведенное на проверку, закончилось

    failedBecauseOfAttemptLimit

    Нельзя выполнить проверку, так как превышен лимит попыток

    Параметр

    Тип

    Описание

    media

    [OzMedia]

    Массив объектов OzMedia

    type

    AnalysisType

    Тип анализа

    mode

    AnalysisMode

    Режим анализа

    sizeReductionStrategy

    SizeReductionStrategy

    Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа.

    Значение

    Описание

    biometry

    Позволяет сравнить несколько фото или видео и оценить уровень схожести запечатленных на них людей.

    quality

    Проверяет наличие живого человека в кадре

    document

    Определяет наличие документа в кадре и проверяет корректность полей документа согласно его типу.

    blacklist

    Сравнивает лицо снятого на фото или видео человека с лицами из заранее созданной базы медиафайлов

    Значение

    Описание

    onDevice

    Анализ на устройстве

    serverBased

    Анализ на сервере

    hybrid

    Гибридный анализ для Liveness: если итоговая оценка анализа на устройстве больше определенного порога, медиафайл дополнительно анализируется на сервере.

    Значение

    Описание

    addToFolder

    Система создает папку и помещает в нее медиафайлы

    addAnalyses

    Система добавляет анализы

    waitAnalysisResult

    Система ожидает результата

    Параметр

    Тип

    Описание

    media

    OzMedia

    Объект, который загружается в данный момент

    index

    Int

    Номер объекта в списке

    from

    Int

    Количество объектов

    progress

    Progress

    Статус загрузки

    Параметр

    Тип

    Описание

    status

    ScenarioState

    Статус обработки анализов

    progressStatus

    AnalysisStatus

    Статус загрузки медиафайла

    Параметр

    Тип

    Описание

    resolution

    AnalysisResolutionStatus

    Общий результат анализа

    sourceId

    String

    Идентификатор медиафайла на сервере

    isOnDevice

    Bool

    Режим анализа

    confidenceScore

    Float

    Итоговая оценка

    Параметр

    Тип

    Описание

    resolution

    AnalysisResolutionStatus

    Сводный результат анализов

    folderId

    String

    Идентификатор

    analysisResults

    [AnalysisResult]

    Результаты анализов

    Параметр

    Тип

    Описание

    resolution

    AnalysisResolutionStatus

    Общий результат анализа

    type

    AnalysisType

    Тип анализа

    mode

    AnalysisMode

    Режим анализа

    analysisId

    String

    Идентификатор анализа

    Значение

    Описание

    INITIAL

    Анализы не назначались

    PROCESSING

    Анализы выполняются

    FAILED

    Один или более анализов не удалось завершить из-за ошибок

    FINISHED

    Анализы выполнены

    DECLINED

    Проверка не пройдена (лица не совпадают или замечена спуфинг-атака)

    SUCCESS

    Проверка успешно пройдена

    Параметр

    Тип

    Описание

    analyseResolutionStatus

    AnalyseResolutionStatus

    Статус анализа

    type

    AnalysisType

    Тип анализа

    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

    Интервал времени между попытками

    uploadOriginal

    Исходное видео

    uploadCompressed

    Сжатое видео

    uploadBestShot

    Полученный из видео лучший кадр

    uploadNothing

    Ничего (в этом случае на сервер не отправляется ничего, папка не создается)

    LicenseError
    ISO 639-1arrow-up-right

    backgroundColor

    hideTextBackground

    strokeWidth

    customizationAntiscamBackgroundColor

    right

    es

    URL видео с проверкой Liveness

    failedBecausePreparingTimout

    params (опционально)

    mediaType

    error

    OPERATOR_REQUIRED

    OZMedia
    ResultMedia

    Методы и поля Android SDK

    hashtag
    OzLivenessSDK

    Синглтон (шаблон-одиночка) для Oz SDK.

    hashtag
    clearActionVideos

    Удаляет все видеоролики.

    Параметры

    -

    Возвращает

    -

    hashtag
    createStartIntent

    Создает намерение (intent) для запуска Liveness.

    Возвращает

    -

    hashtag
    getErrorFromIntent

    Запрашивает ошибку из намерения (intent) OnActivityResult (при наличии).

    Возвращает

    Текст ошибки.

    hashtag
    getLicensePayload

    Запрашивает информацию о лицензии SDK.

    Параметры

    -

    Возвращает

    Полную информацию о лицензии – объект .

    hashtag
    getResultFromIntent

    Запрашивает медиафайлы из намерения (intent) OnActivityResult.

    Возвращает

    Массив объектов .

    hashtag
    init

    Инициализирует SDK, используя данные лицензии.

    Возвращает

    -

    hashtag
    log

    Включает журналирование, запуская соответствующие механизмы Oz Liveness SDK.

    Возвращает

    -

    hashtag
    setApiConnection

    Подключение к API.

    hashtag
    setEventsConnection

    Подключение к серверу телеметрии.

    hashtag
    logout

    Удаляет сохраненный токен.

    Параметры

    -

    Возвращает

    -

    hashtag
    getEventSessionId

    Запрашивает идентификатор сессии телеметрии.

    Параметры

    -

    Возвращает

    Идентификатор сессии телеметрии (String).

    hashtag
    version

    Запрашивает версию SDK.

    Параметры

    -

    Возвращает

    Номер версии SDK (String).

    hashtag
    generateSignedPayload

    Создает payload с подписями медиафайлов.

    Возвращает

    payload для загрузки вместе с медиафайлами, для которых он был сгенерирован.

    hashtag
    AnalysisRequest

    Класс для выполнения проверок.

    hashtag
    run

    Запускает анализы.

    hashtag
    class Builder

    Конструктор для AnalysisRequest.

    hashtag
    build

    Создает AnalysisRequest.

    Параметры

    -

    Возвращает

    Экземпляр класса AnalysisRequest.

    hashtag
    addAnalysis

    Добавляет в запрос анализ.

    Возвращает

    Ошибку в случае ее появления.

    hashtag
    addAnalyses

    Добавляет в запрос список анализов (можно назначить несколько анализов для одной папки).

    Возвращает

    Ошибку в случае ее появления.

    hashtag
    addFolderMeta

    Добавляет метаданные в создаваемую папку (только для анализа на сервере).

    Возвращает

    Ошибку в случае ее появления.

    hashtag
    uploadMedia

    Добавляет один или несколько медиафайлов в папку для последующего выполнения проверок.

    Возвращает

    Ошибку в случае ее появления.

    hashtag
    setFolderId

    Устанавливает идентификатор для ранее созданной папки. Эта папка должна существовать на сервере, иначе создастся новая.

    Возвращает

    Ошибку в случае ее появления.

    hashtag
    OzConfig

    Конфигурация OzLivenessSDK (используйте OzLivenessSDK.config).

    hashtag
    setSelfieLength

    Устанавливает длительность жеста Селфи (в миллисекундах).

    Возвращает

    Ошибку в случае ее появления.

    hashtag
    allowDebugVisualization

    Возможность отображать дополнительную отладочную информацию при нажатии на текст версии.

    hashtag
    attemptSettings

    Количество попыток выполнить анализы, после которого SDK выдаст ошибку.

    hashtag
    baseURL

    URL сервера API для работы с телеметрией.

    hashtag
    faceAlignmentTimeout

    Время, в течение которого нужно поместить лицо в рамку и выполнить жест (в миллисекундах).

    hashtag
    uploadMediaSettings

    Настройки повторной отправки медиафайлов.

    hashtag
    livenessErrorCallback

    Интерфейс для обработки ошибок.

    hashtag
    localizationCode

    Локализация текста.

    Параметр
    Тип
    Описание

    hashtag
    logging

    Настройки журналирования.

    Параметр
    Тип
    Описание

    hashtag
    useMainCamera

    Включает использование основной (задней) камеры для съемки вместо фронтальной.

    hashtag
    disableFramesCountValidation

    Отключает опцию, которая запускает запись видео заново, если получившийся файл состоит из 3 кадров и менее.

    hashtag
    UICustomization

    Настройки кастомизации OzLivenessSDK (используйте OzLivenessSDK.config.customization).

    hashtag
    hideStatusBar

    Скрывает системные части экрана: полосу статуса и кнопки. По умолчанию имеет значение True.

    hashtag
    toolbarCustomization

    Настройки кастомизации верхней панели.

    hashtag
    centerHintCustomization

    Настройки кастомизации текста подсказки, ориентируясь на который, пользователь снимает фото или видео.

    hashtag
    hintAnimation

    Настройки кастомизации для анимации подсказки.

    hashtag
    faceFrameCustomization

    Настройки кастомизации рамки вокруг лица.

    hashtag
    backgroundCustomization

    Настройки кастомизации фона за рамкой.

    hashtag
    versionTextCustomization

    Настройки кастомизации текста версии SDK.

    hashtag
    antiscamCustomization

    Настройки кастомизации для защиты от мошенничества (сообщение о том, что идет запись).

    hashtag
    logoCustomization

    Параметры настройки логотипа, если лицензия предусматривает возможность его изменения. По умолчанию логотип расположен в нижнем левом углу.

    hashtag
    Переменные и объекты

    hashtag
    enum OzAction

    Действие, представленное на видео.

    hashtag
    class LicensePayload

    Содержит расширенную информацию о параметрах лицензии.

    hashtag
    sealed class OzAbstractMedia

    Класс для снятого фото или видео, может быть:

    hashtag
    OzDocumentPhoto

    Фото документа.

    hashtag
    OzShotSet

    Набор кадров (shot set) в архиве.

    hashtag
    OzVideo

    Видео с проверкой Liveness.

    hashtag
    enum OzMediaTag

    Тег в соответствии с жестом на видео.

    hashtag
    sealed class LicenseSource

    Класс для хранения лицензии, может быть:

    hashtag
    LicenseAssetId

    Содержит идентификатор лицензии.

    hashtag
    LicenseFilePath

    Содержит путь к лицензии.

    hashtag
    class AnalysisStatus

    Класс для статуса анализа, может быть:

    hashtag
    RunningAnalysis

    Статус означает, что анализы запущены.

    hashtag
    UploadingMedia

    Статус означает, что в настоящее время загружаются медиафайлы.

    hashtag
    enum Type

    Тип анализа.

    circle-info

    В настоящее время для типа DOCUMENTS режим ON_DEVICE не поддерживается.

    hashtag
    enum Mode

    Режим анализа.

    hashtag
    class Analysis

    Содержит информацию о том, какие анализы и к каким медиафайлам применять.

    hashtag
    enum Resolution

    Сводный статус по выполненным анализам.

    hashtag
    class OzAttemptsSettings

    Количество попыток выполнения анализов, после которого SDK выдаст ошибку.

    hashtag
    enum OzLocalizationCode

    Код языка SDK в соответствии с .

    hashtag
    class OzLogging

    Настройки журналирования.

    hashtag
    sealed class Color

    Настройки цвета, в зависимости от принимаемого значения могут быть:

    hashtag
    ColorRes

    hashtag
    ColorHex

    hashtag
    ColorInt

    hashtag
    enum GeometryType

    Форма рамки.

    hashtag
    class AnalysisError

    Класс для описания ошибок.

    hashtag
    class SourceMedia

    Описывает отправленный на анализ медиафайл.

    hashtag
    class ResultMedia

    Описывает результат анализа для одного медиафайла.

    hashtag
    class RequestResult

    Сводный результат анализа для всех медиафайлов.

    hashtag
    class AnalysisResult

    Описывает результаты анализов для всех медиафайлов в папке.

    hashtag
    class OzConnection

    Определяет метод авторизации.

    hashtag
    OzConnection.fromServiceToken

    Авторизация по токену.

    hashtag
    OzConnection.fromCredentials

    Авторизация по логину и паролю.

    hashtag
    class OzUploadMediaSettings

    Настройки повторной отправки медиафайлов.

    hashtag
    enum SizeReductionStrategy

    Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа. По умолчанию отправляется сжатое видео.

    hashtag
    Возможные ошибки

    Int

    Размер текста на верхней панели (в sp, 12-18)

    titleTextAlpha

    Int

    Непрозрачность текста на верхней панели (в %, 0-100)

    titleTextColor

    Цвет текста на верхней панели

    backgroundColor

    Цвет фона верхней панели

    backgroundAlpha

    Int

    Непрозрачность фона верхней панели (в %, 0-100)

    isTitleCentered

    Boolean

    Центрирует текст на верхней панели

    title

    String

    Текст на верхней панели

    Int

    Непрозрачность текста подсказки (в %, 0-100)

    verticalPosition

    Int

    Положение подсказки по вертикали (от нижнего края экрана, в %, 0-100)

    backgroundColor

    ​

    Цвет фона

    backgroundOpacity

    Int

    Непрозрачность фона

    backgroundCornerRadius

    Int

    Радиус скругления углов рамки фона (в dp, 0-20)

    Int

    Непрозрачность рамки (в %, 0-100)

    strokeWidth

    Int

    Толщина линии (в dp, 0-20)

    strokePadding

    Int

    Отступ от рамки до овала, куда нужно поместить лицо (в dp, 0-10)

    Int

    Непрозрачность текста сообщения (в %, 0-100)

    backgroundColor

    Цвет фона сообщения

    backgroundOpacity

    Int

    Непрозрачность фона сообщения

    cornerRadius

    Int

    Радиус скругления углов рамки фона (в px, 0-20)

    flashColor

    Цвет мигающего индикатора рядом с сообщением

    Подъем головы вверх

    EyeBlink

    Моргание

    Smile

    Улыбка

    String

    Дополнительные теги, если требуются (в том числе не из перечисления OzMediaTag)

    metaData

    Map<String, String>

    Метаданные медиафайлам

    Видео с жестом «подъем головы наверх»

    VideoSelfieDown

    Видео с жестом «наклон головы вниз»

    VideoSelfieRight

    Видео с жестом «поворот головы направо»

    VideoSelfieLeft

    Видео с жестом «поворот головы налево»

    PhotoIdPortrait

    Фото, извлеченное из документа

    PhotoIdBack

    Фото оборотной стороны документа

    PhotoIdFront

    Фото лицевой стороны документа

    Определяет размер файла, отправляемого на сервер после успешного завершения проверки на устройстве в составе гибридного анализа

    Испанский

    PT-BR

    Португальский

    List<String>

    Теги файла

    Тип анализа

    Float

    Итоговая оценка

    analysisId

    String

    Идентификатор анализа

    params

    @RawValue Map<String, Any>

    Дополнительные параметры папки

    error

    Ошибка

    serverRawResponse

    String

    Ответ сервера

    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 во время проверки

    Параметр

    Тип

    Описание

    actions

    OzAction

    Список возможных действий

    Параметр

    Тип

    Описание

    data

    Intent

    Проверяемое намерение

    Параметр

    Тип

    Описание

    data

    Intent

    Проверяемое намерение

    Параметр

    Тип

    Описание

    context

    Context

    Базовый класс Context

    licenseSources

    [LicenseSource]

    Список источников лицензий

    statusListener (опционально)

    StatusListener

    Обработчик для проверки результата

    Параметр

    Тип

    Описание

    tag

    String

    Метка сообщения

    log

    String

    Тело сообщения

    Параметр

    Тип

    Описание

    connection

    OzConnection

    Тип подключения

    statusListener

    StatusListener<String?>

    Обработчик

    Параметр

    Тип

    Описание

    connection

    OzConnection

    Тип подключения

    statusListener

    StatusListener<String?>

    Обработчик

    Параметр

    Тип

    Описание

    media

    OzAbstractMedia

    Массив медиафайлов

    folderMeta (опционально)

    [String: any]

    Дополнительные метаданные папки

    Параметр

    Тип

    Описание

    onStatusChange

    ,

    Callback-функция:

    onStatusChange(status: AnalysisRequest.AnalysisStatus) { handleStatus() }

    Вызывается при изменении статуса AnalysisRequest. Текущий статус отображается в AnalysisStatus.

    onError

    Callback-функция:

    onError(error: OzException) { handleError() }

    Вызывается в случае ошибки.

    onSuccess

    Callback-функция:

    onSuccess(result: RequestResult) {

    handleResults() }

    Вызывается по завершении анализов. В качестве результата передается объект RequestResult.

    Параметр

    Тип

    Описание

    analysis

    Analysis

    Структура с данными об анализе

    Параметр

    Тип

    Описание

    analysis

    [Analysis]

    Массив структур Analysis

    Параметр

    Тип

    Описание

    key

    String

    Ключ

    value

    String

    Значение

    Параметр

    Тип

    Описание

    mediaList

    [OzAbstractMedia]

    Объект или массив объектов OzAbstractMedia

    Параметр

    Тип

    Описание

    folderID

    String

    Идентификатор папки

    Параметр

    Тип

    Описание

    selfieLength

    Int

    Длительность жеста Селфи (в миллисекундах). Должна быть в пределах 500-5000, по умолчанию – 700

    Параметр

    Тип

    Описание

    allowDebugVisualization

    Boolean

    Включает / выключает отображение дополнительной информации

    Параметр

    Тип

    Описание

    attemptsSettings

    OzAttemptsSettings

    Количество попыток

    Параметр

    Тип

    Описание

    baseURL

    String

    Адрес сервера

    Параметр

    Тип

    Описание

    faceAlignmentTimeout

    Long

    Значение тайм-аута

    Parameter

    Type

    Description

    uploadMediaSettings

    OzUploadMediaSettings

    Устанавливает количество попыток и интервал между ними

    Параметр

    Тип

    Описание

    livenessErrorCallback

    ErrorHandler

    Callback для обработки ошибок

    localizationCode

    OzLocalizationCode

    Код языка SDK

    logging

    OzLogging

    Настройки журналирования

    Параметр

    Тип

    Описание

    useMainCamera

    Boolean

    True – используется основная камера,

    False – фронтальная

    Параметр

    Тип

    Описание

    disableFramesCountValidation

    Boolean

    True – опция отключена,

    False – опция включена

    Параметр

    Тип

    Описание

    closeIconRes

    Int (@DrawableRes)

    Иконка кнопки закрытия

    closeIconTint

    Color

    Цвет кнопки закрытия

    titleTextFont

    Int (@FontRes)

    Шрифт текста на верхней панели

    titleTextFontStyle

    Int (значения из android.graphics.Typeface, например Typeface.BOLD)

    Стиль шрифта текста на верхней панели

    Параметр

    Тип

    Описание

    textFont

    String

    Шрифт текста подсказки

    textStyle

    Int (значения из android.graphics.Typeface, например Typeface.BOLD)

    Стиль текста подсказки

    textSize

    Int

    Размер шрифта текста подсказки (в sp, 12-34)

    textColor

    ​Color​

    Цвет текста подсказки

    Параметр

    Тип

    Описание

    hintGradientColor

    Color

    Цвет градиента

    hintGradientOpacity

    Int

    Непрозрачность градиента

    animationIconSize

    Int

    Размер квадрата, в который вписан значок анимации

    hideAnimation

    Boolean

    Настройки скрытия анимации, при значении True анимация скрывается

    Параметр

    Тип

    Описание

    geometryType

    ​GeometryType​

    Форма рамки (oval, rectangle, circle или square)

    cornerRadius

    Int

    Угловой радиус прямоугольника (в dp, 0-20)

    strokeDefaultColor

    ​Color​

    Цвет рамки, когда лицо не в кадре

    strokeFaceInFrameColor

    ​Color​

    Цвет рамки, когда лицо в кадре

    Параметр

    Тип

    Описание

    backgroundColor

    ​Color​

    Цвет фона

    backgroundAlpha

    Int

    Непрозрачность фона (в %, 0-100)

    Параметр

    Тип

    Описание

    textFont

    Int (@FontRes)

    Шрифт текста версии SDK

    textSize

    Int

    SDK version text size (в sp, 12-16)

    textColor

    ​Color​

    Цвет текста версии SDK

    textAlpha

    Int

    Непрозрачность текста версии SDK (в %, 20-100)

    Параметр

    Тип

    Описание

    textMessage

    String

    Текст сообщения

    textFont

    String

    Шрифт текста сообщения

    textSize

    Int

    Размер шрифта сообщения (в px, 12-18)

    textColor

    Color

    Цвет текста сообщения

    Parameter

    Type

    Description

    image

    Bitmap (@DrawableRes)

    Изображение для лого

    size

    Size

    Размер лого (в dp)

    verticalPosition

    Int (0-100), по умолчанию: 100

    Смещение по вертикали

    horizontalPosition

    Int (0-100), по умолчанию: 0

    Смещение по горизонтали

    Значение

    Описание

    OneShot

    Лучший кадр из снятого видео

    Blank

    Селфи с проверкой позиционирования лица

    Scan

    Сканирование

    HeadRight

    Поворот головы направо

    HeadLeft

    Поворот головы налево

    HeadDown

    Наклон головы вниз

    Параметр

    Тип

    Описание

    expires

    Float

    Период времени, спустя который срок действия лицензии истечет

    features

    Features

    Особенности лицензии

    appIDS

    [String]

    Массив идентификаторов приложений

    Параметр

    Тип

    Описание

    tag

    OzMediaTag

    Тег для фото документа

    photoPath

    String

    Абсолютный путь к фото

    additionalTags (опционально)

    String

    Дополнительные теги, если требуются (в том числе не из перечисления OzMediaTag)

    metaData

    Map<String, String>

    Метаданные медиафайла

    Параметр

    Тип

    Описание

    tag

    OzMediaTag

    Тег для shot set

    archivePath

    String

    Путь к архиву

    additionalTags (опционально)

    String

    Дополнительные теги, если требуются (в том числе не из перечисления OzMediaTag)

    metaData

    Map<String, String>

    Метаданные медиафайла

    Параметр

    Тип

    Описание

    tag

    OzMediaTag

    Тег видео

    videoPath

    String

    URL видео с проверкой Liveness

    bestShotPath (optional)

    String

    URL лучшего кадра в формате PNG

    preferredMediaPath (optional)

    String

    URL медиаконтейнера API

    Значение

    Описание

    Blank

    Видео без определенного жеста

    PhotoSelfie

    Селфи-фото

    VideoSelfieOneShot

    Видео с извлекаемым лучшим кадром

    VideoSelfieScan

    Видео с жестом «сканирование»

    VideoSelfieEyes

    Видео с жестом «моргание»

    VideoSelfieSmile

    Видео с жестом «улыбка»

    Параметр

    Тип

    Описание

    id

    Int

    Идентификатор лицензии

    Параметр

    Тип

    Описание

    path

    String

    Абсолютный путь к лицензии

    Параметр

    Тип

    Описание

    analysis

    Analysis

    Информация о том, какие анализы и к каким медиафайлам применять.

    Параметр

    Тип

    Описание

    media

    OzAbstractMedia

    Объект, который загружается в данный момент

    index

    Int

    Номер объекта в списке

    from

    Int

    Количество объектов

    percentage

    Int

    Процент завершения

    Значение

    Описание

    BIOMETRY

    Позволяет сравнить несколько фото или видео и оценить уровень схожести запечатленных на них людей.

    QUALITY

    Проверяет наличие живого человека в кадре

    DOCUMENTS

    Определяет наличие документа в кадре и проверяет корректность полей документа согласно его типу.

    Значение

    Описание

    ON_DEVICE

    Анализ на устройстве. Мы рекомендуем использовать режим анализа на сервере, поскольку он обеспечивает более точные результаты

    SERVER_BASED

    Анализ на сервере

    HYBRID

    Гибридный анализ для Liveness: если итоговая оценка анализа на устройстве больше определенного порога, медиафайл дополнительно анализируется на сервере

    Параметр

    Тип

    Описание

    type

    Type

    Тип анализа

    mode

    Mode

    Режим анализа

    mediaList

    [OzAbstractMedia]

    Массив объектов OzAbstractMedia

    params (опционально)

    Map<String, Any>

    Дополнительные параметры

    Значение

    Описание

    FAILED

    Один или более анализов не удалось завершить из-за ошибок

    DECLINED

    Проверка не пройдена (лица не совпадают или замечена спуфинг-атака)

    SUCCESS

    Проверка успешно пройдена

    OPERATOR_REQUIRED

    Результат анализов должен быть дополнительно перепроверен оператором

    Параметр

    Тип

    Описание

    singleCount

    Int

    Количество попыток для одного действия/жеста

    commonCount

    Int

    Суммарное количество попыток для всех действий/жестов, если используется последовательность (комбо)

    Значение

    Описание

    EN

    Английский

    RU

    Русский

    HY

    Армянский

    KK

    Казахский

    KY

    Кыргызский

    TR

    Турецкий

    Параметр

    Тип

    Описание

    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

    OzAbstractMedia

    Медиафайл

    Параметр

    Тип

    Описание

    confidenceScore

    Float

    Итоговая оценка

    isOnDevice

    Boolean

    Режим анализа

    resolution

    Resolution

    Общий результат анализа

    sourceMedia

    SourceMedia

    Анализируемый медиафайл

    Параметр

    Тип

    Описание

    analysisResults

    List<AnalysisResult>

    Результат анализа

    folderId

    String

    Идентификатор

    resolution

    Resolution

    Общий результат анализа

    Параметр

    Тип

    Описание

    resolution

    Resolution

    Общий результат анализа

    type

    Type

    Тип анализа

    mode

    Mode

    Режим анализа

    resultMedia

    List<ResultMedia>

    Список результатов отдельных анализов

    Параметр

    Тип

    Описание

    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.

    Жесты на видео не найдены

    LicensePayload
    OzAbstractMedia
    ISO 639-1arrow-up-right

    titleTextSize

    textAlpha

    strokeAlpha

    textAlpha

    HeadUp

    additionalTags (опционально)

    VideoSelfieHigh

    sizeReductionStrategy

    ES

    tags

    type

    confidenceScore

    FORCE_CLOSED = 7

    Color
    Color
    Color
    Color
    Color
    SizeReductionStrategy
    Type
    AnalysisError