OCR на GPU: потоковые документы и кириллица

Задача страницы. Практический гайд по построению OCR‑сервисов на облачных GPU: онлайн‑распознавание потоков документов (сканы, фото, PDF), пакетная обработка архивов, поддержка кириллицы, верстки со сложным макетом (много колонок, таблицы), профили производительности/VRAM, оркестрация, наблюдаемость и стоимость.

TL;DR

  • Онлайн: держите воркеры на on‑demand, p95‑латентность на страницу < 300–800 мс (зависит от разрешения/макета).
  • Пакеты/архивы: используйте interruptible с чанкованием ≤ 2 мин/пакет и локальным NVMe‑кэшем.
  • Кириллица: стабилизируйте качество через нормализацию, анти‑скош, правильный DPI, layout‑детекцию и языковые пост‑процедуры (склейка переносов/номеров).

Смежные разделы: CV‑хаб — https://cloudcompute.ru/solutions/computer-vision/, детекция/сегментация — https://cloudcompute.ru/solutions/computer-vision/yolo/ и https://cloudcompute.ru/solutions/computer-vision/sam/, эмбеддинги/поиск — https://cloudcompute.ru/solutions/computer-vision/dinov2/, стриминг — https://cloudcompute.ru/solutions/llm-inference/streaming/, хранение — https://cloudcompute.ru/solutions/storage-data/, эксплуатация — https://cloudcompute.ru/solutions/performance-tuning/ и https://cloudcompute.ru/solutions/throughput-vs-latency/, стоимость — https://cloudcompute.ru/solutions/cost-planner/, мониторинг — https://cloudcompute.ru/solutions/monitoring-logging/ и https://cloudcompute.ru/solutions/llm-inference/observability/.

Сценарии использования

  • Док‑потоки: входящие договора, счета, ТТН, чеки; распознаём в режиме «почти онлайн», выдаём JSON.
  • Мобильные фото: документы под углом/с бликами: нужен авто‑дескью, детекция границ, коррекция перспективы.
  • PDF‑архивы: миллионы страниц — планируем пакетами и пулы interruptible.
  • Таблицы и формы: извлекаем структуру, поля/значения, нормализуем номера/даты/суммы.
  • Классификация документов: по обложке/верстке (эмбеддинги) → маршрут в нужный парсер. См. DINOv2: https://cloudcompute.ru/solutions/computer-vision/dinov2/

Пайплайн OCR (обзор)

Ингест (PDF/изобр/поток)

→ Рендер/Декод (DPI/страницы)

→ Препроцесс (дескью, бинаризация, шумы)

→ Layout (колонки/таблицы/заголовки/ROI)

→ Text OCR (строки/слова, кириллица/латиница)

→ Пост‑проц (склейка переносов, орфо‑нормы, валидаторы)

→ Экспорт (JSON/ALTO/CSV/парсинг полей)

→ Метрики/Логи/Отчёты

