Перейти к основному содержимому
Версия: 1.18.0 (последняя)

API запросы для работы с попыткой

Запрос на получение списка попыток

Данный запрос возвращает список попыток (endeavor) в разрезе внешних ссылок в формате страниц. Поддерживается фильтрация по временному диапазону создания попыток. Результаты сортируются по времени создания; направление сортировки можно изменять.

Схема запроса:
GET /lrs/endeavor?sort_order={sort_order}&page={page_number}&page_size={page_size}

Параметры запроса

ПараметрОписание
sort_orderПорядок сортировки по времени создания. Возможные значения: asc (по возрастанию), desc (по убыванию). Обязательный.
pageНомер запрашиваемой страницы. Минимальное значение: 1. Обязательный.
page_sizeКоличество элементов на странице. Допустимый диапазон: от 1 до 100. Обязательный.
external_linkФильтр по внешней ссылке. Если не указан, возвращаются все попытки, у которых external_link равен null.
start_dateНижняя граница временного диапазона создания попыток (включительно).
end_dateВерхняя граница временного диапазона создания попыток (не включительно).

Заголовки запроса

ЗаголовокОписание
tokenТокен сервиса video-recorder. Хранится в секрете video-recorder-token в файле ./cfg/video-recorder.secrets.json.

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

curl -X 'GET' \
'http://192.168.10.1/lrs/endeavor?sort_order=asc&page=1&page_size=1' \
-H 'accept: application/json' \
-H 'token: token'

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

{
"page": 1,
"page_size": 1,
"total_count": 8,
"endeavor_list": [
{
"id": "e4823024-d578-4285-9d3b-0471a4f720b2",
"external_link": null,
"content": [
{
"id": "5e77c40a-f45e-4a7e-ade8-8f676bc691f1",
"files": [
{
"s3_link": "lr.videos:motion_control_video-26-07-06-12_38_10-no-parent-e4823-5e77c.webm",
"raw_data_in_base64": null
}
],
"type": 1,
"parent_id": null,
"info": {
"motion_control_result": [
{ "result": true, "pattern": "right" },
{ "result": true, "pattern": "left" },
{ "result": true, "pattern": "left" }
]
},
"exception_info": null,
"creation_date": "2026-07-06T12:38:10.960546Z",
"last_modified": "2026-07-06T12:38:10.960546Z"
},
{
"id": "ac16bccc-478e-48ec-80e6-7cd0666a5e83",
"files": [
{
"s3_link": "lr.ref-images:reference_frame-26-07-06-12_38_10-5e77c-e4823-ac16b.jpeg",
"raw_data_in_base64": null
}
],
"type": 3,
"parent_id": "5e77c40a-f45e-4a7e-ade8-8f676bc691f1",
"info": {
"angles": [0, -2],
"image_info": {
"quality": {
"value": true,
"failed_checks": null
},
"deepfake": {
"confidence": 0.00021070241928100586
},
"liveness": {
"value": "real",
"confidence": 0.9773591756820679,
"attack_type": "none",
"attack_type_scores": {
"none": 0.9773591756820679,
"photo": 0.0008513810934558892,
"replay": 0.007360487079161384,
"2d_mask": 0.0008028665221645174,
"3d_mask": 0.0017056756156491595,
"regions": 0.011920414007501181
}
}
},
"frame_number": 128
},
"exception_info": null,
"creation_date": "2026-07-06T12:38:10.960546Z",
"last_modified": "2026-07-06T12:38:10.960546Z"
},
{
"id": "ce79a10b-26c1-4ccb-9c21-6f5439569a77",
"files": [],
"type": 5,
"parent_id": null,
"info": {
"verification_info": {
"fa_r": 0,
"fr_r": 0.6750852465629578,
"score": 0.9856855273246765,
"distance": 2339
}
},
"exception_info": null,
"creation_date": "2026-07-06T12:38:12.671648Z",
"last_modified": "2026-07-06T12:38:12.671648Z"
}
],
"creation_date": "2026-07-06T12:37:58.219058Z",
"last_modified": "2026-07-06T12:37:58.219058Z"
}
]
}

Ответ содержит следующие поля:

ПолеОписание
pageНомер текущей страницы (соответствует переданному в запросе).
page_sizeКоличество элементов на странице (соответствует переданному в запросе).
total_countОбщее количество попыток, удовлетворяющих критериям фильтрации.
endeavor_listМассив попыток на текущей странице. Подробнее об объекте попытки можно узнать в этом разделе

