Files
SnapOtter/apps/docs/uk/tools/image/ocr.md
T
SnapOtterandGitHub 991c981529 fix: make OCR portable and reliable across AMD64 and ARM64 (#519)
* fix: make OCR portable and reliable

* fix: harden OCR installation portability

* fix: pin OCR partials across downloads

* fix: make OCR execution reliably asynchronous

* fix: harden OCR portability and docs routes

* fix: preserve decoder and docs safeguards
2026-07-15 03:34:24 +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.1.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, що перевищують обмежені вихідні межі, відхиляються замість часткової обробки.