Adaptateurs OCR Tesseract

HPDFTesseractRecognition fournit des moteurs Windows optionnels implémentant IHPDFOCREngine pour les couches de texte OCR consultables

Fabrique DLL native

function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
  TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
  TessDataDirectory, Language: string;
  const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;

Fournissez une DLL Tesseract existante exposant l'API C compatible Tesseract 5, un répertoire tessdata et un identifiant de langue ASCII ou une combinaison telle que eng, chi_sim ou chi_sim+eng

L'architecture de la bibliothèque doit correspondre à celle de l'application : une application Win32 charge une DLL 32 bits, tandis qu'une application Win64 charge une DLL 64 bits

Placez les DLL de dépendances requises à côté de la bibliothèque choisie ou dans les répertoires standard du loader Windows ; l'adaptateur charge le chemin de bibliothèque explicite sans changer le répertoire courant ni le chemin de recherche du processus

La fabrique vérifie chaque fichier .traineddata demandé, charge la bibliothèque et résout les exports requis avant de retourner ; des chemins, modèles ou options invalides, des exports manquants, des incompatibilités d'architecture et des dépendances indisponibles lèvent une exception

Aucun runtime OCR ni aucun modèle n'est livré ni téléchargé automatiquement

Les deux fabriques sont disponibles dans le paquet FPC/Lazarus Windows ainsi que dans les builds Delphi et C++Builder ; recompilez Lib/FPC/HotPDFLaz.lpk pour l'architecture cible avant d'utiliser HPDFTesseractRecognition

L'adaptateur FPC natif lit l'image brute LCL courante, y compris les pixels écrits via les scanlines, et préserve les mots Unicode indépendamment de la page de codes ANSI du système

Options

THPDFTesseractOptions = record
  PageSegMode: THPDFTesseractPageSegMode;
  EngineMode: THPDFTesseractEngineMode;
  TimeoutMilliseconds: Cardinal;
  MaxPixels: Integer;
  class function Default: THPDFTesseractOptions; static;
end;

Appelez THPDFTesseractOptions.Default avant de surcharger les champs ; le même record peut configurer la fabrique DLL native ou la surcharge CLI locale à options

ChampDéfautSignification
PageSegModetpsAutoSegmentation de page automatique sans détection d'orientation
EngineModetemDefaultLe mode de moteur pris en charge par les modèles de langue sélectionnés
TimeoutMilliseconds60000Une échéance de requête de 1 à 3 600 000 millisecondes ; la DLL coopère avec l'annulation, tandis que le worker CLI est terminé en cas de dépassement
MaxPixels16777216Le budget de pixels d'entrée, configurable de 1 à 67 108 864 pixels
THPDFTesseractPageSegMode = (
  tpsOSDOnly, tpsAutoOSD, tpsAutoOnly, tpsAuto, tpsSingleColumn,
  tpsSingleBlockVertical, tpsSingleBlock, tpsSingleLine, tpsSingleWord,
  tpsCircleWord, tpsSingleCharacter, tpsSparseText, tpsSparseTextOSD,
  tpsRawLine);
THPDFTesseractEngineMode = (
  temLegacyOnly, temLSTMOnly, temLegacyAndLSTM, temDefault);

tpsOSDOnly et tpsAutoOnly n'effectuent aucune reconnaissance de mots et sont rejetés par l'adaptateur ; tpsAutoOSD et tpsSparseTextOSD exigent en plus osd.traineddata

Utilisez tpsSingleLine pour une ligne de texte, tpsSingleBlock pour un bloc uniforme ou tpsSparseText pour du texte épars ; ces modes ne réparent pas la perspective d'un scan et n'offrent aucune garantie de mise en page générale

temLSTMOnly exige des modèles LSTM, tandis que les modes legacy exigent les composants de modèles legacy correspondants ; les combinaisons non prises en charge échouent lors de l'initialisation native

Exemple de PDF consultable

Le PDF doit déjà être chargé, et la DLL, les dépendances et les modèles de langue doivent être installés aux emplacements montrés

uses SysUtils, HPDFDoc, HPDFTesseractRecognition;

procedure AddNativeOCRText(PDF: THotPDF);
var
  Engine: IHPDFOCREngine;
  NativeOptions: THPDFTesseractOptions;
  LayerOptions: THPDFOCRTextLayerOptions;
  Info: THPDFOCRTextLayerInfo;
begin
  NativeOptions := THPDFTesseractOptions.Default;
  NativeOptions.EngineMode := temLSTMOnly;
  NativeOptions.PageSegMode := tpsAuto;
  Engine := HPDFCreateTesseractDLLOCREngine(
    'C:\OCR\libtesseract-5.dll', 'C:\OCR\tessdata',
    'chi_sim+eng', NativeOptions);
  LayerOptions := THPDFOCRTextLayerOptions.Default;
  if not PDF.ApplyLoadedOCRTextLayer([0], Engine, LayerOptions, Info) then
    raise Exception.Create(string(Info.Diagnostic));
end;

Résultats et propriété des ressources

L'adaptateur copie le bitmap emprunté dans un tampon en niveaux de gris de haut en bas, transmet la DPI demandée et reconnaît via une instance d'API native locale à la requête

