Prétraitement de scans et OCR structuré

HPDFScanPreprocess accepte un Graphics.TBitmap possédé par l’appelant et renvoie une image corrigée privée plus une géométrie inversible ; HPDFScanOCRWorkflow utilise un IHPDFOCREngine existant pour renvoyer des mots mappés et un layout sémantique

Le profil d’acceptation livré utilise Delphi et FPC/Lazarus Windows ; l’adaptateur de processus OSD Tesseract utilise des API Windows et ne fait pas partie du profil de documents headless Linux natif

Corrections et preuves

L’ordre de correction est quad de perspective fourni par l’appelant, orientation horaire, puis deskew à angle continu, avec échantillonnage inverse bilinéaire et remplissage blanc hors de la région source fournie

L’orientation explicite prend en charge 0, 90, 180 et 270 degrés horaires ; l’orientation automatique exige un détecteur et rejette les preuves insuffisantes ou mal formées

HPDFScanOrientationTesseract fournit un véritable adaptateur Tesseract OSD Windows utilisant un exécutable explicite et un répertoire tessdata contenant osd.traineddata ; il lance --psm 0 -l osd --dpi 300 directement dans un processus caché sans shell

Le seuil de marge d’orientation brute par défaut est 15 ; LastOrientationScore conserve le vrai score Tesseract et la confiance normalisée est le score divisé par 15, clampée à [0, 1] ; cette normalisation est une échelle de preuve, pas une probabilité calibrée

Le deskew automatique échantillonne de vrais pixels sombres et compare la concentration de projection de lignes sur une plage d’angles bornée ; la plage par défaut est ±10 degrés par pas de 0,25 degré, avec un seuil de preuve de 0,2 ; des preuves insuffisantes conservent l’angle explicite et enregistrent DeskewAccepted = False

Le deskew explicite accepte tout angle continu de -180 à 180 degrés ; la recherche automatique prend en charge un rayon jusqu’à 45 degrés, et le pas doit être compris entre 0,1 et 5 degrés

La correction de perspective exige un quad convexe fini ordonné haut-gauche, haut-droit, bas-droit, bas-gauche à l’intérieur du raster source et des dimensions cibles explicites ; la détection automatique de quads n’est pas fournie

Nettoyage et budgets finis

Les défauts normalisent les ombres locales aux tuiles, retirent les rangées et colonnes de bords sombres contiguës et préservent une sortie en niveaux de gris ; un débruitage médian 3 par 3 optionnel et une sortie binaire peuvent être activés

Le nettoyage blanchit les pixels de bord sans changer l’origine des coordonnées ; RemovedBorderPixels rapporte les pixels affectés et les rasters uniformément vides sautent l’OCR

Les bornes par défaut sont 32768 pixels par dimension, 16777216 pixels d’entrée et de sortie, une estimation conservative d’allocation de travail de 512 Mio, 500000000 unités de travail et 20000 échantillons de deskew ; les pixels sources doivent en outre tenir dans un index entier signé

L’estimation couvre les clones de rasters possédés, les tableaux en niveaux de gris, le stockage de sortie, les échantillons et les histogrammes ; elle ne plafonne pas le bitmap source de l’appelant, les allocations graphiques du système d’exploitation ni un moteur OCR externe arbitraire

Tesseract OSD borne séparément les pixels et la sortie stdout/stderr combinée, sonde l’annulation et la taille de sortie toutes les 25 millisecondes et termine le processus enfant au timeout, à l’annulation ou au débordement de sortie ; le timeout doit être compris entre 1 et 3600000 millisecondes et la limite de sortie entre 1024 et 1048576 octets

Propriété et rollback

HPDFPreprocessScan n’édite jamais le bitmap source ; en cas de succès l’appelant libère OutputBitmap, tandis qu’un échec renvoie nil et un statut avec preuves de diagnostic

Un détecteur reçoit une copie privée ; l’annulation est coopérative aux frontières de rangées, d’angles candidats, d’attentes de processus et de traitement de mots ; un moteur OCR fourni doit honorer le token de la requête et ses propres limites de processus et de sortie

Le workflow efface mots, layout sémantique et quads de lignes après chaque échec ; l’adaptateur maintient un état de dernier rapport mutable et doit être utilisé en série

Géométrie et OCR structuré

Les coordonnées raster utilisent une origine en haut à gauche et les centres de pixels ; la matrice homogène agit sur le vecteur colonne (X, Y, 1), avec division par sa troisième coordonnée ; la multiplication de transformations A × B applique B d’abord

SourceToOutput et OutputToSource préservent l’opération affine ou projective complète ; mappez des records d’entrée et de sortie séparés quand vous utilisez les helpers publics

L’encapsuleur OCR fournit au moteur le raster corrigé avec des bornes PDF temporaires non pivotées, valide les rectangles de mots UTF-16 et finis, abandonne les mots de confiance insuffisante ou non mappables, et remappe rectangles, lignes de base et quatre coins vers le raster original

PageQuad et les bornes sémantiques tiennent compte de la boîte de page PDF entrante, du DPI et de la rotation de page de 0, 90, 180 ou 270 degrés ; l’ordre de lecture est analysé dans le repère corrigé à l’endroit avant que la géométrie ne soit remappée

Les intervalles de caractères sont interpolés depuis les boîtes de mots OCR et restent approximatifs ; les quadrilatères de lignes préservent la rotation et la perspective que des bornes alignées sur les axes ne peuvent représenter

HPDFScanOCRLayoutToDOM crée une pile éditable possédée dans l’ordre analysé, avec des nœuds de titres pour les titres détectés et des nœuds de texte pour les autres lignes

Exemple

Options := HPDFDefaultScanOCRWorkflowOptions;
Options.Preprocess.AutoOrientation := True;
Detector := HPDFCreateTesseractOrientationDetector(
  TesseractExecutable, OSDModelDirectory,
  HPDFDefaultTesseractOrientationOptions);
Adapter := HPDFCreateScanPreprocessingOCREngine(
  ExistingOCREngine, Options, Detector);
if Adapter.Recognize(Request, Words, Diagnostic) then
begin
  Report := Adapter.LastReport;
  DOM := HPDFScanOCRLayoutToDOM(Report);
  try
    // Consume the editable semantic output here
  finally
    DOM.Free;
  end;
end;

Vérification

La suite Delphi non-GUI vérifie l’orientation explicite, les angles continus réversibles jusqu’à ±179,25 degrés, la vraie orientation automatique Tesseract 0/90/180/270 et le rejet du vide, la vraie correction automatique de skew de cinq degrés, le nettoyage du bruit et des ombres, les coins de perspective, les budgets, l’annulation, l’immutabilité de la source et un vrai OCR anglais sur six variantes raster dont un scan à 37,5 degrés

Chaque coin de mot accepté dans les vrais cas OCR est remappé via la transformation inverse et vérifié à 1e-6 pixels de raster corrigé près ; la suite smoke FPC exécute en plus un vrai deskew, l’annulation, les limites d’allocation, un OSD à 180 degrés et sur vide, et un vrai layout OCR anglais

Les en-têtes publics générés compilent sous C++Builder Win32 et Win64x, y compris les rapports OCR managés, les arguments d’interfaces par défaut, les transformations de géométrie et la propriété du DOM

Définissez HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA pour le modèle OSD et HOTPDF_OCR_TESSDATA pour le modèle anglais afin d’activer la vérification par moteur externe ; des réglages runtime optionnels manquants n’établissent pas une acceptation OCR réelle