Scan-Vorverarbeitung und strukturiertes OCR
HPDFScanPreprocess nimmt eine Graphics.TBitmap im Besitz des Aufrufers entgegen und liefert ein privates korrigiertes Bild plus invertierbare Geometrie; HPDFScanOCRWorkflow nutzt eine vorhandene IHPDFOCREngine und liefert zurückgemappte Wörter und ein semantisches Layout
Das mitgelieferte Abnahmeprofil verwendet Delphi und Windows FPC/Lazarus; der Tesseract-OSD-Prozessadapter nutzt Windows-APIs und gehört nicht zum nativen Linux-Headless-Document-Profil
Korrekturen und Nachweise
Die Korrekturreihenfolge ist: übergebener Perspektiv-Quad, Orientierung im Uhrzeigersinn und Entzerrung mit kontinuierlichem Winkel, mit bilinearer inverser Abtastung und weißer Füllung außerhalb der gelieferten Quellregion
Explizite Orientierung unterstützt 0, 90, 180 und 270 Grad im Uhrzeigersinn; automatische Orientierung braucht einen Detector und weist unzureichende oder fehlerhafte Nachweise zurück
HPDFScanOrientationTesseract stellt einen echten Windows-Tesseract-OSD-Adapter bereit, der eine explizite ausführbare Datei und ein tessdata-Verzeichnis mit osd.traineddata verwendet; er startet --psm 0 -l osd --dpi 300 direkt in einem versteckten Prozess ohne Shell
Die Standardschwelle für die Roh-Orientierungsmarge ist 15; LastOrientationScore bewahrt den tatsächlichen Tesseract-Score, die normalisierte Konfidenz ist der Score geteilt durch 15, geklemmt auf [0, 1]; diese Normalisierung ist eine Nachweis-Skala, keine kalibrierte Wahrscheinlichkeit
Automatisches Deskew tastet echte dunkle Pixel ab und vergleicht die Zeilenprojektions-Konzentration über einen begrenzten Winkelbereich; der Standardbereich ist ±10 Grad in 0.25-Grad-Schritten mit einer Nachweisschwelle von 0.2; bei unzureichenden Nachweisen bleibt der explizite Winkel erhalten und DeskewAccepted = False wird vermerkt
Explizites Deskew akzeptiert jeden kontinuierlichen Winkel von -180 bis 180 Grad; die automatische Suche unterstützt einen Radius bis 45 Grad, und der Schritt muss zwischen 0.1 und 5 Grad liegen
Perspektivkorrektur braucht ein endliches konvexes Quad in der Reihenfolge oben links, oben rechts, unten rechts, unten links innerhalb des Quell-Rasters plus explizite Zielabmessungen; eine automatische Quad-Erkennung gibt es nicht
Aufräumen und endliche Budgets
Die Voreinstellungen normalisieren kachellokale Schatten, entfernen zusammenhängende dunkle Randzeilen und -spalten und erhalten eine Graustufen-Ausgabe; optionale 3-mal-3-Median-Rauschunterdrückung und Binär-Ausgabe lassen sich einschalten
Das Aufräumen weißt Randpixel auf hell um, ohne den Koordinatenursprung zu ändern; RemovedBorderPixels meldet betroffene Pixel, und einheitlich leere Raster überspringen OCR
Standardgrenzen sind 32768 Pixel pro Dimension, 16777216 Eingabe- und Ausgabepixel, eine konservative Arbeitsspeicher-Schätzung von 512 MiB, 500000000 Arbeitseinheiten und 20000 Deskew-Abtastungen; Quellpixel müssen zudem in einen vorzeichenbehafteten Ganzzahlindex passen
Die Schätzung deckt eigene Raster-Klone, Graustufen-Arrays, Ausgabespeicher, Abtastungen und Histogramme ab; sie begrenzt weder die Quell-Bitmap des Aufrufers noch Grafik-Allokationen des Betriebssystems oder eine beliebige externe OCR-Engine
Tesseract OSD begrenzt Pixel und kombiniertes stdout/stderr separat, fragt Abbruch und Ausgabegröße alle 25 Millisekunden ab und beendet den Kindprozess bei Timeout, Abbruch oder Ausgabeüberlauf; der Timeout muss zwischen 1 und 3600000 Millisekunden liegen, das Ausgabelimit zwischen 1024 und 1048576 Bytes
Besitzverhältnisse und Rollback
HPDFPreprocessScan ändert nie die Quell-Bitmap; bei Erfolg gibt der Aufrufer OutputBitmap frei, bei einem Fehler werden nil und ein Status mit Diagnosenachweisen zurückgegeben
Ein Detector bekommt eine private Kopie; Abbruch ist kooperativ an Zeilen-, Kandidatenwinkel-, Prozesswart- und Wortverarbeitungs-Grenzen; eine gelieferte OCR-Engine muss das Request-Token beachten und ihre eigenen Prozess- und Ausgabelimits einhalten
Der Workflow leert Wörter, semantisches Layout und Zeilen-Quads nach jedem Fehlschlag; der Adapter hält einen veränderlichen Last-Report-Zustand und sollte seriell verwendet werden
Geometrie und strukturiertes OCR
Rasterkoordinaten nutzen einen Ursprung oben links und Pixelzentren; die homogene Matrix wirkt auf den Spaltenvektor (X, Y, 1), mit Division durch dessen dritte Koordinate; bei der Transformmultiplikation A × B wird B zuerst angewendet
SourceToOutput und OutputToSource bewahren die vollständige affine oder projektive Operation; verwenden Sie beim Nutzen der öffentlichen Helfer getrennte Eingabe- und Ausgaberecords
Der OCR-Wrapper liefert der Engine das korrigierte Raster mit unrotierten temporären PDF-Grenzen, validiert UTF-16 und endliche Wortrechtecke, verwirft Wörter mit zu geringer Konfidenz oder ohne Mapping und mappt Rechtecke, Baselines und vier Ecken auf das ursprüngliche Raster zurück
PageQuad und semantische Grenzen berücksichtigen die eingehende PDF-Seitenbox, DPI und Seitenrotation von 0, 90, 180 oder 270 Grad; die Leserichtung wird im korrigierten aufrechten Frame analysiert, bevor die Geometrie zurückgemappt wird
Zeichenintervalle werden aus OCR-Wortboxen interpoliert und bleiben Näherungen; Zeilen-Vierecke bewahren Rotation und Perspektive, die achsenparallele Grenzen nicht abbilden können
HPDFScanOCRLayoutToDOM erzeugt einen eigenen editierbaren Stack in Analyse-Reihenfolge, mit Überschrift-Knoten für erkannte Überschriften und Textknoten für andere Zeilen
Beispiel
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;
Verifikation
Die nicht-GUI-Delphi-Suite prüft explizite Orientierung, reversible kontinuierliche Winkel bis ±179.25 Grad, echte Tesseract-Automatik mit 0/90/180/270-Orientierung und Leere-Erkennung, echte automatische Entzerrung um fünf Grad, Rausch- und Schattenbereinigung, Perspektivecken, Budgets, Abbruch, Quell-Unveränderbarkeit und echtes englischsprachiges OCR auf sechs Raster-Varianten inklusive eines 37.5-Grad-Scans
Jede akzeptierte Wortecke in den echten OCR-Fällen wird über die inverse Transformation zurückgemappt und innerhalb von 1e-6 Pixeln im korrigierten Raster geprüft; die FPC-Smoke-Suite führt zusätzlich echtes Deskew, Abbruch, Allokationslimits, 180-Grad- und Leere-OSD sowie echtes englisches OCR-Layout aus
Die erzeugten öffentlichen Header kompilieren unter C++Builder Win32 und Win64x, einschließlich verwalteter OCR-Reports, Default-Interface-Argumente, Geometrie-Transforms und DOM-Besitz
Setzen Sie HOTPDF_TESSERACT_EXE, HOTPDF_TESSDATA für das OSD-Modell und HOTPDF_OCR_TESSDATA für das englische Modell, um die Verifikation mit externen Engines zu aktivieren; fehlende optionale Laufzeiteinstellungen begründen keine echte OCR-Abnahme