All pages
Powered by GitBook
1 of 9

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для всех SDK

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

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

здесь
здесь
веб-консолью
руководстве разработчика
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)
    }
}

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

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

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

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

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

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

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

Как интегрировать серверную проверку 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 логирование подключается автоматически. Для локальных установок мы предоставим вам необходимые учетные данные.

Android

1. Добавьте SDK в проект

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

В build.gradle модуля добавьте строки:

2. Инициализируйте SDK

Переименуйте файл лицензии в forensics.license и поместите его в папку res/raw в вашем проекте.

3. Подключите SDK к Oz API

Вам потребуются полученные от нас логин, пароль и адрес API-сервера.

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

4. Add face recording

Для начала съемки используйте метод startActivityForResult:

Для получения готового видео используйте onActivityResult:

Готовые видео содержатся в объекте sdkMediaResult.

5. Запустите анализы

Для запуска анализов используйте код ниже. mediaList – массив объектов, полученных из sdkMediaResult или извне (если вы снимали видео без использования нашего SDK).

iOS

1. Добавьте SDK в проект

Установите OZLivenessSDK через . Чтобы встроить SDK в проект Xcode, в Podfile добавьте:

2. Инициализируйте SDK

Переименуйте файл лицензии в forensics.license и поместите его в проект.

3. Подключите SDK к Oz API

Вам потребуются полученные от нас логин, пароль и адрес API-сервера.

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

4. Запустите съемку видео

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

В делегате используйте протокол OZLivenessDelegate:

5. Запустите анализы

Для запуска анализов используйте AnalysisRequestBuilder. Метод run «под капотом» обратится к Oz API.

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

В руководстве разработчика вы также найдете инструкции по настройке внешнего вида SDK и список методов SDK как для iOS, так и для Android:

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

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

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

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

Demo app в PlayMarket

Demo app в TestFlight

на нашем веб-сайте
свяжитесь с нами
метода авторизации
CocoaPods
метода авторизации
веб-консолью
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)
    }
}

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

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

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

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

  • Высокое качество видео, которое обеспечивает точность проверки 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

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

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

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

Дальнейшие шаги описаны в :

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

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

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

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

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

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

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

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

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

здесь
веб-консолью
видео в MP4
результатов анализов
руководстве разработчика по Web Plugin
здесь
Angular
React
<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);
  }
});

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

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

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

Oz Liveness Mobile SDK – это:

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

  • Высокое качество видео, которое обеспечивает точность проверки Liveness.

Для работы Oz Liveness Mobile SDK нужна лицензия, которая привязывается к bundle_id приложения, например com.yourcompany.yourapp. Тестовую лицензию на месяц вы можете оформить самостоятельно , если вам требуется лицензия на более длительный срок – .

Android

1. Добавьте SDK в проект

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

В build.gradle модуля добавьте строки

2. Инициализируйте SDK

Переименуйте файл лицензии в forensics.license и поместите его в папку res/raw в вашем проекте.

3. Запустите съемку видео

Для начала съемки используйте метод startActivityForResult:

Для получения готового видео используйте метод onActivityResult:

Готовые видео содержатся в объекте sdkMediaResult.

4. Запустите анализы

Для запуска анализов используйте код ниже. mediaList – массив объектов, полученных из sdkMediaResult или извне (если вы снимали видео без использования нашего SDK).

iOS

1. Добавьте SDK в проект

Установите OZLivenessSDK через . Чтобы встроить SDK в проект Xcode, в Podfile добавьте:

2. Инициализируйте SDK

Переименуйте файл лицензии в forensics.license и поместите его в проект.

3. Запустите съемку видео

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

В делегате используйте протокол OZLivenessDelegate:

4. Запустите анализы

Для запуска анализов используйте AnalysisRequestBuilder.

Шаги выше помогут вам в базовой интеграции наших мобильных SDK в ваше приложение. Данные анализов, выполненных в режиме «на устройстве» никуда не отправляются, поэтому, в отличие от данных серверных проверок, они не будут доступны через API или в веб-консоли. Однако обратите внимание: для проверки лицензии потребуется подключение к интернету. Мы также рекомендуем использовать наш сервис логирования – телеметрию. Записи телеметрии помогают в расследовании деталей атак. Необходимые учетные данные мы предоставим.

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

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

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

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

Demo app в PlayMarket

Demo app в TestFlight

на нашем веб-сайте
свяжитесь с нами
CocoaPods
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
);
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(); }
    });
}
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)
    }
}

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

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

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

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

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

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

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

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

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

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

Android:

iOS:

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

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

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

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

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

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

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

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

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

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

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

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

Интеграция Oz Liveness Mobile SDK
здесь
метод
метод
запрос
6KB
Face Matching with a Reference Photo.postman_collection.json
Open
веб-консолью
руководстве разработчика
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"
        }
    ]
}