Skip to Content

Описание

Взаимодействие с компонентом Умный OCR строится по следующей схеме:

  1. Проверка готовости модели на распознавание документа с указанным типом модели
  2. Отправка запроса на распознавание документа и получение его идентификатора
  3. Получение данных запроса по идентификатору
  4. (Подождать)
  5. (Повторить п.3, пока нет флага ResultIsReady)

Также есть возможность по завершению обработки получить страницы документа в том виде, в котором на них можно наложить поля с координатами. Для этого в схему добавляются шаги 6-8: 6. (Подождать) 7. (Повторить п.3, пока в каждом элементе Files нет флага IsFinalState) 8. Для каждой страницы документа скачать изображение по его идентификатору 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. Если указанный modelType не настроен в Портале, isModelTypeRunning примет значение false, а поле isAgentLicensed пропадет из JSON. Если тип модели настроен на Целевых машинах (одной или нескольких), но их Агенты работают без лицензии, isAgentLicensed примет значение false.

Создать запрос

Запрос создаётся методом POST /inference/smartOcr. Запрос отправляется с типом содержимого multipart/form-data. За раз можно отправить только 1 изображение (или PDF). Если отправить PDF или многостраничный TIFF, то в 1 запросе будет несколько страниц через некоторое время, необходимое для преобразование исходного файла запроса.

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/{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" }

Обратите внимание на следующие поля:

  1. expiresAt: Когда запрос будет удален с сервера. Стандартное время – 1 час – можно перенастроить в параметре ClearRequestsService > DefaultExpirationSeconds файла конфигурации Api.Inference.
ℹ️

Обратите внимание, что если за отведенное время запрос не распознался, он всё равно будет удален.

  1. files > (index) > result > imageTransforms > rotationAngle: Найденный угол поворота. Изображение, которое сервер отдает по запросу скачать изображение уже повернуто на нужный угол, если isApplied принимает значение true.

  2. files > (index) > result > unifiedText: Объединённые результаты распознавания страницы. Поля страницы склеиваются символами “\n”, а ячейки таблицы в строке объединяются через с ” | ”

  3. files > (index) > result > items: Поля, найденные на странице, в т.ч.

  • тип поля (field),
  • уверенность (confidence, 0-1),
  • координаты (coordinates),
  • распознанный текст (text) для простых полей, в т.ч. QR-кодов и rows > columns для табличных.
  1. files > (index) > order: Порядок страницы в запросе.

  2. files > (index) > id: Идентификатор страницы запроса.

  3. files > (index) > IsFinalState: Находится ли изображение в своем финальном состоянии (true), или возможны изменения, например, поворот (false).

Скачать изображение

Скачать страницу документа можно методом GET /inference/smartOcr/{requestKey}/File/{pageId}. Замените {requestKey} на идентификатор запроса. Замените {pageId} на идентификатор страницы (поле files > (index) > id из JSON в предыдущем пункте). Укажите текущий токен в заголовке 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: ••••••

В ответе будет бинарное тело изображения.

Что дальше

Отправляйте запрос NLP.