Files
SnapOtter/apps/docs/ru/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.3 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: e16d836b025c
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 применяет его напрямую; Сбалансированный и Лучший сохраняют вариант только в том случае, если калиброванная оценка улучшает результат. По умолчанию `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, превышающие ограниченные выходные пределы, отклоняются, а не частично обрабатываются.