Files
SnapOtter/apps/docs/ru/tools/image/ocr.md
T
SnapOtterandGitHub 5f21588f6c chore: prepare the 2.2.0 release (#660)
Bumps every version surface to 2.2.0, fixes a latent version-coupling bug in the
OCR runtime tests, and stops an absent GPU runner from silently stalling a
release.

Version surfaces: scripts/sync-version.sh covers the 11 workspaces, APP_VERSION,
and the docs release commands across all locales. Root package.json plus the
three surfaces the script never reaches are done by hand: the DOCKERHUB.md banner
and tag table, the docker-tags.md pinning table in 21 locales, and the example
runtimeVersion in tools/image/ocr.md in 21 locales. The release-notes archive step
is deliberately not pre-run, so the notes text stays editable until the release.

Latent bug: runtime-state rejects any runtime whose compatibility.snapotterVersion
is not exactly APP_VERSION, and five fixtures pinned the literal 2.1.0. Since
semantic-release rewrites APP_VERSION on every release, the first PR after any
bump would have gone red for a reason nobody would trace to the release. The
fixtures now derive from APP_VERSION.

GPU runner: sign-ocr-index needs verify-ocr-nvidia on self-hosted hardware, and
the gated manifest job needs ai-bundles, so a missing runner queued instead of
failing and produced no image tags. preflight-gpu-runner claims the same labels
with no dependencies, so it is scheduled first and validates the GPU before the
90-minute build. An API preflight is impossible because listing self-hosted
runners needs Administration:read, which GITHUB_TOKEN cannot hold, so RELEASE.md
carries the maintainer-side check.
2026-07-27 22:09:31 +08:00

9.3 KiB
Raw Blame History

description, i18n_output_hash, i18n_source_hash, i18n_provenance
description i18n_output_hash i18n_source_hash i18n_provenance
Извлекайте текст из изображений локально с помощью встроенного Tesseract или дополнительной высокоточной среды выполнения RapidOCR. e16d836b025c 0d453b49db02 human

OCR / Извлечение текста

Извлекайте текст из изображений, не отправляя изображение во внешний сервис. Встроенный уровень fast использует Tesseract. Дополнительные уровни balanced и best используют RapidOCR с закрепленными моделями PP-OCR ONNX.

::: info Совместимость OCR для корейского языка Быстрый OCR поддерживает auto, en, de, es, fr, zh и ja, но не корейский язык (ko). Для корейского требуется пакет точного OCR и уровень balanced или best. Пакет работает в официальных контейнерах Linux amd64 и arm64, включая узлы NVIDIA, где OCR по-прежнему выполняется на CPU. На неподдерживаемой системе возвращается явная ошибка совместимости без скрытого перехода на fast. Корейский с fast или устаревшим псевдонимом tesseract отклоняется до постановки в очередь с FEATURE_INCOMPATIBLE и fast-korean-unsupported. :::

Эндпоинт API

POST /api/v1/tools/image/ocr

Обработка: OCR всегда выполняется асинхронно. После проверки и постановки в очередь конечная точка сразу возвращает 202 Accepted с jobId. Отслеживайте поток выполнения задания SSE до конечного события complete или failed; при успешном завершении его result содержит поля OCR.

Точный пакет OCR: Дополнительная среда выполнения ocr (около 208–234 MiB для загрузки и 409–488 MiB, установленная в зависимости от цели). fast не требует этого пакета; установщик проверяет точные размеры, связанные подписанным индексом.

Параметры

Параметр Тип Обязательный По умолчанию Описание
file file Да - Файл изображения (составной), до 512 закодированных MiB и декодированных 40 мегапикселей; по-прежнему действует более низкий лимит загрузки оператора
quality string Нет Динамический Уровень качества: fast (Tesseract), balanced (RapidOCR с небольшими моделями PP-OCRv6) или best (модели PP-OCRv6 средней точности с калиброванной оценкой вариантов)
language string Нет "auto" Языковая подсказка: auto, en, de, fr, es, zh, ja, ko
enhance boolean Нет Зависит от уровня Улучшите локальный контраст перед распознаванием. Fast применяет его напрямую; Сбалансированный и Лучший сохраняют вариант только в том случае, если калиброванная оценка улучшает результат. По умолчанию true для best и false для fast/balanced.
engine string Нет - Устаревший псевдоним совместимости. Вместо этого используйте quality. tesseract сопоставляется с fast; устаревшее значение paddleocr сопоставляется с balanced, но не загружает PaddlePaddle

Если quality и engine не заданы, SnapOtter выбирает лучший доступный уровень в порядке best, balanced, fast. Для корейского языка fast никогда не выбирается: используется best, затем balanced, либо возвращается ошибка установки или совместимости точной среды выполнения.

Пример запроса

curl -X POST http://localhost:1349/api/v1/tools/image/ocr \
  -F "file=@document.png" \
  -F 'settings={"quality":"best","language":"en","enhance":true}'

Принятый ответ (202)

{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "async": true
}

Ход выполнения и результат (SSE)

Подключитесь к GET /api/v1/jobs/{jobId}/progress, используя jobId из ответа 202 (или переданный clientJobId). Держите поток открытым до конечного события complete или failed. Успешный конечный кадр содержит результат OCR в поле result:

{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "type": "single",
  "phase": "complete",
  "stage": "complete",
  "percent": 100,
  "result": {
    "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/document_ocr.txt",
    "originalSize": 12345,
    "processedSize": 47,
    "text": "Extracted text content from the image...",
    "engine": "rapidocr-onnx",
    "requestedQuality": "best",
    "actualQuality": "best",
    "device": "cpu",
    "provider": "CPUExecutionProvider",
    "degraded": false,
    "warnings": [],
    "runtimeVersion": "2.2.0",
    "modelVersion": "PP-OCRv6-best-v1-medium"
  }
}

Ошибки обработки передаются в поле error конечного события failed; после постановки в очередь они не возвращаются как HTTP 422.

Примечания

  • fast всегда доступен в поддерживаемых образах SnapOtter. Для balanced и best требуется дополнительный точный пакет OCR.
  • Встроенный Tesseract добавляет к официальному образу около 25 MiB. Точный пакет хранится в /data/ai, а не встроен в образ.
  • Точный пакет опубликован для официальных контейнеров Linux, amd64 и arm64. Он намеренно использует провайдер CPU ONNX Runtime, в том числе на хостах NVIDIA, поэтому он не зависит от библиотек CUDA или совместимости с GPU. Исходные и готовые установки bare-metal используют Fast OCR, если они не предоставляют собственную совместимую среду выполнения.
  • Успешный конечный result содержит как извлечённый текст в text, так и доступный для скачивания артефакт .txt в downloadUrl.
  • SnapOtter учитывает явно запрошенный уровень. Если balanced или best недоступны, API возвращает 501 с FEATURE_NOT_INSTALLED или FEATURE_INCOMPATIBLE; он никогда молча не переводит запрос на другой уровень.
  • Успешный пустой результат остается пустым результатом. Сбои во время выполнения возвращают ошибку вместо повторной попытки с использованием механизма более низкого качества.
  • В успешном конечном result сообщается как requestedQuality, так и actualQuality, а также версия ядра, устройства, поставщика, среды выполнения и модели, а также любые предупреждения.
  • Поддерживает входные форматы HEIC/HEIF, RAW, TGA, PSD, EXR и HDR через автоматическое декодирование.
  • Закодированные входные данные слишком большого размера возвращают 413. Изображения размером более 40 мегапикселей и ответы OCR, превышающие ограниченные выходные пределы, отклоняются, а не частично обрабатываются.