Files
SnapOtter/apps/docs/ru/tools/image/ocr.md
T

98 lines
9.3 KiB
Markdown
Raw Normal View History

---
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": [],
2026-07-27 22:09:31 +08:00
"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, превышающие ограниченные выходные пределы, отклоняются, а не частично обрабатываются.