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

98 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: "Витягуйте текст із зображень локально за допомогою вбудованого Tesseract або додаткового високоточного середовища виконання RapidOCR."
i18n_output_hash: e4c4f8150634
i18n_source_hash: 0d453b49db02
i18n_provenance: human
---
# OCR / Витяг тексту {#ocr-text-extraction}
Витягніть текст із зображень, не надсилаючи зображення до зовнішньої служби. Вбудований рівень `fast` використовує Tesseract. Додаткові рівні `balanced` і `best` використовують RapidOCR із закріпленими моделями PP-OCR ONNX.
<!-- korean-ocr-contract:start -->
::: 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`.
:::
<!-- korean-ocr-contract:end -->
## Кінцева точка API {#api-endpoint}
`POST /api/v1/tools/image/ocr`
**Обробка:** OCR завжди виконується асинхронно. Після перевірки та постановки в чергу кінцева точка одразу повертає `202 Accepted` з `jobId`. Відстежуйте потік виконання завдання SSE до кінцевої події `complete` або `failed`; у разі успіху її `result` містить поля OCR.
**Точний пакет OCR:** Додатковий час виконання `ocr` (приблизно 208-234 MiB для завантаження та 409-488 MiB для встановлення, залежно від цілі). Для `fast` цей пакет не потрібен; інсталятор перевіряє точні розміри, обмежені підписаним індексом.
## Параметри {#parameters}
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|-----------|------|----------|---------|-------------|
| 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`, або повертається помилка встановлення чи сумісності точного середовища виконання.
## Приклад запиту {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/ocr \
-F "file=@document.png" \
-F 'settings={"quality":"best","language":"en","enhance":true}'
```
## Прийнята відповідь (202) {#accepted-response-202}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Хід виконання та результат (SSE) {#progress-sse-optional}
Підключіться до `GET /api/v1/jobs/{jobId}/progress`, використовуючи `jobId` із відповіді `202` (або наданий `clientJobId`). Тримайте потік відкритим до кінцевої події `complete` або `failed`. Успішний кінцевий кадр містить результат OCR у полі `result`:
```json
{
"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`.
## Примітки {#notes}
- `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, що перевищують обмежені вихідні межі, відхиляються замість часткової обробки.