Nativer RapidOCR-DLL-Adapter
HPDFRapidOCRRecognition stellt eine In-Process-IHPDFOCREngine auf Basis von HotPDFRapidOCR.dll bereit, mit derselben öffentlichen API in Delphi-, C++Builder- und Windows-FPC/Lazarus-Win32- und Win64-Builds
Die DLL führt CPU-ONNX-Inferenz direkt auf Speicher-Snapshots aus und behält initialisierte Modelle, bis die Engine-Schnittstelle freigegeben wird; die Laufzeitbereitstellung besteht aus der passenden nativen DLL sowie kompatiblen lokalen Modellen und Wörterbuch
Der vorhandene Python-Prozessadapter bleibt mit seinen ursprünglichen Fabrik-Überladungen verfügbar
Fabrik und Optionen
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;
Initialisieren Sie die Optionen mit THPDFRapidOCRDLLOptions.Default; die Standardwerte verwenden die folgenden lokalen Dateien
| Feld | Standard | Bedeutung |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | DB-Detektionsmodell |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Kompatibles PP-OCRv3- oder PP-OCRv4-CTC-Erkennungsmodell |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Optionales Textorientierungsmodell |
CharacterDictionary | ppocr_keys_v1.txt | UTF-8-Wörterbuch ohne BOM in der Zeichenreihenfolge des Modells |
UseAngleClassifier | True | Wenn deaktiviert, wird kein Klassifikationsmodell benötigt oder initialisiert |
RightToLeft | False | Ordnet erkannte Boxen innerhalb horizontaler Zeilen von rechts nach links; aktiviert durch die arabische Voreinstellung |
Threads | 1 | ONNX-CPU-Thread-Anzahl von 1 bis 64, begrenzt auf die logische Prozessoranzahl |
MaxPixels | 16777216 | Eingabe-Pixellimit, von 1 bis 67.108.864 |
TimeoutMilliseconds | 60000 | Kooperative Erkennungsdeadline, von 1 bis 3.600.000 Millisekunden |
Relative Dateinamen werden gegen ModelDirectory aufgelöst; absolute Pfade können separat bereitgestellte Dateien wählen
Die Fabrik prüft Dateiverfügbarkeit, Optionen, erforderliche Exporte und ABI-Version, bevor sie Modelle initialisiert; ungültige Konfiguration löst EArgumentException aus, Fehler beim Modellladen EInvalidOperation mit nativer Diagnose
Die Modellinitialisierung erfolgt in der Fabrik und liegt außerhalb der Erkennungsdeadline; die Klassenanzahlen des Wörterbuchs müssen zum Erkennungsmodell passen, und gleiche Klassenanzahlen allein belegen nicht, dass Zeichenreihenfolge oder Vorverarbeitung kompatibel sind
Die mitgelieferte Pipeline nutzt DB-Detektion mit maximal 1.024 Pixeln Detektionsseite und 50 Pixeln weißem Rand; der Erkennser akzeptiert kompatible NCHW-Modelle mit fester Eingabehöhe 32 oder 48 und verwendet 48 bei dynamischer Höhe
Die Erkennung bewahrt das Seitenverhältnis für Modelle mit dynamischer Breite und normalisiert Eingaben mit Rand auf eine Mindestbreite von 320; ein Modell mit fester Breite begrenzt die skalierte Crop-Breite, wodurch eine lange Textzeile gestaucht werden kann
Die Winkelklassifikation bewahrt das Seitenverhältnis des Crops innerhalb ihrer Modelleingabebreite und füllt ungenutzte Pixel mit normalisierten Nullen; ein Crop wird nur um 180 Grad gedreht, wenn die Auf-den-Kopf-Bewertung über 0,9 liegt, womit schwache Richtungsvorhersagen daran gehindert werden, kurzen Text umzudrehen
Das Wörterbuch muss zur Zeichenreihenfolge des Modells und zur Ausgabe-Klassenanzahl passen; CRLF-Zeilenenden im Wörterbuch werden akzeptiert, ein UTF-8-BOM hingegen abgelehnt
Bettet das Modell Zeichenmetadaten ein, verifiziert die Fabrik zusätzlich jeden Wörterbucheintrag und seine Reihenfolge; die Wörterbuchgröße allein genügt nicht
Chinesisch, Russisch und gängige Sprachen
THPDFRapidOCRDLLOptions.ForLanguage wählt ein Erkennungsmodell samt passendem Wörterbuch unter dem lokalen Modellverzeichnis und behält die gemeinsamen Standardwerte für Detektor, Klassifikator, Threads, Pixel und Timeout bei
Die Methode akzeptiert Groß-/Kleinschreibung-unabhängige Sprachaliase, wandelt Unterstriche in Bindestriche und entfernt umgebenden Leerraum; ein leeres oder nicht unterstütztes Tag löst vor dem Modellladen EArgumentException aus
| Profilverzeichnis | Sprachen | Gebräuchliche akzeptierte Aliasse |
|---|---|---|
ch | Vereinfachtes Chinesisch und Englisch | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Traditionelles Chinesisch | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Englisch | en, en-US, en-GB, eng |
latin | Französisch, Deutsch, Spanisch, Portugiesisch, Italienisch, Niederländisch und Türkisch | fr, de, es, pt-BR, it, nl, tr |
japan | Japanisch | ja, ja-JP, jpn |
korean | Koreanisch | ko, ko-KR, kor |
cyrillic | Russisch, Ukrainisch, Bulgarisch und Belarussisch | ru, ru-RU, rus, uk, bg, be |
arabic | Arabisch, Persisch und Urdu | ar, fa, ur, ara, fas, urd |
devanagari | Hindi, Marathi und Nepali | hi, mr, ne, hin, mar, nep |
Jedes Profil verwendet <profile>/recognition.onnx und <profile>/dictionary.txt; Profilnamen werden direkt akzeptiert, und erkannte regionale Aliasse sind explizit definiert statt aus einem beliebigen Präfix abgeleitet
Installieren Sie die gewählten Modellsets vor der Bereitstellung mit dem SHA256-fixierten Provisionierungs-Helfer
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All installiert alle neun Profile; -SkipClassifier lässt den optionalen Klassifikator weg, in welchem Fall Sie UseAngleClassifier := False setzen, wenn Sie eine Engine erstellen
Der Helfer verifiziert fixierte SHA256-Hashes und installiert einen gemeinsamen mehrsprachigen Detektor und Klassifikator unter den von Default verwendeten Basisdateinamen; die Erkennung läuft offline und lädt fehlende Modelle niemals automatisch herunter
Wählen Sie die Sprache der Engine je Seite oder Region; eine Engine erkennt die Sprache nicht automatisch und kombiniert keine getrennten Erkennser für verschiedene Schriften
Die fixierten Pakete verwenden kompatible PP-OCRv3- und PP-OCRv4-Modelle; die Erkennungsgenauigkeit hängt von Modell, Schriftart, Auflösung und Crop ab, und das lateinische Modell kann Akzente wie ñ selbst bei sauberer Eingabe verwechseln
Neuere PP-OCRv5-Modelle können eine neuere ONNX Runtime benötigen als die statischen Bibliotheken, mit denen die DLL gebaut wurde; ein nicht unterstütztes Modellformat lässt die Initialisierung mit Diagnose fehlschlagen
Detektionsmodelle müssen einen einzelnen float32-Bildtensor akzeptieren und eine float32-Wahrscheinlichkeitskarte mit der Form [1, 1, H, W] an der skalierten Eingabeauflösung liefern; inkompatible Typen, Abmessungen, nicht endliche Werte oder Wahrscheinlichkeiten außerhalb von [0, 1] um mehr als vier float32-Maschinen-Epsilons schlagen mit einer Diagnose fehl, bevor Detektionsergebnisse verwendet werden
Winzige Sigmoid-Rundungsfehler innerhalb dieser Toleranz werden vor Schwellenwertbildung und Konturbewertung auf [0, 1] geklemmt, damit gültige Modelle ihr normales Detektionsverhalten behalten
Chinesisches Beispiel
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;
Behalten Sie die Engine-Schnittstelle über mehrere Anfragen hinweg, um ihre Modelle wiederzuverwenden; verwenden Sie eine DLL, die zur Architektur der aufrufenden Anwendung passt, und legen Sie ihre Abhängigkeiten daneben oder in standardmäßigen Windows-Loader-Verzeichnissen ab
Russisches Beispiel
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 und rus wählen dasselbe cyrillic-Erkennungsmodell und -Wörterbuch
Ergebnisse und Lebensdauer
Der Adapter kopiert die aktuelle Bitmap in einen unabhängigen Top-down-BGR-Snapshot; er prüft Abmessungen und Pixelbudget vor der Allokation und verändert die geliehene Bitmap nicht
Die native Pipeline liefert ein Ergebnis je erkannter Textzeile, mit Pixelgrenzen im Originalbild und der mittleren Zeichenkonfidenz; jede Zeile verbraucht einen MaxWords-Platz, und keine native Baseline wird geliefert
Erkannte Boxen folgen der horizontalen Zeilen-Lesereihenfolge, standardmäßig von links nach rechts und bei aktiviertem RightToLeft von rechts nach links; die arabische Voreinstellung aktiviert diese Option
Die Winkelklassifikation korrigiert einzelne Text-Crops; sie bestimmt nicht die Ausrichtung der ganzen Seite und ordnet die getrennten Erkennungsboxen einer auf dem Kopf stehenden Seite nicht in die logische Lesereihenfolge um
Erkannter Text bleibt in der logischen Unicode-Reihenfolge des Modells; der Adapter kehrt arabische Zeichenfolgen nicht automatisch um und wendet keine bidirektionale Formung an
Der Adapter validiert UTF-8, Unicode-Steuerzeichen, Grenzen, Konfidenz und das MaxTextCodeUnits-Limit der Anfrage, mit einer harten Textobergrenze von 1.048.576 UTF-16-Einheiten; ergänzende Zeichen verbrauchen zwei Einheiten
Eine leere Seite gilt mit einem leeren Ergebnis-Array als erfolgreich; ein Fehler verwirft partielle Ergebnisse, und die Veröffentlichung durchsuchbarer PDFs behält das vorhandene atomare Seiten-Transaktionsverhalten bei
Aufrufe derselben Engine werden serialisiert; das Warten auf die Engine-Sperre prüft Abbruch und Erkennungsdeadline alle 25 Millisekunden
Native Callbacks prüfen Abbruch und Deadlines vor und nach Detektion, Klassifikation und jeder erkannten Zeile; ein einzelner ONNX-Inferenzaufruf lässt sich nicht forciert unterbrechen, sodass ein Abbruch erst nach Abschluss der aktuellen Stufe zurückkehren kann
Eingabe- und Textgrenzen begrenzen Adapter-Allokationen und akzeptierte Ausgabe, setzen aber keine harte Obergrenze für den Speicherverbrauch von Modell, Detektion, Crop oder Inferenz
Build und ABI
Native/RapidOCR enthält die C++-Brücke, den kompatiblen Modellerkennser, den versionierten C-Header, die Exportdefinition und das CMake-Projekt; provisionieren Sie kompatible CPU-Netzwerkquellen mit DbNet, AngleNet und OcrUtils sowie passende ONNX-Runtime- und OpenCV-Bibliotheken
Verwenden Sie Windows MSVC mit C++17, ein Windows SDK und CMake 3.20 oder neuer; der Standard-Build nutzt die statische Release-CRT, die zu den bereitgestellten Bibliotheken passen muss
& 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 muss OnnxRuntimeConfig.cmake enthalten, und OpenCVDirectory muss auf die architekturspezifische Bibliothekskonfiguration zeigen; wählen Sie Win32 und passende x86-Bibliotheken für eine 32-Bit-DLL
Der Build-Helfer schreibt Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; -BuildDirectory, -OutputDirectory und -Generator können Build-Ablageort und Visual-Studio-Generator überschreiben
Die Brücke fängt C++-Ausnahmen ab und legt die ABI-Version 1 über HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize und HPDFRapidOCRDestroy offen; alle verwenden cdecl, 32-Bit-Statuswerte und explizite UTF-8-Bytelängen
ABI-Version 1 definiert zusätzlich den optionalen Export HPDFRapidOCRSetReadingDirection; der Adapter fordert ihn nur bei aktiviertem RightToLeft, sodass vorhandene DLLs weiterhin Left-to-Right-Anfragen bedienen können
Callbacks leihen ihren Text nur für die Dauer des Aufrufs; der Adapter kopiert validierten Text vor der Rückkehr, und der Engine-Destruktor zerstört die Modelle, bevor er die DLL entlädt
Validierung
Mit dem Python-Paket onnx und einem nativen BUILD_TESTING-Build führen Sie python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe aus, um gültige leere Ausgabe, ungültige Tensor-Ränge, Kanäle und Typen, nicht passende räumliche Abmessungen und ungültige Wahrscheinlichkeiten über die DLL-ABI zu prüfen; mehrere Runner-Pfade können beide Architekturen in einem einzigen Aufruf validieren
Ergänzen Sie den Delphi- oder FPC-Adapter-Runner um -RapidOCRLanguageModelDirectory und einen oder beide native-DLL-Bibliotheksparameter, um alle installierten Voreinstellungen mit chinesischen, russischen, japanischen, koreanischen, gängigen lateinischen, arabischen und Hindi-Sprachproben zu validieren; Russisch und Traditionelles Chinesisch durchlaufen zusätzlich das Speichern durchsuchbarer PDFs, Neuladen, Textextraktion und Pixelvergleich
Die Delphi- und FPC-Adapter-Runner testen persistente Modell-Lebensdauer, BGR-Zeilenlayout, Unicode und ergänzende Zeichen, ABI-Prüfungen, ungültige Ergebnisse, Budgets, kooperativen Abbruch, serialisiertes Warten auf die Sperre und Bereinigung
Übergeben Sie -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library und -RapidOCRNativeModelDirectory an Tests/Delphi/Run-TesseractRecognitionTests.ps1 oder Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 für echte Modellvalidierung, leere Seiten, Umgang mit beschädigten Modellen, englische und chinesische Erkennung sowie Round-Trips durchsuchbarer PDFs mit unveränderten gerenderten Pixeln
Siehe Durchsuchbare OCR-Textschichten für Seitenrendering, Unicode-PDF-Textabbildung, Gruppierung optionaler Inhalte und Konformitätsbedingungen