Запрос на получение конкретной попытки по id

Данный запрос возвращает попытку (endeavor) по её id. ID попытки можно получить через callback-и веб-компоненты.

Схема запроса:
GET /lrs/endeavor/{endeavor_id}

Заголовки запроса

ЗаголовокОписание
tokenТокен сервиса video-recorder. Хранится в секрете video-recorder-token в файле ./cfg/video-recorder.secrets.json..

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

curl -X 'GET' \
'http://192.168.10.1/lrs/endeavor/e4823024-d578-4285-9d3b-0471a4f720b2' \
-H 'accept: application/json' \
-H 'token: token'

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

{
"id": "e4823024-d578-4285-9d3b-0471a4f720b2",
"external_link": null,
"content": [
{
"id": "5e77c40a-f45e-4a7e-ade8-8f676bc691f1",
"files": [
{
"s3_link": "lr.videos:motion_control_video-26-07-06-12_38_10-no-parent-e4823-5e77c.webm",
"raw_data_in_base64": null
}
],
"type": 1,
"parent_id": null,
"info": {
"motion_control_result": [
{
"result": true,
"pattern": "right"
},
{
"result": true,
"pattern": "left"
},
{
"result": true,
"pattern": "left"
}
]
},
"exception_info": null,
"creation_date": "2026-07-06T12:38:10.960546Z",
"last_modified": "2026-07-06T12:38:10.960546Z"
},
{
"id": "ac16bccc-478e-48ec-80e6-7cd0666a5e83",
"files": [
{
"s3_link": "lr.ref-images:reference_frame-26-07-06-12_38_10-5e77c-e4823-ac16b.jpeg",
"raw_data_in_base64": null
}
],
"type": 3,
"parent_id": "5e77c40a-f45e-4a7e-ade8-8f676bc691f1",
"info": {
"angles": [
0,
-2
],
"image_info": {
"quality": {
"value": true,
"failed_checks": null
},
"deepfake": {
"confidence": 0.00021070241928100586
},
"liveness": {
"value": "real",
"confidence": 0.9773591756820679,
"attack_type": "none",
"attack_type_scores": {
"none": 0.9773591756820679,
"photo": 0.0008513810934558892,
"replay": 0.007360487079161384,
"2d_mask": 0.0008028665221645174,
"3d_mask": 0.0017056756156491595,
"regions": 0.011920414007501181
}
}
},
"frame_number": 128
},
"exception_info": null,
"creation_date": "2026-07-06T12:38:10.960546Z",
"last_modified": "2026-07-06T12:38:10.960546Z"
},
{
"id": "ce79a10b-26c1-4ccb-9c21-6f5439569a77",
"files": [],
"type": 5,
"parent_id": null,
"info": {
"verification_info": {
"fa_r": 0,
"fr_r": 0.6750852465629578,
"score": 0.9856855273246765,
"distance": 2339
}
},
"exception_info": null,
"creation_date": "2026-07-06T12:38:12.671648Z",
"last_modified": "2026-07-06T12:38:12.671648Z"
}
],
"creation_date": "2026-07-06T12:37:58.219058Z",
"last_modified": "2026-07-06T12:37:58.219058Z"
}

Запрос на получение контента по S3 ссылке

Данный запрос возвращает бинарный контент по S3 ссылке. S3 ссылку можно получить из попытки.

Схема запроса:
GET /lrs/get_content/{content_link}

Заголовки запроса

ЗаголовокОписание
tokenТокен сервиса video-recorder. Хранится в секрете video-recorder-token в файле ./cfg/video-recorder.secrets.json..

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

curl -X 'GET' \
'http://192.168.10.1/lrs/get_content/lr.ref-images%3Areference_frame-26-07-06-12_38_10-5e77c-e4823-ac16b.jpeg' \
-H 'accept: application/json' \
-H 'token: token'

API-запросы для ручной обработки фото

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

Запрос на обнаружение лица на изображении

Данный запрос выполняет детекцию лица на переданной фотографии и возвращает его координаты и ключевые точки.

Схема запроса:
POST /face-detector-face-fitter/v2/process/image

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

curl -X 'POST' \
'http://192.168.10.1/face-detector-face-fitter/v2/process/image' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'image=@MinimumIMG.jpeg;type=image/jpeg'

Параметры тела запроса (multipart/form-data)

ПараметрОписание
imageИзображение для обработки. Поддерживаемые форматы: jpeg, png. Обязательный.

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

