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: "Extraire le texte de documents PDF à l'aide d'une OCR assistée par IA."
i18n_source_hash: 1431fcba180b
description: "Extrayez localement le texte des PDF numérisés avec Tesseract intégré ou le runtime RapidOCR haute précision en option."
i18n_output_hash: f66b6b57bee4
i18n_source_hash: a19ba25a1ca8
i18n_provenance: human
i18n_output_hash: 76a0a8e20bc9
---
# OCR de PDF {#pdf-ocr}
Extrayez le texte de documents PDF à l'aide de la reconnaissance optique de caractères assistée par IA. Prend en charge plusieurs niveaux de qualité et plusieurs langues. Nécessite l'installation du pack de fonctionnalités OCR.
Extrayez le texte des documents PDF numérisés page par page sans envoyer le PDF à un service externe. Le niveau `fast` intégré utilise Tesseract. Les niveaux optionnels `balanced` et `best` utilisent RapidOCR avec les modèles PP-OCR ONNX épinglés.
<!-- korean-ocr-contract:start -->
::: info Compatibilité de lOCR coréen
LOCR rapide prend en charge `auto`, `en`, `de`, `es`, `fr`, `zh` et `ja`, mais pas le coréen (`ko`). Le coréen nécessite le pack OCR précis et `balanced` ou `best`. Le pack fonctionne dans les conteneurs Linux amd64 et arm64 officiels, y compris sur les hôtes NVIDIA où lOCR reste exécuté sur le CPU. Un système non pris en charge reçoit une erreur de compatibilité explicite, sans repli silencieux vers `fast`. Le coréen avec `fast` ou lalias historique `tesseract` est refusé avant la mise en file avec `FEATURE_INCOMPATIBLE` et `fast-korean-unsupported`.
:::
<!-- korean-ocr-contract:end -->
## Point de terminaison de l'API {#api-endpoint}
`POST /api/v1/tools/pdf/ocr-pdf`
@@ -19,9 +25,14 @@ Accepte des données de formulaire multipart avec un fichier PDF et un champ `se
| Paramètre | Type | Requis | Par défaut | Description |
|-----------|------|----------|---------|-------------|
| quality | string | Non | `"balanced"` | Niveau de qualité OCR : `fast`, `balanced`, `best` |
| file | file | Oui | - | Fichier PDF (en plusieurs parties), jusqu'à 512 MiB codés ; une limite inférieure de téléchargement par l'opérateur s'applique toujours |
| quality | string | Non | Dynamique | Niveau de qualité OCR : `fast`, `balanced` ou `best` |
| language | string | Non | `"auto"` | Langue du document : `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko` |
| pages | string | Non | `"all"` | Sélection de pages, par exemple `"all"`, `"1-3"`, `"1,3,5"` |
| enhance | boolean | Non | Dépend du niveau | Améliorer le contraste local avant la reconnaissance. Fast l'applique directement ; Equilibré et Meilleur conservent la variante uniquement lorsque la notation calibrée améliore le résultat. La valeur par défaut est `true` pour `best` et `false` pour `fast`/`balanced` |
| engine | string | Non | - | Alias de compatibilité obsolète. Utilisez plutôt `quality`. `tesseract` correspond à `fast` ; la valeur `paddleocr` héritée est mappée à `balanced` mais ne charge pas PaddlePaddle |
Lorsque `quality` et `engine` sont omis, SnapOtter choisit le meilleur niveau disponible dans cet ordre : `best`, `balanced`, `fast`. Pour le coréen, `fast` nest jamais choisi : `best`, puis `balanced` sont utilisés, sinon une erreur dinstallation ou de compatibilité du moteur précis est renvoyée.
## Exemple de requête {#example-request}
@@ -29,7 +40,7 @@ Accepte des données de formulaire multipart avec un fichier PDF et un champ `se
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}'
```
## Exemple de réponse {#example-response}
@@ -46,8 +57,11 @@ Renvoie `202 Accepted`. Suivez la progression via SSE à `/api/v1/jobs/{jobId}/p
## Remarques {#notes}
- Format d'entrée accepté : `.pdf`.
- Il s'agit d'un outil d'IA qui nécessite l'installation du **pack de fonctionnalités OCR**. Si le pack n'est pas installé, l'API renvoie `501 Not Implemented`.
- Le niveau de qualité `fast` utilise un modèle plus léger pour un traitement plus rapide ; `best` utilise un modèle plus précis au prix de la vitesse.
- Le réglage de langue `auto` tente de détecter automatiquement la langue du document.
- `fast` est intégré et ajoute environ 25 MiB à l'image officielle. `balanced` et `best` nécessitent le pack OCR précis en option (environ 208-234 MiB à télécharger et 409-488 MiB installés, selon la cible).
- Le pack précis prend en charge Linux amd64 et arm64 et utilise ONNX Runtime sur CPU, y compris sur les hôtes NVIDIA.
- Un niveau explicitement demandé n'est jamais rétrogradé silencieusement. Si `balanced` ou `best` n'est pas disponible, API renvoie `501` avec `FEATURE_NOT_INSTALLED` ou `FEATURE_INCOMPATIBLE`.
- Les pages PDF sont pixellisées en haute résolution avant OCR. `best` exécute les modèles PP-OCRv6 moyens de plus haute précision et note des variantes d'orientation et d'amélioration, améliorant ainsi la reconnaissance au détriment de la vitesse.
- Le paramètre de langue `auto` permet la reconnaissance dans l'ensemble de scripts pris en charge ; une indication explicite peut améliorer les résultats pour un langage de document connu.
- Vous pouvez cibler des pages spécifiques à l'aide de plages (`"1-3"`), de listes séparées par des virgules (`"1,3,5"`), ou de `"all"` pour chaque page.
- Une demande peut traiter au maximum 50 pages. Les données de travail rastérisées sont limitées à 512 MiB et la réponse UTF-8 OCR globale est limitée à 1 000 000 octets ; les tâches dépassant la limite échouent plutôt que de renvoyer un texte partiel.
- Pour les PDF qui contiennent déjà du texte sélectionnable, envisagez plutôt d'utiliser l'outil [PDF vers texte](./pdf-to-text), plus rapide.