Adaptateur RapidOCR DLL natif
HPDFRapidOCRRecognition expose un IHPDFOCREngine en process adossé à HotPDFRapidOCR.dll, avec la même API publique dans les builds Delphi, C++Builder et FPC/Lazarus Windows Win32 et Win64
La DLL effectue l'inférence ONNX CPU directement sur des instantanés mémoire et conserve les modèles initialisés jusqu'à la libération de l'interface du moteur ; le déploiement à l'exécution se compose de la DLL native correspondante et de modèles et d'un dictionnaire locaux compatibles
L'adaptateur par processus Python existant reste disponible avec ses surcharges de fabrique d'origine
Fabrique et options
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
ModelDirectory: string): IHPDFOCREngine; overload;
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
ModelDirectory: string; const Options: THPDFRapidOCRDLLOptions): IHPDFOCREngine; overload;
THPDFRapidOCRDLLOptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
UseAngleClassifier: Boolean;
RightToLeft: Boolean;
Threads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCRDLLOptions; static;
class function ForLanguage(const Language: string): THPDFRapidOCRDLLOptions; static;
end;
Initialisez les options avec THPDFRapidOCRDLLOptions.Default ; les valeurs par défaut utilisent les fichiers locaux suivants
| Champ | Défaut | Signification |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | Modèle de détection DB |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Modèle de reconnaissance CTC compatible PP-OCRv3 ou PP-OCRv4 |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Modèle d'orientation de texte optionnel |
CharacterDictionary | ppocr_keys_v1.txt | Dictionnaire UTF-8 sans BOM, dans l'ordre des caractères du modèle |
UseAngleClassifier | True | Lorsque désactivé, aucun modèle de classification n'est requis ni initialisé |
RightToLeft | False | Ordonne les boîtes détectées de droite à gauche au sein des lignes horizontales ; activé par le préréglage arabe |
Threads | 1 | Nombre de threads CPU ONNX de 1 à 64, plafonné au nombre de processeurs logiques |
MaxPixels | 16777216 | Limite de pixels d'entrée, de 1 à 67 108 864 |
TimeoutMilliseconds | 60000 | Échéance coopérative de reconnaissance, de 1 à 3 600 000 millisecondes |
Les noms de fichiers relatifs se résolvent par rapport à ModelDirectory ; les chemins absolus peuvent sélectionner des fichiers approvisionnés séparément
La fabrique vérifie la disponibilité des fichiers, les options, les exports requis et la version d'ABI avant d'initialiser les modèles ; une configuration invalide lève EArgumentException et les échecs de chargement de modèles lèvent EInvalidOperation avec un diagnostic natif
L'initialisation des modèles a lieu dans la fabrique et est hors de l'échéance de reconnaissance ; les nombres de classes du dictionnaire doivent correspondre au modèle de reconnaissance, et des nombres de classes identiques ne suffisent pas à établir que l'ordre des caractères ou le prétraitement est compatible
Le pipeline fourni utilise la détection DB avec un côté de détection maximal de 1 024 pixels et 50 pixels de marge blanche ; le module de reconnaissance accepte des modèles NCHW compatibles avec une hauteur d'entrée fixe de 32 ou 48 et utilise 48 pour une hauteur dynamique
La reconnaissance préserve le ratio d'aspect pour les modèles à largeur dynamique et normalise les entrées avec marge à une largeur minimale de 320 ; un modèle à largeur fixe plafonne la largeur du crop redimensionné, ce qui peut compresser une longue ligne de texte
La classification d'angle préserve le ratio d'aspect du crop dans la largeur d'entrée de son modèle et remplit les pixels inutilisés de zéros normalisés ; un crop n'est pivoté de 180 degrés que lorsque le score d'inversion dépasse 0,9, ce qui empêche les prédictions de direction faibles de retourner du texte court
Le dictionnaire doit correspondre à l'ordre des caractères du modèle et à son nombre de classes en sortie ; les fins de ligne CRLF du dictionnaire sont acceptées, mais un BOM UTF-8 est rejeté
Lorsque le modèle embarque des métadonnées de caractères, la fabrique vérifie aussi chaque entrée du dictionnaire et son ordre ; la taille du dictionnaire seule ne suffit pas
Chinois, russe et langues courantes
THPDFRapidOCRDLLOptions.ForLanguage sélectionne un modèle de reconnaissance et son dictionnaire correspondant sous le répertoire de modèles local tout en conservant les valeurs par défaut partagées de détecteur, de classifieur, de threads, de pixels et de délai d'attente
La méthode accepte des alias de langue insensibles à la casse, remplace les underscores par des tirets et supprime les espaces englobants ; un tag vide ou non pris en charge lève EArgumentException avant le chargement des modèles
| Répertoire de profil | Langues | Alias courants acceptés |
|---|---|---|
ch | Chinois simplifié et anglais | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Chinois traditionnel | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Anglais | en, en-US, en-GB, eng |
latin | Français, allemand, espagnol, portugais, italien, néerlandais et turc | fr, de, es, pt-BR, it, nl, tr |
japan | Japonais | ja, ja-JP, jpn |
korean | Coréen | ko, ko-KR, kor |
cyrillic | Russe, ukrainien, bulgare et biélorusse | ru, ru-RU, rus, uk, bg, be |
arabic | Arabe, persan et ourdou | ar, fa, ur, ara, fas, urd |
devanagari | Hindi, marathi et népalais | hi, mr, ne, hin, mar, nep |
Chaque profil utilise <profile>/recognition.onnx et <profile>/dictionary.txt ; les noms de profils sont acceptés directement, et les alias régionaux reconnus sont définis explicitement plutôt qu'inférés d'un préfixe arbitraire
Installez les jeux de modèles sélectionnés avant le déploiement avec le helper d'approvisionnement épinglé par SHA256
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All installe les neuf profils ; -SkipClassifier omet le classifieur optionnel, auquel cas définissez UseAngleClassifier := False lors de la création d'un moteur
Le helper vérifie les hachages SHA256 épinglés et installe un détecteur et un classifieur multilingues partagés sous les noms de fichiers racine utilisés par Default ; la reconnaissance s'exécute hors ligne et ne télécharge jamais automatiquement les modèles manquants
Choisissez la langue du moteur pour chaque page ou région ; un moteur ne détecte pas automatiquement la langue et ne combine pas des modules de reconnaissance séparés pour différentes écritures
Les paquets épinglés utilisent des modèles PP-OCRv3 et PP-OCRv4 compatibles ; la précision de la reconnaissance dépend du modèle, de la police, de la résolution et du crop, et le modèle latin peut confondre des accents comme ñ même sur une entrée propre
Les modèles PP-OCRv5 plus récents peuvent exiger un ONNX Runtime plus récent que les bibliothèques statiques utilisées pour compiler la DLL ; un format de modèle non pris en charge fait échouer l'initialisation avec un diagnostic
Les modèles de détection doivent accepter un unique tensor d'image float32 et produire une carte de probabilités float32 de forme [1, 1, H, W] à la résolution d'entrée redimensionnée ; des types, dimensions, valeurs non finies ou probabilités hors de [0, 1] de plus de quatre epsilons machine float32 incompatibles font échouer avec un diagnostic avant l'utilisation des résultats de détection
Les minuscules erreurs d'arrondi sigmoïde dans cette tolérance sont ramenées à [0, 1] avant le seuillage et le scoring de contours, afin que les modèles valides conservent leur comportement de détection normal
Exemple chinois
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddNativeRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCRDLLOptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCRDLLOptions.ForLanguage('zh-CN');
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCRDLLOCREngine(
'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Native RapidOCR text layer was not added');
end;
Conservez l'interface du moteur entre les requêtes pour réutiliser ses modèles ; utilisez une DLL correspondant à l'architecture de l'application appelante et placez ses dépendances à côté d'elle ou dans les répertoires standard du loader Windows
Exemple russe
procedure AddRussianRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCRDLLOptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCRDLLOptions.ForLanguage('ru-RU');
Engine := HPDFCreateRapidOCRDLLOCREngine(
'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Russian RapidOCR text layer was not added');
end;
ru, ru-RU et rus sélectionnent le même modèle et dictionnaire de reconnaissance cyrillic
Résultats et durée de vie
L'adaptateur copie le bitmap courant dans un instantané BGR indépendant de haut en bas ; il vérifie les dimensions et le budget de pixels avant l'allocation et ne modifie pas le bitmap emprunté
Le pipeline natif émet un résultat par ligne de texte reconnue, avec des bornes en pixels de l'image d'origine et la confiance moyenne des caractères ; chaque ligne consomme un créneau MaxWords et aucune ligne de base native n'est fournie
Les boîtes détectées suivent l'ordre de lecture des lignes horizontales, de gauche à droite par défaut et de droite à gauche lorsque RightToLeft est activé ; le préréglage arabe active cette option
La classification d'angle corrige des crops de texte individuels ; elle ne détermine pas l'orientation de la page entière et ne réordonne pas les boîtes de détection séparées d'une page à l'envers en ordre de lecture logique
Le texte reconnu reste dans l'ordre Unicode logique du modèle ; l'adaptateur n'inverse pas automatiquement les chaînes arabes et n'applique pas de façonnage bidirectionnel
L'adaptateur valide l'UTF-8, les caractères de contrôle Unicode, les bornes, la confiance et la limite MaxTextCodeUnits de la requête, avec un plafond strict de texte de 1 048 576 unités UTF-16 ; les caractères supplémentaires consomment deux unités
Une page vide réussit avec un tableau de résultats vide ; un échec efface les résultats partiels, et la publication de PDF consultable conserve le comportement transactionnel de pages atomique existant
Les appels sur un même moteur sont sérialisés ; l'attente du verrou du moteur vérifie l'annulation et l'échéance de reconnaissance toutes les 25 millisecondes
Les callbacks natifs vérifient l'annulation et les échéances avant et après la détection, la classification et chaque ligne reconnue ; un appel d'inférence ONNX individuel ne peut pas être interrompu de force, si bien que l'annulation peut revenir après la fin de l'étape courante
Les limites d'entrée et de texte bornent les allocations de l'adaptateur et la sortie acceptée, mais elles n'imposent aucun plafond strict à la mémoire des modèles, de la détection, du crop ou de l'inférence
Compilation et ABI
Native/RapidOCR contient le pont C++, le module de reconnaissance de modèles compatible, l'en-tête C versionné, la définition d'exports et le projet CMake ; provisionnez des sources de réseaux CPU compatibles exposant DbNet, AngleNet et OcrUtils, plus les bibliothèques ONNX Runtime et OpenCV correspondantes
Utilisez MSVC Windows avec C++17, un Windows SDK et CMake 3.20 ou ultérieur ; la compilation par défaut utilise le CRT release statique, qui doit correspondre aux bibliothèques provisionnées
& tools/Build-HotPDFRapidOCR.ps1 `
-NativeSourceDirectory C:/OCR/native-sources `
-OnnxRuntimeDirectory C:/OCR/onnxruntime/windows-x64 `
-OpenCVDirectory C:/OCR/opencv/x64/vc16/staticlib `
-Platform Win64
OnnxRuntimeDirectory doit contenir OnnxRuntimeConfig.cmake, et OpenCVDirectory doit pointer vers la configuration de bibliothèques spécifique à l'architecture ; sélectionnez Win32 et des bibliothèques x86 correspondantes pour une DLL 32 bits
Le helper de compilation écrit Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll ; -BuildDirectory, -OutputDirectory et -Generator peuvent surcharger l'emplacement de compilation et le générateur Visual Studio
Le pont contient les exceptions C++ et expose la version d'ABI 1 via HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize et HPDFRapidOCRDestroy ; tous utilisent cdecl, des valeurs de statut 32 bits et des longueurs d'octets UTF-8 explicites
La version d'ABI 1 définit aussi l'export optionnel HPDFRapidOCRSetReadingDirection ; l'adaptateur ne l'exige que lorsque RightToLeft est activé, si bien que les DLL existantes peuvent toujours servir des requêtes de gauche à droite
Les callbacks n'empruntent leur texte que pour la durée de l'appel ; l'adaptateur copie le texte validé avant de retourner, et le destructeur du moteur détruit les modèles avant de décharger la DLL
Validation
Avec le paquet Python onnx et une compilation native BUILD_TESTING, exécutez python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe pour vérifier via l'ABI DLL la sortie blanche valide, les rangs de tensors invalides, les canaux et types, les dimensions spatiales incompatibles et les probabilités invalides ; plusieurs chemins de runner peuvent valider les deux architectures en une seule invocation
Ajoutez -RapidOCRLanguageModelDirectory et un ou les deux paramètres de bibliothèque DLL native au runner d'adaptateurs Delphi ou FPC pour valider tous les préréglages installés avec des échantillons de chinois, de russe, de japonais, de coréen, de langues latines courantes, d'arabe et d'hindi ; le russe et le chinois traditionnel subissent aussi l'enregistrement d'un PDF consultable, son rechargement, l'extraction de texte et la comparaison de pixels
Les runners d'adaptateurs Delphi et FPC testent la durée de vie persistante des modèles, la disposition des lignes BGR, les caractères Unicode et supplémentaires, les contrôles d'ABI, les résultats invalides, les budgets, l'annulation coopérative, l'attente sérialisée du verrou et le nettoyage
Fournissez -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library et -RapidOCRNativeModelDirectory à Tests/Delphi/Run-TesseractRecognitionTests.ps1 ou Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 pour la validation réelle de modèles, les pages vides, la gestion des modèles endommagés, la reconnaissance d'anglais et de chinois et les aller-retours de PDF consultable avec des pixels rendus inchangés
Voir Couches de texte OCR consultables pour le rendu de pages, le mapping de texte PDF Unicode, le regroupement de contenu optionnel et les contraintes de conformité