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.
9.3 KiB
description, i18n_output_hash, i18n_source_hash, i18n_provenance
| description | i18n_output_hash | i18n_source_hash | i18n_provenance |
|---|---|---|---|
| Извлекайте текст из изображений локально с помощью встроенного Tesseract или дополнительной высокоточной среды выполнения RapidOCR. | e16d836b025c | 0d453b49db02 | human |
OCR / Извлечение текста
Извлекайте текст из изображений, не отправляя изображение во внешний сервис. Встроенный уровень fast использует Tesseract. Дополнительные уровни balanced и best используют RapidOCR с закрепленными моделями PP-OCR ONNX.
::: 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.
:::
Эндпоинт API
POST /api/v1/tools/image/ocr
Обработка: OCR всегда выполняется асинхронно. После проверки и постановки в очередь конечная точка сразу возвращает 202 Accepted с jobId. Отслеживайте поток выполнения задания SSE до конечного события complete или failed; при успешном завершении его result содержит поля OCR.
Точный пакет OCR: Дополнительная среда выполнения ocr (около 208–234 MiB для загрузки и 409–488 MiB, установленная в зависимости от цели). fast не требует этого пакета; установщик проверяет точные размеры, связанные подписанным индексом.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
| 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, либо возвращается ошибка установки или совместимости точной среды выполнения.
Пример запроса
curl -X POST http://localhost:1349/api/v1/tools/image/ocr \
-F "file=@document.png" \
-F 'settings={"quality":"best","language":"en","enhance":true}'
Принятый ответ (202)
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
Ход выполнения и результат (SSE)
Подключитесь к GET /api/v1/jobs/{jobId}/progress, используя jobId из ответа 202 (или переданный clientJobId). Держите поток открытым до конечного события complete или failed. Успешный конечный кадр содержит результат OCR в поле result:
{
"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.
Примечания
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, превышающие ограниченные выходные пределы, отклоняются, а не частично обрабатываются.