Files
SnapOtter/apps/docs/uk/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.1 KiB
Raw Blame History

description, i18n_output_hash, i18n_source_hash, i18n_provenance
description i18n_output_hash i18n_source_hash i18n_provenance
Витягуйте текст із зображень локально за допомогою вбудованого Tesseract або додаткового високоточного середовища виконання RapidOCR. e4c4f8150634 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 застосовує його безпосередньо; Balanced і Best зберігають варіант лише тоді, коли відкалібрована оцінка покращує результат. За замовчуванням 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, що перевищують обмежені вихідні межі, відхиляються замість часткової обробки.