{
"_image": {
"blob": "/9j/4A...",
"format": "IMAGE"
},
"objects": [
{
"keypoints": {
....
},
"pose": {
"yaw": -8.746259689331055,
"roll": -0.09920386970043182,
"pitch": 2.89003586769104
},
"confidence": 0.8694550395011902,
"id": 0,
"bbox": [
0.2,
0.21,
0.8466666666666667,
0.8433333333333334
],
"class": "face"
}
]
}

Структура ответа

ПолеОписание
_imageИсходное изображение, переданное на вход, в формате Base64.
objectsСписок объектов, обнаруженных на изображении, с результатами их обработки. Если список пуст, детектор не обнаружил ни одного лица.
objects[*].bboxГраницы обнаруженного лица, заданные в относительных координатах (нормированных от 0 до 1) в порядке [x1, y1, x2, y2]. Для перевода в абсолютные пиксельные координаты необходимо умножить x-коэффициенты на ширину исходного изображения, а y-коэффициенты — на его высоту.

Запрос на детекцию лица и построение шаблона

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

Схема запроса:
POST /face-detector-template-extractor/v2/process/image

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

curl -X 'POST' \
'http://192.168.10.1/face-detector-template-extractor/v2/process/image' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'image=@MinimumIMG.jpeg;type=image/jpeg'

Параметры тела запроса (multipart/form-data)

ПараметрОписание
imageИзображение для обработки. Поддерживаемые форматы: jpeg, png. Обязательный.

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

{
"_image": {
"blob": "/9j/4....",
"format": "IMAGE"
},
"objects": [
{
"template": {
"_face_template_extractor_1000_12": {
"blob": "qjdp2UD...",
"format": "NDARRAY",
"dtype": "uint8",
"shape": [296]
}
},
"confidence": 0.8694550395011902,
"id": 0,
"bbox": [0.2, 0.21, 0.8466666666666667, 0.8433333333333334],
"class": "face",
"keypoints": { ... },
"pose": { ... }
}
]
}

Структура ответа

ПолеОписание
_imageИсходное изображение, переданное на вход, в формате Base64.
objectsСписок объектов, обнаруженных на изображении, с результатами их обработки. Если список пуст, детектор не обнаружил ни одного лица.
objects[*].templateИнформация о биометрическом шаблоне, включая его бинарные данные в формате Base64.

Запрос на оценку живости по изображению

Данный запрос выполняет проверку живости (liveness) для ранее обнаруженного лица на фотографии.

Схема запроса:
POST /liveness-estimator/v2/process/sample

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

curl -X 'POST' \
'http://192.168.10.1/liveness-estimator/v2/process/sample' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"objects": [
...
]
}'

Параметры тела запроса (application/json)

На вход подаётся результат выполнения запроса на детекцию лица или построение шаблона. Тело запроса должно содержать:

ПолеОписание
_imageИсходное изображение в формате Base64, переданное на вход предыдущему обработчику.
objectsСписок обнаруженных объектов (должен содержать как минимум одно лицо). Если список пуст, алгоритм не сможет выполнить оценку живости.

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

{
"_image": {
"blob": "/9j/4AAQSkZJRg...",
"format": "IMAGE"
},
"objects": [
{
"keypoints": {...},
"pose": {...},
"confidence": 0.8694550395011902,
"id": 0,
"bbox": [...],
"class": "face"
}
]
}

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

{
"_image": {
"blob": "/9j/4AAQSkZJ...",
"format": "IMAGE"
},
"objects": [
{
"keypoints": {...},
"pose": {...},
"confidence": 0.8694550395011902,
"id": 0,
"bbox": [...],
"class": "face",
"liveness": {
"confidence": 0.9966132640838623,
"value": "real",
"attack_type": "none",
"attack_type_scores": {
"none": 0.9966132640838623,
"replay": 0.000978723779512078,
"photo": 0.0021829818897145916,
"regions": 9.736091756044222e-05,
"2d_mask": 9.789085341223873e-05,
"3d_mask": 2.977847593834453e-05
}
}
}
]
}

Структура ответа

В ответе возвращается тот же объект _image и дополненный список objects. Для каждого обнаруженного лица добавляется блок liveness:

ПолеОписание
objects[*].liveness.valueВердикт алгоритма живости: "real" — живой человек.
objects[*].liveness.confidenceУверенность алгоритма, что на фото живой человек. Чем выше, тем лучше.
objects[*].liveness.attack_typeРаспознанный тип атаки ("none" — атаки нет).
objects[*].liveness.attack_type_scoresУверенность алгоритма по каждому типу атаки.