Layout‑детекция (страницы, колонки, таблицы, заголовки) критична для кириллицы (узкие буквы/лигатуры, переносы). Для сложных макетов используйте ROI‑маски (см. https://cloudcompute.ru/solutions/computer-vision/sam/) и/или детектор блоков (см. https://cloudcompute.ru/solutions/computer-vision/yolo/).

Кириллица: что влияет на точность - DPI/масштаб: 220–300 DPI для сканов А4; для фото — масштаб по высоте текстовой строки 24–40 px.

  • Дескью: коррекция наклона/перспективы перед OCR (особенно важна для печатей/таблиц).
  • Бинаризация/дешум: мягкая, чтобы не «съесть» тонкие штрихи (л/т/ш/и).
  • Переносы: объединять «сло‑ва» по шаблонам; нормализовать «№», «–», «—», кавычки.
  • Языковые профили: ru, uk, kk, bg и т. п.; включать числовые/валютные классы.
  • Шрифты/поля: моноширинные таблицы и печати распознаются лучше при усиленном контрасте.

Режимы: онлайн vs пакетный

**Режим** **Когда** **Цели/SLA** **Ресурсы**
**Онлайн (near‑real‑time)** Почта, чат‑боты, порталы, KYC‑проверки p95 < 300–800 мс/страница **On‑demand**, прогретые модели, NVMe‑кэш
**Batch (архивы)** Миллионы страниц, оцифровка pages/min, **Cost\_per\_1000** **Interruptible**, чанк ≤ 2 мин, отчёты

Паттерны для прерываемых пулов — https://cloudcompute.ru/solutions/interruptible-patterns/ • очереди и батчи — https://cloudcompute.ru/solutions/image-video-gen/batch-render/

Профили GPU, VRAM и ориентиры скорости

Оценки для fp16/bf16, 220–300 DPI, страницу A4 рендерим в 1700–2200 px по меньшей стороне, прогретые веса.

**Профиль** **Онлайн (стр./мин, p95<800 мс)** **Batch (стр./мин)** **Комментарии**
**24 ГБ (Compact)** 60–120 1 500–3 000 Базовые OCR+layout, очереди малой глубины
**48 ГБ (Balanced)** 120–240 3 000–6 000 Параллелизм по страницам/моделям
**80 ГБ (HQ)** 200–400 6 000–10 000 Сложные макеты, много таблиц/колонок

Фактический throughput зависит от доли страниц с таблицами, разрешения и глубины препроцесса. Тюнинг — https://cloudcompute.ru/solutions/performance-tuning/ Форматы ввода/вывода и структура данных

Вход: PDF, TIFF, PNG/JPEG, zip‑пакеты. Выход:

  • JSON (структурный) — блоки/строки/слова/координаты/уверенности.
  • ALTO XML — страницы/блоки/строки.
  • CSV — плоские данные (например, таблицы/поля).
  • Кастом (KYC/инвойсы) — набор полей с валидацией (сумма, дата, ИНН и т. п.).

Хранилище и слои «горячее/тёплое/холодное» — https://cloudcompute.ru/solutions/storage-data/

Экстракция таблиц и форм

  • Таблицы: детектор таблиц → пост‑проц (линии/ячейки) → OCR строк/ячеек → нормализация чисел/валют.
  • Формы: layout‑шаблоны, ключ‑значение, регулярные проверки (ИНН, дата, номер).
  • Выравнивание: для сканов под углом применяйте перспективную коррекцию до выделения таблиц.

Конфиг пайплайна (пример YAML)

pipeline: ocr-ru-pipeline
input:
 source: s3://docs/incoming/
 formats: [pdf, tiff, jpg, png]
render:
 dpi: 260
 max_pages: 500
preprocess:
 deskew: true
 dewarp: auto
 denoise: mild
layout:
 detector: layout_blocks_v1
 tables: true
ocr:
 lang: [ru, en]
 precision: fp16
 batch_pages: 4
postprocess:
 hyphen_merge: true
 normalize_quotes: true
 money_phone_date: true
export:
 formats: [json, csv]
 path: s3://docs/parsed/
runtime:
 mode: online # online | batch
 sla_p95_ms: 800
 retries: 2
 nvme_cache: true

API‑скелет OCR сервиса (стриминг прогресса)

# fastapi_ocr.py — укороченный пример
from fastapi import FastAPI, UploadFile
from fastapi.responses import StreamingResponse
import json, base64, asyncio
app = FastAPI()
def ocr_bytes(pdf_or_image_bytes):
 # ... рендер/препроц/layout/ocr/postproc на GPU ...
 return {"pages":[{"text":"...", "blocks":[...]}]}
@app.post("/v1/ocr_stream")
async def ocr_stream(file: UploadFile):
 data = await file.read()
 async def gen():
 yield "event: startndata: {}nn"
 # можно слать прогресс по страницам
 result = ocr_bytes(data)
 yield "data: " + json.dumps(result, ensure_ascii=False) + "nn"
 yield "event: donendata: [DONE]nn"
 return StreamingResponse(gen(), media_type="text/event-stream",
 headers={"Cache-Control":"no-cache","X-Accel-Buffering":"no"})

Стриминг/прогресс — https://cloudcompute.ru/solutions/llm-inference/streaming/ Сервинг/ансамбли (рендер→layout→OCR→постпроц) — https://cloudcompute.ru/solutions/triton-inference-server/ UI/API‑демо — https://cloudcompute.ru/solutions/gradio-fastapi/

Наблюдаемость и метрики

Собирайте (см. https://cloudcompute.ru/solutions/monitoring-logging/ и https://cloudcompute.ru/solutions/llm-inference/observability/):

  • Технические: p50/p95 latency на страницу, pages/min, GPU util/HBM, VRAM пик, cache‑hit NVMe, ошибки рендера PDF.
  • Качество: CER/WER, доля «склейки» переносов, точность табличного парсинга, доля пустых/ошибочных страниц.
  • Сервисные: очередь ожидания, таймауты, ретраи, доля брак‑страниц.

Алерты: рост p95, падение pages/min, всплеск ошибок рендера, CER/WER выше порога.

Экономика и расчёты

Пусть t_page — среднее время обработки страницы, c_gpu — цена GPU/час.

Pages_per_hour ≈ 3600 / t_page

Cost_per_1000_pages ≈ (c_gpu × Num_GPU) / (Pages_per_hour / 1000)

Для batch добавьте накладные I/O/рендера (PDF→изображения) и ретраи. Сравнение on‑demand vs interruptible — https://cloudcompute.ru/solutions/cost-planner/ и https://cloudcompute.ru/solutions/interruptible-patterns/

Экспорт полей и валидация

  • Нормализация: даты (ISO), суммы (десятичный разделитель), номера (ИНН/ОГРН), телефоны.
  • Правила: маскирование чувствительных полей в логах/превью.
  • Сопоставление: эмбеддинги для поиска дубликатов документов/страниц — см. https://cloudcompute.ru/solutions/computer-vision/dinov2/

Операционные паттерны

  • Batch (interruptible): индексация и переиндексация датасетов, дедуп — см. https://cloudcompute.ru/solutions/interruptible-patterns/
  • Онлайн (on‑demand): поиск и рекомендации с низкой латентностью, горячий кэш эмбеддингов.
  • Кэширование: LRU по запросам и по item_id; храните эмбеддинги в fp16/int8, а модель — в fp16/bf16.
  • A/B и версии: распараллельте индексы v1/v2, не ломая прод.

Безопасность и политика

  • PII: маскирование/редактирование в логах и предпросмотрах; шифрование выгрузок.
  • Доступ к источникам (почта/S3/FTP/порталы) по ключам/ролям; контроль ретеншна и географии данных.

Белые списки моделей/версий; параметры ограничений (макс. DPI/размер, макс. страницы). Подробнее — https://cloudcompute.ru/solutions/security/ и https://cloudcompute.ru/solutions/llm-inference/guardrails/

Траблшутинг

**Симптом** **Причина** **Что сделать**
«Крошится» кириллица Низкий DPI/шум/переконтраст Повысить DPI/мягкий денойз, улучшить дескью
Склейка колонок Нет layout‑детекции Включить детектор блоков/ROI‑маски
Ошибки в числах/датах Нет пост‑валидации Включить нормализацию и проверку шаблонов
Медленно на PDF‑сканах Узкое место рендер‑движка Параллелить рендер, кэш страниц на NVMe
Падение точности на фото Перспектива/блики Усилить дескью/де‑варп, локальная коррекция контраста
OOM на многостраничных Слишком высокий batch/DPI Снизить batch, добавить стриминг страниц

Как запустить в cloudcompute.ru

Готовые шаблоны — https://cloudcompute.ru/solutions/templates/

  • “OCR‑Online (RU)” — on‑demand, рендер PDF→страницы, layout+OCR, JSON‑выдача, SSE‑прогресс.
  • “OCR‑Batch (Archives)” — interruptible, чанк ≤ 2 мин, отчёты по качеству/стоимости.
  • “OCR‑Tables/Forms” — детектор таблиц/форм, извлечение полей, CSV/JSON‑экспорт.

Инфраструктура: тюнинг — https://cloudcompute.ru/solutions/performance-tuning/ • хранение — https://cloudcompute.ru/solutions/storage-data/ • наблюдаемость — https://cloudcompute.ru/solutions/monitoring-logging/ • сервинг — https://cloudcompute.ru/solutions/triton-inference-server/ • CI/CD — https://cloudcompute.ru/solutions/containers-ci-cd/

Чек‑лист перед продом

  • Определён режим: онлайн vs batch; SLA по p95 и pages/min.
  • Выбраны DPI/разрешение и профиль GPU (24/48/80 ГБ).
  • Настроены дескью/де‑варп/layout, профили для кириллицы и пост‑нормализация.
  • Подключены метрики/алерты/трейсинг; отчёты по CER/WER и табличной точности.
  • Рассчитан Cost_per_1000_pages; выбран режим on‑demand/interruptible.
  • Настроены безопасность, ретеншн, белые списки моделей/версий.

Навигация по разделу «Компьютерное зрение»

Хаб: https://cloudcompute.ru/solutions/computer-vision/ • Детекция: https://cloudcompute.ru/solutions/computer-vision/yolo/ • Интерактивная сегментация: https://cloudcompute.ru/solutions/computer-vision/sam/ • Эмбеддинги/поиск: https://cloudcompute.ru/solutions/computer-vision/dinov2/ • Видео‑аналитика: https://cloudcompute.ru/solutions/computer-vision/video-analytics/ • ReID/треккинг: https://cloudcompute.ru/solutions/computer-vision/tracking/ • Экспорт на edge: https://cloudcompute.ru/solutions/computer-vision/edge-export/ • Инфраструктура: https://cloudcompute.ru/solutions/performance-tuning/https://cloudcompute.ru/solutions/storage-data/https://cloudcompute.ru/solutions/monitoring-logging/https://cloudcompute.ru/solutions/llm-inference/observability/https://cloudcompute.ru/solutions/cost-planner/https://cloudcompute.ru/solutions/interruptible-patterns/https://cloudcompute.ru/solutions/throughput-vs-latency/ • Сервинг: https://cloudcompute.ru/solutions/triton-inference-server/ • UI/API: https://cloudcompute.ru/solutions/gradio-fastapi/ • CI/CD: https://cloudcompute.ru/solutions/containers-ci-cd/

Готовы запустить?

Запустить GPU-сервер