Мы упорно работаем над тем, чтобы наши продукты были лучшими на рынке, — и выпускаем новую версию OCR-системы. Provision OCR 0.9.3 научилась читать рукописный текст, распознавать документы на заданном языке, обрабатывать PDF постранично и выравнивать «кривые» сканы. Ниже — что это даёт на практике и что поменялось в API.

✍️ Рукописный текст на русском

Анкеты, заявления, накладные с подписями и пометками от руки — то, на чём классический OCR обычно сдаётся. В 0.9.3 появился отдельный режим распознавания рукописного русского текста: слова находятся по маскам, а читает их специально обученная рукописная модель.

Бланк, заполненный от руки, и распознанные поля
Бланк, заполненный от руки, превращается в структурированные поля с уверенностью распознавания

Режим включается параметром language=literal_rus. Извлечение таблиц в нём отключено — рукописный режим сосредоточен на тексте.

🌍 Многоязычность: язык распознавания под ваш документ

По умолчанию OCR сам разбирается, где кириллица, а где латиница. Но если язык документа известен заранее, его теперь можно указать явно — и получить максимальную точность без лишних «угадываний»:

  • rus — всё читается русским распознавателем
  • eng — латиница: в ответе только цифры, знаки и ASCII-буквы, символ вне набора заменяется наиболее вероятным допустимым (café → cafe)
  • rus,eng или без параметра — оба алфавита с автоматическим роутером, как раньше
  • literal_rus — рукописный русский

Сам автоматический выбор алфавита тоже стал заметно точнее: его перевели на новую мультискриптовую сеть.

Рост точности выбора алфавита и снижение CER
Точность выбора алфавита выросла с 94,67% до 99,45%, CER снизился с 3,70% до 3,47%

📑 Постраничная обработка PDF

Большие документы и многостраничные договоры теперь можно обрабатывать окнами страниц — без ограничений по объёму и без лишней нагрузки. Укажите диапазон в запросе, а в ответе сервер сообщит реальное число страниц документа, чтобы клиент мог листать PDF без пробного запроса. Номера страниц в ответе остаются исходными — перенумерации нет.

📐 Наклонные и «кривые» сканы

Документ, сфотографированный на телефон под углом, больше не проблема. Сервер определяет остаточный наклон страницы и выравнивает её перед распознаванием. Работает это аккуратно: наклон меньше 4° не трогается, а угол применяется только тогда, когда его подтверждают строки текста на странице.

Выравнивание наклонённого скана перед распознаванием
Наклон подтверждается строками текста, страница выравнивается, а применённый угол возвращается в поле rotation

Угол, на который сервер повернул страницу, возвращается в поле rotation — по нему удобно контролировать качество входящих сканов.

Изменения в API

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

Новые параметры POST /processing/{template}

ПараметрНазначение
languageВыбор распознавателя: rus, eng, literal_rus, можно через запятую. По умолчанию — rus,eng с автоматическим выбором алфавита. Неизвестное значение — ответ 400.
pagesFromТолько PDF: первая страница диапазона, с нуля, включительно. По умолчанию 0.
pagesToТолько PDF: конец диапазона, не включительно (pagesFrom=0&pagesTo=3 — первые три страницы). По умолчанию — до последней страницы.
curl -X POST "http://localhost:8098/processing/agreement?pagesFrom=0&pagesTo=10" \
     -F "file=@contract.pdf"

curl -X POST "http://localhost:8098/processing/default?language=literal_rus" \
     --data-binary @form.jpg

Новые поля в ответе

  • documents[].pagesFrom, pagesTo, maxPages — для PDF: запрошенный диапазон и реальное число страниц документа
  • pages[].rotation — угол по часовой стрелке, на который сервер повернул страницу перед распознаванием (например, -7.43). Поля нет, если сервер страницу не анализировал — это не то же самое, что 0. Координаты loc остаются в исходной системе координат страницы
  • blocks[].det_prob — уверенность детектора в самой рамке слова. Дополняет prob: высокий prob при низком det_prob означает уверенно прочитанный, но сомнительный фрагмент
{
  "documents": [{
    "pagesFrom": 0, "pagesTo": 10, "maxPages": 37,
    "pages": [{
      "page_number": 1,
      "rotation": -7.43,
      "blocks": [{ "text": "Договор", "prob": 0.99, "det_prob": 0.94 }]
    }]
  }]
}

Сервисные эндпоинты

  • POST /license/activateновый: онлайн-активация лицензии по коду без перезапуска сервера. Доступна даже на заблокированном сервере, повторный вызов с тем же кодом не расходует новый слот
  • POST /health — теперь возвращает и version запущенной сборки, например {"status": "ok", "version": "0.9.3"}
  • POST /reload_service — перечитывает provision_ocr.ini и позволяет переключать модели без перезапуска процесса. Конфигурация проверяется целиком до применения (ошибка — ответ 400, рабочие настройки не трогаются), второй параллельный вызов получает 409

Под капотом: полный список изменений

Добавлено

  • Автоматическое выравнивание остаточного наклона страницы — включено по умолчанию, наклон менее 4° не трогается, угол применяется только при подтверждении строками текста
  • Поле rotation у страницы в ответе API
  • «Второе мнение» при распознавании: слово ниже порога уверенности перечитывается распознавателем другого алфавита, выбирается более уверенный результат

Улучшено

  • Выбор алфавита (кириллица/латиница) переведён на новую мультискриптовую сеть — 302 токена вместо 154: точность выросла с 94,67% до 99,45%, ошибок выбора в 7,7 раза меньше, CER снижен с 3,70% до 3,47%
  • Скорость обработки страницы выросла на 3,9% при бит-в-бит идентичном ответе: ускорена постобработка детектора текста, добавлен кэш тепловых карт, не загружаются неиспользуемые модели — минус ~120 МБ видеопамяти
  • В Windows-инсталлятор входят 18 моделей (fp16, ~1,06 ГБ) и 9 списков классов — ровно то, что сервер запрашивает при старте

Исправлено

  • Текст больше не пропадает из ответа при вырожденной сетке таблицы
  • Пунктирные линейки теперь распознаются как разделители таблицы — раньше таблица склеивалась в одну строку или столбец
  • Устранены фантомные столбцы в таблицах
  • Толстая или наклонная линейка больше не даёт две строки вместо одной по краю таблицы
  • Половина таблицы больше не принимается за внешнюю рамку с потерей второй половины

Удалено

  • Из инсталляционного бандла убраны две модели, которые больше не используются

Поддерживаемые видеокарты и дистрибутивы

ВидеокартаWindowsDocker
NVIDIA RTX 40xx (Ada Lovelace)2,3 ГБ8 ГБ
NVIDIA RTX 30xx (Ampere)2,3 ГБ8 ГБ
NVIDIA RTX 20xx (Turing)2,3 ГБ8 ГБ
NVIDIA 10xx (Pascal)2,3 ГБ8 ГБ
AMD Radeon RX 6xxx (RDNA 2)2,3 ГБ8 ГБ
docker pull registry.provlabs.tech/hub/provision_ocr:latest

Установщик для Windows и инструкции — на странице загрузки, подробности API — в документации.

И это не всё

Параллельно готовим релиз Provision LLM Engine — значительно вырастет скорость на современных видеокартах.

👉 Provision OCR · 🧠 Provision LLM Engine · 💬 Следите за обновлениями в Telegram: @ProvisionLabs