Запрос на сравнение шаблонов

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

Схема запроса:
POST /verify-matcher/v2/process/sample

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

curl -X 'POST' \
'http://192.168.10.1/verify-matcher/v2/process/sample' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"objects": [
...
]
}'

Параметры тела запроса (application/json)

На вход подаётся список из двух шаблонов, подлежащих сравнению. Порядок элементов не важен.

Тело запроса содержит поле objects — массив объектов с шаблонами. Каждый объект должен содержать:

ПолеОписание
templateБиометрический шаблон. Значение должно быть скопировано целиком из поля template ответа API построения шаблонов.
classТип объекта. Всегда должен иметь значение face.

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

{
"objects": [
{
"template": {
"_face_template_extractor_1000_12": {
"blob": "qjdp...",
"format": "NDARRAY",
"dtype": "uint8",
"shape": [296]
}
},
"class": "face"
},
{
"template": {
"_face_template_extractor_1000_12": {
"blob": "qjdp...",
"format": "NDARRAY",
"dtype": "uint8",
"shape": [296]
}
},
"class": "face"
}
]
}

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

{
"objects": [
...
],
"verification": {
"distance": 0,
"fa_r": 0,
"fr_r": 0.9825811982154846,
"score": 0.9773591756820679
}
}

Структура ответа

ПолеОписание
objectsСписок объектов, переданных на вход (возвращается без изменений).
verificationРезультат сравнения двух шаблонов.
verification.scoreУверенность алгоритма в том, что лица принадлежат одному человеку. Чем выше значение, тем выше вероятность совпадения.

Структура объекта попытки

Поля объекта попытки (endeavor)

ПолеОписание
idУникальный идентификатор попытки.
external_linkВнешняя ссылка, привязанная к попытке.
contentСписок элементов контента (обработанные бинарные данные). Каждый элемент содержит ссылки на бинарные данные и результаты их обработки.
creation_dateДата и время создания попытки.
last_modifiedДата и время последнего изменения.

Поля элемента контента (content)

ПолеОписание
idУникальный идентификатор элемента контента.
filesСписок S3-ссылок на файлы. Содержит ссылки на видео или изображения в зависимости от типа контента. Верификационные кадры не сохраняются.
typeТип контента: 1 — видео контроля движений, 3 — референсный кадр, 5 — верификационный кадр.
infoРезультаты биометрической обработки. Формат зависит от типа контента.
exception_infoИнформация об ошибках, возникших при обработке контента.

Тип контента 1 — видео контроля движений

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

{
"info": {
"motion_control_result": [
{
"result": true,
"pattern": "right"
},
{
"result": true,
"pattern": "left"
},
{
"result": true,
"pattern": "left"
}
]
}
}
ПолеОписание
resultВердикт выполнения действия (true — выполнено, false — не выполнено).
patternНазвание действия. Возможные значения: up (вверх), left (влево), right (вправо), closer (ближе), farther (дальше).

Тип контента 3 — референсный кадр

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

"info": {
"angles": [0, -2],
"image_info": {
"quality": { "value": true, "failed_checks": null },
"deepfake": { "confidence": 0.00021070241928100586 },
"liveness": {
"value": "real",
"confidence": 0.9773591756820679,
"attack_type": "none",
"attack_type_scores": { ... }
}
},
"frame_number": 128
}
ПолеОписание
quality.valueВердикт алгоритма оценки качества (true — качество приемлемо).
quality.failed_checksСписок проваленных проверок качества (если есть).
deepfake.confidenceУверенность алгоритма в наличии признаков дипфейка. Чем ниже значение, тем лучше.
liveness.valueВердикт алгоритма живости: "real" — живой человек.
liveness.confidenceУверенность алгоритма, что на фото живой человек. Чем выше, тем лучше.
liveness.attack_typeРаспознанный тип атаки ("none" — атаки нет).
liveness.attack_type_scoresУверенность алгоритма по каждому типу атаки.

Тип контента 5 — верификационный кадр

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

{
"info": {
"verification_info": {
"fa_r": 0,
"fr_r": 0.6750852465629578,
"score": 0.9856855273246765,
"distance": 2339
}
}
}
ПолеОписание
scoreУверенность алгоритма в совпадении лиц. Чем выше значение, тем выше вероятность, что лица принадлежат одному человеку.