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.
9.1 KiB
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, що перевищують обмежені вихідні межі, відхиляються замість часткової обробки.