Skip to Content

Умный OCR

Описание

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

Основной сценарий

  1. Проверка готовости модели Проверяется, готова ли модель к распознаванию документа указанного типа.

  2. Отправка запроса на распознавание Документ отправляется на обработку, возвращается его идентификатор.

  3. Ожидание завершения обработки Периодически проверяется список обработанных запросов, пока в нём не появится нужный идентификатор.

  4. Получение результата обработки По идентификатору запрашиваются распознанные данные.

Расширенный сценарий (с изображениями страниц)

Если после обработки нужно получить страницы документа в формате, пригодном для наложения координат полей, выполняются дополнительные шаги:

  1. Ожидание завершения финальной обработки страниц
  2. Повторное выполнение шага 4 до тех пор, пока во всех элементах Files не появится флаг IsFinalState
  3. Скачивание изображений страниц. Для каждой страницы документа изображение загружается по идентификатору 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: ••••••

В ответ возвращается бинарное содержимое изображения страницы документа.