Умный OCR
Описание
Взаимодействие с компонентом Умный OCR выполняется по следующему процессу:
Основной сценарий
-
Проверка готовости модели Проверяется, готова ли модель к распознаванию документа указанного типа.
-
Отправка запроса на распознавание Документ отправляется на обработку, возвращается его идентификатор.
-
Ожидание завершения обработки Периодически проверяется список обработанных запросов, пока в нём не появится нужный идентификатор.
-
Получение результата обработки По идентификатору запрашиваются распознанные данные.
Расширенный сценарий (с изображениями страниц)
Если после обработки нужно получить страницы документа в формате, пригодном для наложения координат полей, выполняются дополнительные шаги:
- Ожидание завершения финальной обработки страниц
- Повторное выполнение шага 4 до тех пор, пока во всех элементах
Filesне появится флагIsFinalState - Скачивание изображений страниц.
Для каждой страницы документа изображение загружается по идентификатору
Files > Id
Тип модели
Для обработки запроса серверу необходимо передать тип модели в заголовке modelType.
Тип модели настраивается на Портале при создании Конфигурации модели.
Если использовать тип модели, не настроенный на сервере, сервер вернёт ошибку.
Авторизация
Каждый запрос в данном разделе требует указания заголовка Authorization. Подробнее об авторизации см. Авторизация.
Проверка готовости модели
Проверка готовности модели выполняется методом:
GET /inference/smartOcr/status
В запросе необходимо указать заголовок modelType — тип модели
(например, anytext для проекта «Неструктурированный документ»).
GET /inference/smartOcr/status HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
modelType: anytext
Authorization: ••••••Если модель готова принимать запросы, возвращается JSON:
{
"isServerLicensed": true,
"isModelTypeRunning": true,
"isAgentLicensed": true
}Описание полей ответа
isServerLicensedПоказывает наличие лицензии у сервера. Если лицензия отсутствует →false.isModelTypeRunningПоказывает, настроен ли и запущен ли указанныйmodelTypeв Портале. Если модель не настроена →false.isAgentLicensedПоказывает статус лицензии агентов на целевых машинах. Поле может отсутствовать, еслиmodelTypeне настроен. Если агенты без лицензии →false.
Создать запрос
Запрос отправляется методом:
POST /inference/smartOcr
Тип содержимого: multipart/form-data
Ограничения
- В одном запросе можно передать только 1 файл
- Поддерживаемые форматы: изображение или PDF
- При отправке PDF или многостраничного TIFF:
- документ обрабатывается как несколько страниц
- обработка занимает дополнительное время на предварительное преобразование файла
Пример запроса
POST /inference/smartOcr HTTP/1.1
Host: ai-server-endpoint:44392
modelType: anytext
Accept: text/plain
Authorization: ••••••
Content-Length: 238
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="/C:/request.png"
Content-Type: image/png
(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--
При успешном создании запроса сервер возвращает идентификатор:
"e1f19acc-f9a2-435c-9c9b-38c4a09a7468"Идентификатор возвращается в строковом виде и всегда заключён в кавычки.
Проверка готовых запросов
Проверка завершённых запросов выполняется методом:
GET /inference/smartOcr/ready
Пример запроса:
GET /inference/smartOcr/ready HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••Сервер возвращает список идентификаторов готовых запросов в формате JSON:
["f9a2-435c-9c9b-38c4a09a7468"]Готовый запрос может требовать дополнительной постобработки. Факт завершения
обработки страницы определяется по флагу IsFinalState в поле Files
запроса.
Получить запрос
Результаты распознавания можно получить методом:
GET /inference/smartOcr/{requestKey},
где {requestKey} — идентификатор запроса, полученный при создании.
Привер:
GET /inference/smartOcr/e1f19acc-f9a2-435c-9c9b-38c4a09a7468 HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••В ответ возвращается JSON с результатами распознавания документа:
{
"createdAt": "2025-06-09T13:43:06.03275",
"expiresAt": "2025-06-09T14:43:06.03275",
"files": [
{
"result": {
"badConfidenceLevel": 0.2,
"contentLength": 114159,
"contentType": "image/png",
"createdAt": "2025-06-09T13:43:25.5423717+00:00",
"extension": ".png",
"fileType": "png",
"goodConfidenceLevel": 0.8,
"id": "d353c73d-c1f9-4dc5-bdd1-9a73565e566c",
"imageTransforms": {
"isApplied": true,
"rotationAngle": 0.0600000000000001
},
"isFinalState": true,
"items": [
{
"confidence": 0.45,
"coordinates": {
"maxX": 1055,
"maxY": 63,
"minX": 814,
"minY": 1
},
"field": "phrase",
"text": "Поле 1"
},
{
"confidence": 0.24,
"coordinates": {
"maxX": 241,
"maxY": 109,
"minX": 48,
"minY": 85
},
"field": "phrase",
"text": "Поле 2"
},
{
"confidence": 0.42,
"coordinates": {
"maxX": 968,
"maxY": 124,
"minX": 817,
"minY": 68
},
"field": "qr-code",
"text": "Содержимое QR-кода"
},
{
"confidence": 0.66,
"coordinates": {
"maxX": 1019,
"maxY": 437,
"minX": 0,
"minY": 305
},
"field": "table",
"rows": [
{
"columns": [
"Строка1+Столбец1",
"Строка1+Столбец2"
],
"confidence": 0.688
},
{
"columns": [
"Строка2+Столбец1",
"Строка2+Столбец2"
],
"confidence": 0.661
}
]
}
],
"order": 0,
"originalFileName": "request.png",
"sourceFileType": "png",
"type": "Image",
"unifiedText": "Поле 1\n\nПоле 2\n\nТаблица Строка1+Столбец1 | Строка1+Столбец2\nСтрока2+Столбец1 | Строка2+Столбец2"
}
}
],
"modelType": "anytext"
}Обратите внимание на следующие поля:
-
expiresAt— дата и время удаления запроса с сервера. По умолчанию запрос хранится 1 час. Значение можно изменить в параметреClearRequestsService > DefaultExpirationSecondsфайла конфигурации Api.Inference.Даже если запрос не успел обработаться за отведённое время, он всё равно будет удалён с сервера.
-
files[index].result.imageTransforms.rotationAngle— найденный угол поворота изображения.Изображение, возвращаемое по запросу скачать изображение, уже повернуто на нужный угол, если
isApplied = true. -
files[index].result.unifiedText— объединённый результат распознавания страницы.Поля страницы склеиваются через “\n”, а ячейки таблицы в строке объединяются через ” | ”.
-
files[index].result.items— список найденных элементов на странице. Включает:- тип поля (
field) - уверенность распознавания (
confidence, 0–1) - координаты (
coordinates) - распознанный текст:
text— для простых полей и QR-кодовrows.columns— для табличных данных
- тип поля (
-
files[index].order— порядок страницы в запросе. -
files[index].id— идентификатор страницы запроса. -
files[index].isFinalState— статус финального состояния изображения:true— изображение финализировано, изменений больше не будетfalse— возможны изменения (например, поворот)
Скачать изображение
Скачать страницу документа можно методом:
GET /inference/smartOcr/{requestKey}/File/{pageId},
Где:
{requestKey}— идентификатор запроса, полученный при создании{pageId}— идентификатор страницы (полеfiles > (index) > idиз ответа предыдущего запроса)
Укажите текущий токен в заголовке Authorization:
GET /inference/smartOcr/e1f19acc-f9a2-435c-9c9b-38c4a09a7468/File/d353c73d-c1f9-4dc5-bdd1-9a73565e566c HTTP/1.1
Host: ai-server-endpoint:44392
Accept: text/plain
Authorization: ••••••В ответ возвращается бинарное содержимое изображения страницы документа.