> For the complete documentation index, see [llms.txt](https://doc.ozforensics.com/oz-knowledge-ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.ozforensics.com/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/sdk/oz-mobile-sdk/android/vypolnenie-proverok.md).

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

{% hint style="info" %}
Если наш SDK используется только для съемки, пропустите этот шаг.
{% endhint %}

## OzCapsula (SDK версии 8.22 и новее)

Отправьте зашифрованный контейнер на ваш собственный бэкенд в виде необработанных байтов (`application/octet-stream`). Ваш бэкенд передает его в Oz API и возвращает ответ с результатом анализа.

{% hint style="warning" %}
**Не** запускайте анализ напрямую из мобильного SDK. При интеграции со встроенным SDK вызов анализа должен проходить через ваш собственный бэкенд.
{% endhint %}

{% hint style="danger" %}
Код ниже приведен для иллюстрации — `YourBackend.uploadOzContainer(...)` **не** является частью Oz SDK. Вы реализуете этот метод самостоятельно в клиенте вашего бэкенда; Oz SDK не предоставляет хелпер для загрузки для этого пути интеграции.
{% endhint %}

```kotlin
private fun handleContainer(container: DataContainer?) {
    if (container == null) return

    YourBackend.uploadOzContainer(
        container = container.getBytes(),
        contentType = "application/octet-stream"
    )
}
```

Далее ваш бэкенд должен передать контейнер в Oz API, как описано [здесь](/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/api/oz-api/rabota-s-konteinerom-dannykh-ozcapsula.md).

<details>

<summary>Прежний способ: метод <code>run</code> (прямое взаимодействие SDK с API). Внимание: использование данного метода менее безопасно, чем использование вашего бэкенда в качестве посредника, как показано выше</summary>

В результате съемки видео вы получили контейнер данных со всей необходимой информацией. Отправьте его на анализ с помощью методов `addContainer(container)` и `run`.

{% code title="Kotlin" %}

```kotlin
private fun runAnalysis(container: DataContainer?) {
    if (container == null) return
    AnalysisRequest.Builder()
        .addContainer(container)
        .build()
        .run(
            { result ->
                val isSuccess = result.analysisResults.all { it.resolution == Resolution.SUCCESS }
            },
            { /* show error */ },
            { /* update status */ },
        )
}
```

{% endcode %}

</details>

## SDK версии до 8.21 включительно

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

{% hint style="info" %}
Как интерпретировать результаты анализов, описано здесь: [Типы анализов](/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/api/oz-api/types-of-analyzes.md).
{% endhint %}

Пример работы:

{% tabs %}
{% tab title="Kotlin" %}

```kotlin
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) //или ваш обработчик ошибок 
        }
    })
```

{% endtab %}

{% tab title="Java" %}

```java
analysisCancelable = new AnalysisRequest.Builder()
//mediaToAnalyze – массив объектов OzAbstractMedia
        .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); } //или ваш обработчик шагов сценария 
        });
```

{% endtab %}
{% endtabs %}

Для удаления медиафайлов после выполнения всех проверок используйте метод `clearActionVideos`.

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

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

{% tabs %}
{% tab title="Kotlin" %}

```kotlin
    .addFolderMeta(
        mapOf(
            "key1" to "value1",
            "key2" to "value2"
        )
    )
```

{% endtab %}

{% tab title="Java" %}

<pre class="language-java"><code class="lang-java"><strong>.addFolderMeta(Collections.singletonMap("key", "value")) 
</strong></code></pre>

{% endtab %}
{% endtabs %}

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

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

```java
mapOf("extract_best_shot" to true)
```

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

Чтобы использовать медиафайлы, снятые не Oz Android SDK, укажите путь к ним в структуре [OzAbstractMedia](https://doc.ozforensics.com/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/sdk/oz-mobile-sdk/android/pages/GlyZwHmfP4TpgDOnHlBh#h.s2ye0si7dzc2):

```java
       val file = File(context.filesDir, "media.mp4") // замените context.filesDir на context.getExternalFilesDir(null) для внешнего хранилища смартфона
       val media = OzAbsractMedia.OzVideo(OzMediaTag.VideoSelfieSmile, file.absolutePath)
```

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

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

```kotlin
    .setFolderId(folderId)
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.ozforensics.com/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/sdk/oz-mobile-sdk/android/vypolnenie-proverok.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
