Adaptateur RapidOCR à modèles locaux
Pour une inférence ONNX en process avec mise en cache, utilisez l'adaptateur RapidOCR DLL natif avec HPDFCreateRapidOCRDLLOCREngine et THPDFRapidOCRDLLOptions
L'adaptateur natif fournit des préréglages THPDFRapidOCRDLLOptions.ForLanguage pour le chinois simplifié et traditionnel, l'anglais, les langues latines, le japonais, le coréen, les langues cyrilliques dont le russe, les langues arabes et les langues devanagari
HPDFRapidOCRRecognition fournit un adaptateur par processus Windows implémentant IHPDFOCREngine dans les builds Delphi, C++Builder et FPC/Lazarus Win32 et Win64
Provisionnez Python avec rapidocr et onnxruntime, le pont tools/OCR/rapidocr_tsv.py fourni et des modèles ONNX locaux compatibles ; l'adaptateur n'installe aucun paquet et ne télécharge aucun modèle, dictionnaire ou police
Python s'exécute dans un processus masqué séparé, donc son architecture peut différer de celle de l'application appelante ; son paquet ONNX Runtime doit correspondre à sa propre architecture Python
Surcharges de fabrique
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;
La surcharge avec délai d'attente d'origine reste compatible avec le protocole de pont existant et utilise les trois noms de fichiers de modèles PP-OCRv4 par défaut ; elle vérifie les chemins de l'exécutable, du script et du répertoire à la construction, et vérifie la disponibilité des modèles dans le worker
La surcharge avec options vérifie chaque modèle requis, un dictionnaire optionnel et la police locale avant de retourner l'adaptateur ; des fichiers manquants ou des options invalides lèvent EArgumentException avant le démarrage de la reconnaissance
Les chemins relatifs de modèles, de dictionnaires et de polices se résolvent par rapport à ModelDirectory ; les chemins absolus peuvent pointer vers des fichiers approvisionnés séparément
Utilisez des modèles compatibles avec le pipeline de détection, de classification et de reconnaissance CTC de RapidOCR ; un modèle issu d'un autre pipeline OCR peut exiger un prétraitement différent et ne peut pas être choisi au seul motif qu'il utilise le format ONNX
Sélection de modèles par langue
L'adaptateur par processus Python continue d'utiliser des chemins THPDFRapidOCROptions explicites ; ForLanguage appartient au record d'options de la DLL native et n'est pas une méthode de l'adaptateur Python
Provisionnez les modèles et dictionnaires de langue locaux avec tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ou sélectionnez -Language All pour les neuf profils de langue
Le helper vérifie les hachages SHA256 épinglés et place chaque module de reconnaissance dans <profile>/recognition.onnx avec son <profile>/dictionary.txt correspondant ; la reconnaissance à l'exécution reste hors ligne sans téléchargements automatiques
Pour le russe, utilisez cyrillic/recognition.onnx et cyrillic/dictionary.txt ; le chinois simplifié utilise le profil ch et le chinois traditionnel utilise chinese_cht
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'ch_PP-OCRv3_det_infer.onnx';
Models.RecognitionModel := 'cyrillic/recognition.onnx';
Models.CharacterDictionary := 'cyrillic/dictionary.txt';
Models.ClassificationModel := 'ch_ppocr_mobile_v2.0_cls_infer.onnx';
Les noms de fichiers racine du détecteur et du classifieur ci-dessus correspondent aux modèles partagés du helper d'approvisionnement ; fournissez ensemble le modèle de reconnaissance et le dictionnaire correspondants, et choisissez un moteur séparé pour les pages ou régions qui ont besoin d'une autre écriture
Options et valeurs par défaut
THPDFRapidOCROptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
FontPath: string;
UseAngleClassifier: Boolean;
IntraOpThreads: Integer;
InterOpThreads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCROptions; static;
end;
Initialisez le record avec THPDFRapidOCROptions.Default avant de surcharger les champs
| Champ | Défaut | Signification |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Modèle de détection local |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Modèle de reconnaissance local |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Requis uniquement lorsque la classification d'angle est activée |
CharacterDictionary | Vide | Utilise les métadonnées de caractères embarquées du modèle de reconnaissance ; fournissez un dictionnaire local lorsque le modèle n'a pas ces métadonnées |
FontPath | Vide | Résolu vers %WINDIR%\Fonts\arial.ttf pour le conteneur de résultats de RapidOCR |
UseAngleClassifier | True | Active la classification d'angle du texte ; lorsque désactivé, aucun modèle de classification n'est requis ni transmis |
IntraOpThreads | 1 | Threads intra-opération ONNX, de 1 à 64, plafonnés au nombre de CPU logiques du worker |
InterOpThreads | 1 | Threads inter-opérations ONNX avec les mêmes limites |
MaxPixels | 16777216 | Budget de pixels d'entrée, de 1 à 67 108 864 |
TimeoutMilliseconds | 60000 | Échéance totale de la requête, de 1 à 3 600 000 millisecondes |
Le pont sélectionne explicitement le backend CPU d'ONNX Runtime pour toutes les étapes et désactive les téléchargements automatiques ; un dictionnaire de caractères embarqué manquant exige un CharacterDictionary local provisionné
Exemple avec modèles explicitement sélectionnés
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddLocalRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCROptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'PP-OCRv6_det_small.onnx';
Models.RecognitionModel := 'PP-OCRv6_rec_small.onnx';
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Local RapidOCR text layer was not added');
end;
Résultats, budgets et annulation
Chaque requête sérialise le bitmap emprunté dans un répertoire temporaire privé, démarre un worker Python local et nettoie ses handles de processus et fichiers temporaires à la fin de la requête
La surcharge avec options vérifie MaxPixels avant la sérialisation du bitmap ; le worker vérifie aussi les dimensions d'entrée avant de charger les modèles et reçoit les limites MaxWords et MaxTextCodeUnits de la requête
Le pont demande les coordonnées des caractères et valide la géométrie, la confiance et la couverture de texte de chaque caractère, puis émet chaque ligne reconnue complète avec ses espaces internes et sa ponctuation d'origine, les bornes englobantes en pixels de l'image d'origine et la confiance moyenne dans la plage 0 à 1
Chaque ligne émise consomme un créneau MaxWords ; les espaces internes comptent dans MaxTextCodeUnits, et la publication d'une ligne entière évite que la couche de texte ne confonde l'espacement des lettres avec l'espacement des mots
L'espacement est préservé à partir du texte de ligne du module de reconnaissance ; le texte que la détection scinde en boîtes séparées dépend toujours de l'inférence spatiale des écarts entre mots, et les lecteurs PDF externes peuvent reconstruire ou fusionner les espaces répétés lors de l'extraction
Les caractères supplémentaires consomment deux unités UTF-16 ; des coordonnées, une confiance ou des caractères de contrôle invalides ou des budgets épuisés font échouer la reconnaissance et effacent les résultats partiels
Une page vide réussit avec un tableau de mots vide ; aucune ligne de base native n'est fournie, donc la couche de texte utilise son repli géométrique existant
L'annulation, le délai d'attente et les tailles de sortie sont scrutés toutes les 25 millisecondes ; un job Windows contient le worker et les éventuels processus enfants de l'interpréteur, et la terminaison attend jusqu'à cinq secondes supplémentaires pour le nettoyage des processus
ApplyLoadedOCRTextLayer publie toutes les pages sélectionnées atomiquement après le succès de la reconnaissance
La sortie TSV est limitée à 64 Mio et la sortie de diagnostic à 1 Mio ; les budgets d'entrée et de sortie n'imposent aucun plafond strict à la mémoire des modèles ONNX ou de l'inférence
L'initialisation des modèles a lieu dans un nouveau processus Python pour chaque requête et est incluse dans l'échéance
Validation
Les runners d'adaptateurs partagés Delphi et FPC couvrent le preflight des modèles, les chemins personnalisés, la classification optionnelle, l'Unicode, les budgets, les échecs de worker, l'annulation et le délai d'attente ; leurs paramètres RapidOCR optionnels activent la reconnaissance réelle et les contrôles d'aller-retour de PDF consultable
Utilisez Tests/Delphi/Run-TesseractRecognitionTests.ps1 ou Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 avec -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel et -RapidOCRRecognitionModel
Voir Couches de texte OCR consultables pour les options de rendu, le mapping de texte PDF Unicode, le regroupement de contenu optionnel et les limites de conformité