Adapter för lokala RapidOCR-modeller

För cachad ONNX-inferens i processen, använd RapidOCR Native DLL-adaptern med HPDFCreateRapidOCRDLLOCREngine och THPDFRapidOCRDLLOptions

Den nativa adaptern tillhandahåller THPDFRapidOCRDLLOptions.ForLanguage-förinställningar för förenklad och traditionell kinesiska, engelska, latinska språk, japanska, koreanska, kyrilliska språk inklusive ryska, arabiska språk och devanagari

HPDFRapidOCRRecognition tillhandahåller en Windows-processadapter som implementerar IHPDFOCREngine i Delphi-, C++Builder- och FPC/Lazarus-byggen för Win32 och Win64

Provisionera Python med rapidocr och onnxruntime, den medföljande tools/OCR/rapidocr_tsv.py-bryggan och kompatibla lokala ONNX-modeller; adaptern installerar inga paket och laddar inte ner modeller, ordlistor eller typsnitt

Python körs i en separat dold process, så dess arkitektur kan skilja sig från anroparapplikationens; dess ONNX Runtime-paket måste matcha dess egen Python-arkitektur

Fabriksöverlagringar

function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;

Den ursprungliga timeout-överlagringen förblir kompatibel med det befintliga bryggprotokollet och använder de tre standardiserade PP-OCRv4-modellfilnamnen; den kontrollerar körbara filers, skripts och katalogers sökvägar vid konstruktion och modellernas tillgänglighet i workern

Optionsöverlagringen kontrollerar varje nödvändig modell, en valfri ordlista och det lokala typsnittet innan adaptern returneras; saknade filer eller ogiltiga alternativ kastar EArgumentException innan igenkänningen startar

Relativa modell-, ordliste- och typsnittssökvägar löses mot ModelDirectory; absoluta sökvägar kan peka på separat provisionerade filer

Använd modeller som är kompatibla med RapidOCRs pipeline för detektering, klassificering och CTC-igenkänning; en modell från en annan OCR-pipeline kan kräva annan förbehandling och går inte att välja enbart för att den använder ONNX-formatet

Modellval per språk

Python-processadaptern fortsätter använda explicita THPDFRapidOCROptions-sökvägar; ForLanguage tillhör options-posten för den nativa DLL:en och är ingen metod på Python-adaptern

Provisionera lokala språkmodeller och ordlistor med tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, eller välj -Language All för alla nio språkprofiler

Hjälpen kontrollerar låsta SHA256-hashar och placerar varje igenkännare på <profile>/recognition.onnx med tillhörande <profile>/dictionary.txt; igenkänningen vid körning förblir offline utan automatiska nedladdningar

För ryska, använd cyrillic/recognition.onnx och cyrillic/dictionary.txt; förenklad kinesiska använder profilen ch och traditionell kinesiska 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';

Rotfilnamnen för detektor och klassificerare ovan motsvarar provisioneringshjälpens delade modeller; ange matchande igenkänningsmodell och ordlista tillsammans, och välj en separat motor för sidor eller regioner som behöver ett annat skriftsystem

Alternativ och standardvärden

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;

Initiera posten med THPDFRapidOCROptions.Default innan fälten åsidosätts

FältStandardBetydelse
DetectionModelch_PP-OCRv4_det_mobile.onnxLokal detekteringsmodell
RecognitionModelch_PP-OCRv4_rec_mobile.onnxLokal igenkänningsmodell
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxKrävs bara när vinkelklassificering är aktiverad
CharacterDictionaryTomAnvänd igenkänningsmodellens inbäddade teckenmetadata; ange en lokal ordlista när modellen saknar den metadatan
FontPathTomLöses till %WINDIR%\Fonts\arial.ttf för RapidOCRs resultatbehållare
UseAngleClassifierTrueAktiverar vinkelklassificering av text; när den är avstängd krävs och skickas ingen klassificeringsmodell
IntraOpThreads1ONNX-trådar inom operationer, från 1 till 64, taklagda vid workerns antal logiska CPU:er
InterOpThreads1ONNX-trådar mellan operationer med samma gränser
MaxPixels16777216Pixelbudget för indata, från 1 till 67 108 864
TimeoutMilliseconds60000Total tidsgräns per begäran, från 1 till 3 600 000 millisekunder

Bryggan väljer explicit ONNX Runtime CPU-backend för alla steg och stänger av automatiska nedladdningar; saknas den inbäddade teckenordlistan krävs en provisionerad lokal CharacterDictionary

Exempel med explicit valda modeller

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;

Resultat, budgetar och avbrott

Varje begäran serialiserar den lånade bitmappen till en privat tillfällig katalog, startar en lokal Python-worker och städar upp dess processhandtag och temporärfiler när begäran är klar

Optionsöverlagringen kontrollerar MaxPixels innan bitmappen serialiseras; workern kontrollerar också indatadimensionerna innan modellerna läses in och får begärans gränser MaxWords och MaxTextCodeUnits

Bryggan begär teckenkoordinater och validerar varje teckens geometri, tillförlitlighet och texttäckning och avger därefter varje komplett igenkänd rad med dess ursprungliga interna mellanslag och skiljetecken, de omslutande gränserna i originalbildens pixlar och medeltillförlitlighet i intervallet 0 till 1

Varje avgiven rad förbrukar en MaxWords-plats; interna mellanslag räknas mot MaxTextCodeUnits, och att publicera hela raden hindrar textlagret från att förväxla bokstavsavstånd med ordavstånd

Avstånden bevaras från igenkännarens radtext; text som detekteringen delar upp i separata rutor beror fortfarande på rumslig slutledning av ordluckor, och externa PDF-läsare kan återskapa eller lägga ihop upprepade mellanslag vid extraktion

Supplerande tecken förbrukar två UTF-16-enheter; ogiltiga koordinater, tillförlitlighet, kontrolltecken eller uttömda budgetar gör att igenkänningen misslyckas och partiella resultat rensas

En tom sida lyckas med en tom ordarray; ingen nativ baslinje levereras, så textlagret använder sin befintliga reservlösning för geometri

Avbrott, timeout och utdatastorlekar pollas var 25:e millisekund; ett Windows-jobb omsluter workern och eventuella underordnade tolkprocesser, och avslutningen väntar upp till fem sekunder ytterligare på processstädning

ApplyLoadedOCRTextLayer publicerar alla valda sidor atomiskt när igenkänningen lyckats

TSV-utdata begränsas till 64 MiB och diagnostikutdata till 1 MiB; in- och utdatabudgetar sätter inget hårt tak för minnesanvändningen i ONNX-modeller eller inferens

Modellinitiering sker i en ny Python-process för varje begäran och ingår i tidsgränsen

Validering

De delade Delphi- och FPC-adapterrunnarna täcker modellpreflight, anpassade sökvägar, valfri klassificering, Unicode, budgetar, workerfel, avbrott och timeout; deras valfria RapidOCR-parametrar aktiverar riktig igenkänning och rundturskontroller av sökbar PDF

Använd Tests/Delphi/Run-TesseractRecognitionTests.ps1 eller Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 med -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel och -RapidOCRRecognitionModel

Se Sökbara OCR-textlager för renderingsalternativ, Unicode-mappning av PDF-text, gruppering i valfritt innehåll och regelefterlevnadsgränser