RapidOCR-Adapter für lokale Modelle
Für zwischengespeicherte In-Process-ONNX-Inferenz verwenden Sie den nativen RapidOCR-DLL-Adapter mit HPDFCreateRapidOCRDLLOCREngine und THPDFRapidOCRDLLOptions
Der native Adapter stellt THPDFRapidOCRDLLOptions.ForLanguage-Voreinstellungen für vereinfachtes und traditionelles Chinesisch, Englisch, lateinische Sprachen, Japanisch, Koreanisch, kyrillische Sprachen einschließlich Russisch, arabische Sprachen und Devanagari-Sprachen bereit
HPDFRapidOCRRecognition bietet einen Windows-Prozessadapter, der IHPDFOCREngine in Delphi-, C++Builder- und FPC/Lazarus-Win32- und Win64-Builds implementiert
Provisionieren Sie Python mit rapidocr und onnxruntime, der mitgelieferten Brücke tools/OCR/rapidocr_tsv.py sowie kompatible lokale ONNX-Modelle; der Adapter installiert keine Pakete und lädt keine Modelle, Wörterbücher oder Schriftarten herunter
Python läuft in einem separaten verborgenen Prozess, sodass seine Architektur von der der aufrufenden Anwendung abweichen kann; sein ONNX-Runtime-Paket muss zur eigenen Python-Architektur passen
Fabrik-Überladungen
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;
Die ursprüngliche Timeout-Überladung bleibt mit dem vorhandenen Brückenprotokoll kompatibel und verwendet die drei Standard-PP-OCRv4-Modelldateinamen; sie prüft ausführbare Datei, Skript und Verzeichnispfade beim Aufbau und die Modellverfügbarkeit im Worker
Die Options-Überladung prüft jedes benötigte Modell, ein optionales Wörterbuch und die lokale Schriftart, bevor sie den Adapter zurückgibt; fehlende Dateien oder ungültige Optionen lösen bereits vor Beginn der Erkennung EArgumentException aus
Relative Modell-, Wörterbuch- und Schriftartpfade werden gegen ModelDirectory aufgelöst; absolute Pfade können auf separat bereitgestellte Dateien zeigen
Verwenden Sie Modelle, die zu RapidOCRs Pipeline aus Detektion, Klassifikation und CTC-Erkennung passen; ein Modell aus einer anderen OCR-Pipeline kann eine andere Vorverarbeitung benötigen und lässt sich nicht allein deshalb auswählen, weil es im ONNX-Format vorliegt
Sprachspezifische Modellauswahl
Der Python-Prozessadapter verwendet weiterhin explizite THPDFRapidOCROptions-Pfade; ForLanguage gehört zum Options-Record des nativen DLL-Adapters und ist keine Methode des Python-Adapters
Provisionieren Sie lokale Sprachmodelle und Wörterbücher mit tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, oder wählen Sie -Language All für alle neun Sprachprofile
Der Helfer prüft fixierte SHA256-Hashes und legt jeden Erkennser unter <profile>/recognition.onnx samt passender <profile>/dictionary.txt ab; die Laufzeiterkennung bleibt offline ohne automatische Downloads
Für Russisch verwenden Sie cyrillic/recognition.onnx und cyrillic/dictionary.txt; vereinfachtes Chinesisch nutzt das Profil ch, traditionelles Chinesisch chinese_cht
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'ch_PP-OCRv3_det_infer.onnx';
Models.RecognitionModel := 'cyrillic/recognition.onnx';
Models.CharacterDictionary := 'cyrillic/dictionary.txt';
Models.ClassificationModel := 'ch_ppocr_mobile_v2.0_cls_infer.onnx';
Die obigen Basisdateinamen von Detektor und Klassifikator entsprechen den gemeinsamen Modellen des Provisionierungs-Helfers; liefern Sie Erkennungsmodell und Wörterbuch paarweise zusammen und wählen Sie eine separate Engine für Seiten oder Regionen mit anderer Schrift
Optionen und Standardwerte
THPDFRapidOCROptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
FontPath: string;
UseAngleClassifier: Boolean;
IntraOpThreads: Integer;
InterOpThreads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCROptions; static;
end;
Initialisieren Sie den Record mit THPDFRapidOCROptions.Default, bevor Sie Felder überschreiben
| Feld | Standard | Bedeutung |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Lokales Detektionsmodell |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Lokales Erkennungsmodell |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Nur erforderlich, wenn die Winkelklassifikation aktiviert ist |
CharacterDictionary | Leer | Verwendet die eingebetteten Zeichenmetadaten des Erkennungsmodells; liefern Sie ein lokales Wörterbuch nach, wenn das Modell diese Metadaten nicht mitbringt |
FontPath | Leer | Löst zu %WINDIR%\Fonts\arial.ttf für RapidOCRs Ergebniscontainer auf |
UseAngleClassifier | True | Aktiviert die Textwinkel-Klassifikation; wenn deaktiviert, wird kein Klassifikationsmodell benötigt oder übergeben |
IntraOpThreads | 1 | ONNX-Intra-Operations-Threads, von 1 bis 64, begrenzt auf die logische CPU-Anzahl des Workers |
InterOpThreads | 1 | ONNX-Inter-Operations-Threads mit denselben Grenzen |
MaxPixels | 16777216 | Eingabe-Pixelbudget, von 1 bis 67.108.864 |
TimeoutMilliseconds | 60000 | Gesamtdeadline der Anfrage, von 1 bis 3.600.000 Millisekunden |
Die Brücke wählt für alle Stufen explizit das ONNX-Runtime-CPU-Backend und deaktiviert automatische Downloads; fehlen die eingebetteten Zeichenwörterbuch-Metadaten, wird ein bereitgestelltes lokales CharacterDictionary benötigt
Beispiel mit explizit gewählten Modellen
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddLocalRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCROptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'PP-OCRv6_det_small.onnx';
Models.RecognitionModel := 'PP-OCRv6_rec_small.onnx';
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Local RapidOCR text layer was not added');
end;
Ergebnisse, Budgets und Abbruch
Jede Anfrage serialisiert die geliehene Bitmap in ein privates temporäres Verzeichnis, startet einen lokalen Python-Worker und räumt seine Prozess-Handles und temporären Dateien auf, wenn die Anfrage abgeschlossen ist
Die Options-Überladung prüft MaxPixels vor der Bitmap-Serialisierung; der Worker prüft die Eingabeabmessungen ebenfalls vor dem Laden der Modelle und erhält die Limits MaxWords und MaxTextCodeUnits der Anfrage
Die Brücke fordert Zeichenkoordinaten an und validiert die Geometrie, Konfidenz und Textabdeckung jedes Zeichens; anschließend gibt sie jede vollständige erkannte Zeile mit ihren ursprünglichen inneren Leerzeichen und Satzzeichen, den umschließenden Grenzen in Pixeln des Originalbilds und einer mittleren Konfidenz im Bereich 0 bis 1 aus
Jede ausgegebene Zeile verbraucht einen MaxWords-Platz; innere Leerzeichen zählen zu MaxTextCodeUnits, und die Veröffentlichung einer ganzen Zeile verhindert, dass die Textschicht Zeichenabstände als Wortabstände fehldeutet
Die Abstände werden aus dem Zeilentext des Erkennsers bewahrt; Text, den die Detektion in separate Boxen aufteilt, hängt weiterhin von der räumlichen Wortlücken-Inferenz ab, und externe PDF-Reader können wiederholte Leerzeichen bei der Extraktion rekonstruieren oder zusammenfassen
Ergänzende Zeichen verbrauchen zwei UTF-16-Einheiten; ungültige Koordinaten, Konfidenz oder Steuerzeichen sowie erschöpfte Budgets lassen die Erkennung fehlschlagen und verwerfen partielle Ergebnisse
Eine leere Seite gilt mit einem leeren Wort-Array als erfolgreich; keine native Baseline wird geliefert, sodass die Textschicht ihren vorhandenen Geometrie-Fallback nutzt
Abbruch, Timeout und Ausgabegrößen werden alle 25 Millisekunden gepollt; ein Windows-Job umschließt den Worker und etwaige Interpreter-Kinderprozesse, und die Terminierung wartet bis zu fünf zusätzliche Sekunden auf die Prozessbereinigung
ApplyLoadedOCRTextLayer veröffentlicht alle gewählten Seiten atomar, nachdem die Erkennung erfolgreich war
Die TSV-Ausgabe ist auf 64 MiB und die Diagnoseausgabe auf 1 MiB begrenzt; Eingabe- und Ausgabebudgets stellen keine harte Obergrenze für den Speicherverbrauch von ONNX-Modell oder Inferenz dar
Die Modellinitialisierung erfolgt in einem neuen Python-Prozess je Anfrage und zählt zur Deadline
Validierung
Die gemeinsamen Delphi- und FPC-Adapter-Runner decken Modell-Preflight, eigene Pfade, optionale Klassifikation, Unicode, Budgets, Worker-Ausfall, Abbruch und Timeout ab; ihre optionalen RapidOCR-Parameter aktivieren echte Erkennung sowie Round-Trip-Prüfungen durchsuchbarer PDFs
Verwenden Sie Tests/Delphi/Run-TesseractRecognitionTests.ps1 oder Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 mit -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel und -RapidOCRRecognitionModel
Siehe Durchsuchbare OCR-Textschichten für Rendering-Optionen, Unicode-PDF-Textabbildung, Gruppierung optionaler Inhalte und Konformitätsgrenzen