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
This commit is contained in:
SnapOtter
2026-07-15 03:34:24 +08:00
committed by GitHub
parent 58121f205f
commit 991c981529
409 changed files with 67151 additions and 8076 deletions
+23 -9
View File
@@ -1,14 +1,20 @@
---
description: "Извлечение текста из PDF-документов с помощью OCR на базе ИИ."
i18n_source_hash: 1431fcba180b
description: "Извлекайте текст из отсканированных PDF-файлов локально с помощью встроенного Tesseract или дополнительной высокоточной среды выполнения RapidOCR."
i18n_output_hash: 2fdf67eb542c
i18n_source_hash: a19ba25a1ca8
i18n_provenance: human
i18n_output_hash: 563e222b9e12
---
# PDF OCR {#pdf-ocr}
Извлекайте текст из PDF-документов с помощью оптического распознавания символов на базе ИИ. Поддерживает несколько уровней качества и языков. Требует установленного пакета функций OCR.
Извлекайте текст из отсканированных документов PDF постранично, не отправляя PDF во внешнюю службу. Встроенный уровень `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 Endpoint {#api-endpoint}
`POST /api/v1/tools/pdf/ocr-pdf`
@@ -19,9 +25,14 @@ i18n_output_hash: 563e222b9e12
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| quality | string | Нет | `"balanced"` | Уровень качества OCR: `fast`, `balanced`, `best` |
| file | file | Да | - | Файл PDF (многочастный), закодированный до 512 MiB; по-прежнему действует более низкий лимит загрузки оператора |
| quality | string | Нет | Динамический | Уровень качества OCR: `fast`, `balanced` или `best`. |
| language | string | Нет | `"auto"` | Язык документа: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko` |
| pages | string | Нет | `"all"` | Выбор страниц, например `"all"`, `"1-3"`, `"1,3,5"` |
| 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 {#example-request}
@@ -29,7 +40,7 @@ i18n_output_hash: 563e222b9e12
curl -X POST http://localhost:1349/api/v1/tools/pdf/ocr-pdf \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@scanned.pdf" \
-F 'settings={"quality": "best", "language": "en", "pages": "1-5"}'
-F 'settings={"quality": "best", "language": "en", "pages": "1-5", "enhance": true}'
```
## Example Response {#example-response}
@@ -46,8 +57,11 @@ curl -X POST http://localhost:1349/api/v1/tools/pdf/ocr-pdf \
## Notes {#notes}
- Принимаемый входной формат: `.pdf`.
- Это инструмент ИИ, требующий установленного **пакета функций OCR**. Если пакет не установлен, API возвращает `501 Not Implemented`.
- Уровень качества `fast` использует более лёгкую модель для более быстрой обработки; `best` использует более точную модель ценой скорости.
- Настройка языка `auto` пытается определить язык документа автоматически.
- `fast` встроен и добавляет к официальному образу около 25 MiB. Для `balanced` и `best` требуется дополнительный точный пакет OCR (около 208-234 MiB для загрузки и 409-488 MiB, установленный, в зависимости от цели).
- Пакет точный поддерживает Linux amd64 и arm64 и использует ONNX Runtime на CPU, в том числе на хостах NVIDIA.
- Явно запрошенный уровень никогда не понижается автоматически. Если `balanced` или `best` недоступны, API возвращает `501` с `FEATURE_NOT_INSTALLED` или `FEATURE_INCOMPATIBLE`.
- Страницы PDF растрируются с высоким разрешением перед OCR. `best` запускает высокоточные средние модели PP-OCRv6 и оценивает варианты ориентации и улучшения, улучшая распознавание за счет скорости.
- Языковая настройка `auto` обеспечивает распознавание в рамках поддерживаемого набора сценариев; явная подсказка может улучшить результаты для известного языка документа.
- Вы можете указать конкретные страницы с помощью диапазонов (`"1-3"`), списков через запятую (`"1,3,5"`) или `"all"` для всех страниц.
- Запрос может обрабатывать не более 50 страниц. Растрированные рабочие данные ограничены 512 MiB, а совокупный ответ OCR UTF-8 ограничен 1 000 000 байт; задания превышения лимита завершаются неудачей, а не возвращают частичный текст.
- Для PDF, которые уже содержат выделяемый текст, рассмотрите использование более быстрого инструмента [PDF to Text](./pdf-to-text).