Les mots conservent l'ordre de lecture natif, le texte Unicode UTF-8 validé, les bornes en pixels haut-gauche et une confiance ramenée de 0 à 100 vers 0 à 1 ; les caractères supplémentaires consomment deux unités UTF-16

Les lignes de base de mots disponibles sont transmises avec leurs deux extrémités ; lorsqu'une ligne de base est indisponible, le repli géométrique existant de la couche de texte s'applique

Pour une ligne de base majoritairement verticale, l'adaptateur natif utilise la largeur de la boîte du mot comme TextHeightPixels ; les lignes de base horizontales utilisent la hauteur de la boîte, directions de lecture inversées comprises, si bien que la longueur d'un mot vertical ne devient pas sa taille de police

Il s'agit d'une estimation sur l'axe dominant : une boîte de mot et une ligne de base alignées sur les axes seules ne peuvent pas retrouver la hauteur de texte exacte sous des angles d'inclinaison arbitraires

Une page vide réussit avec un tableau de mots vide ; un UTF-8 malformé, des caractères de contrôle embarqués, une géométrie ou une confiance invalides, des budgets de mots ou de texte épuisés, l'annulation et les échecs de reconnaissance renvoient False, effacent tous les mots partiels et alimentent le diagnostic

Chaque requête libère son itérateur, ses chaînes natives allouées, son moniteur et son instance d'API ; la libération de l'adaptateur décharge sa référence de bibliothèque

Limites et annulation

Chaque dimension d'entrée doit être au plus de 32 767 pixels et tenir dans MaxPixels ; le texte reconnu doit tenir dans le budget MaxTextCodeUnits de la requête et la limite de 1 048 576 unités UTF-16 de l'adaptateur, et le nombre de mots doit tenir dans MaxWords

L'adaptateur vérifie l'annulation et le temps écoulé pendant la conversion du bitmap et l'itération des résultats, et fournit un moniteur natif avec l'échéance restante et un callback d'annulation pendant la reconnaissance

L'annulation native est coopérative : le moniteur de Tesseract couvre la reconnaissance de mots et n'interrompt pas chaque étape d'initialisation ou d'analyse de mise en page ; ces appels peuvent se terminer avant qu'une annulation demandée ou une échéance expirée ne soit signalée

Les budgets de pixels et de sortie n'imposent aucune limite stricte à la mémoire de modèles ou de reconnaissance de la bibliothèque native ; utilisez l'adaptateur par processus lorsque l'application a besoin d'un worker terminable séparément

ApplyLoadedOCRTextLayer valide tous les résultats et publie chaque page sélectionnée atomiquement, si bien qu'un échec d'adaptateur laisse le document chargé inchangé

L'adaptateur DLL rejette l'UTF-8 invalide, rogne le texte des mots décodés et rejette les caractères de contrôle C0, DEL et C1 restants avant de renvoyer les résultats, si bien qu'un texte malformé fait échouer la demande au lieu d'être omis en silence par la couche de texte PDF

Fabrique CLI locale

function HPDFCreateTesseractOCREngine(const ExecutablePath,
  TessDataDirectory, Language: string;
  TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
  TessDataDirectory, Language: string;
  const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;

La surcharge à options transmet PageSegMode comme --psm et EngineMode comme --oem, utilise le délai d'attente configuré et vérifie MaxPixels avant d'enregistrer le bitmap emprunté ou de démarrer un worker

La surcharge à délai d'attente existante conserve la segmentation de page automatique et le mode de moteur choisi par l'exécutable sans imposer de nouvelle limite de pixels d'adaptateur ; utilisez la surcharge à options lorsqu'une limite d'entrée explicite est requise

Les deux surcharges conservent la DPI demandée, la sortie TSV, les handles hérités restreints, la scrutation d'annulation et la terminaison du worker en cas d'échec ; la CLI n'a pas d'informations de lignes de base natives, limite la sortie TSV à 64 Mio et la sortie du fichier de diagnostic à 1 Mio

Des modes de segmentation, modes de moteur, délais d'attente ou limites de pixels invalides lèvent EArgumentException lors de la création du moteur configuré ; la disponibilité des modèles, y compris osd.traineddata pour les modes d'orientation, et la compatibilité modèle/moteur sont vérifiées par l'exécutable pendant la reconnaissance

var
  CLIOptions: THPDFTesseractOptions;
  Engine: IHPDFOCREngine;
begin
  CLIOptions := THPDFTesseractOptions.Default;
  CLIOptions.PageSegMode := tpsSingleLine;
  CLIOptions.EngineMode := temLSTMOnly;
  CLIOptions.MaxPixels := 8000000;
  Engine := HPDFCreateTesseractOCREngine(
    'C:\OCR	esseract.exe', 'C:\OCR	essdata', 'eng', CLIOptions);
end;

Utilisez tpsSingleWord pour un mot isolé, tpsSparseText pour du texte épars, ou tpsSingleBlockVertical avec un modèle de texte vertical adapté pour un bloc vertical unique ; la fabrique ne rogne pas les pages et ne sélectionne pas les modèles automatiquement

L'adaptateur CLI valide strictement l'UTF-8, rejette les octets NUL et les caractères de contrôle C0/C1 à l'intérieur des mots reconnus, et efface tous les résultats si une sortie malformée suit un mot sinon valide

Voir Couches de texte OCR consultables pour l'exemple CLI, les options de rendu, le regroupement de contenu optionnel et les limites de conformité