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

FeldStandardBedeutung
DetectionModelch_PP-OCRv4_det_mobile.onnxLokales Detektionsmodell
RecognitionModelch_PP-OCRv4_rec_mobile.onnxLokales Erkennungsmodell
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxNur erforderlich, wenn die Winkelklassifikation aktiviert ist
CharacterDictionaryLeerVerwendet die eingebetteten Zeichenmetadaten des Erkennungsmodells; liefern Sie ein lokales Wörterbuch nach, wenn das Modell diese Metadaten nicht mitbringt
FontPathLeerLöst zu %WINDIR%\Fonts\arial.ttf für RapidOCRs Ergebniscontainer auf
UseAngleClassifierTrueAktiviert die Textwinkel-Klassifikation; wenn deaktiviert, wird kein Klassifikationsmodell benötigt oder übergeben
IntraOpThreads1ONNX-Intra-Operations-Threads, von 1 bis 64, begrenzt auf die logische CPU-Anzahl des Workers
InterOpThreads1ONNX-Inter-Operations-Threads mit denselben Grenzen
MaxPixels16777216Eingabe-Pixelbudget, von 1 bis 67.108.864
TimeoutMilliseconds60000Gesamtdeadline 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