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

ChampDéfautSignification
DetectionModelch_PP-OCRv4_det_mobile.onnxModèle de détection local
RecognitionModelch_PP-OCRv4_rec_mobile.onnxModèle de reconnaissance local
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxRequis uniquement lorsque la classification d'angle est activée
CharacterDictionaryVideUtilise 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
FontPathVideRésolu vers %WINDIR%\Fonts\arial.ttf pour le conteneur de résultats de RapidOCR
UseAngleClassifierTrueActive la classification d'angle du texte ; lorsque désactivé, aucun modèle de classification n'est requis ni transmis
IntraOpThreads1Threads intra-opération ONNX, de 1 à 64, plafonnés au nombre de CPU logiques du worker
InterOpThreads1Threads inter-opérations ONNX avec les mêmes limites
MaxPixels16777216Budget de pixels d'entrée, de 1 à 67 108 864
TimeoutMilliseconds60000É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é