RapidOCR Native DLL-adapter
HPDFRapidOCRRecognition exponerar en IHPDFOCREngine i processen bakad av HotPDFRapidOCR.dll, med samma publika API i Delphi, C++Builder och Windows FPC/Lazarus-byggen för Win32 och Win64
DLL:en utför CPU-baserad ONNX-inferens direkt på minnesavbildningar och behåller initierade modeller tills motorgränssnittet släpps; distributionen vid körning består av den matchande nativa DLL:en plus kompatibla lokala modeller och ordlista
Den befintliga Python-processadaptern finns kvar med sina ursprungliga fabriksöverlagringar
Fabrik och alternativ
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;
Initiera alternativen med THPDFRapidOCRDLLOptions.Default; standardvärdena använder följande lokala filer
| Fält | Standard | Betydelse |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | DB-detekteringsmodell |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Kompatibel PP-OCRv3- eller PP-OCRv4-CTC-igenkänningsmodell |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Valfri modell för textorientering |
CharacterDictionary | ppocr_keys_v1.txt | UTF-8-ordlista utan BOM, i modellens teckenordning |
UseAngleClassifier | True | När den är avstängd krävs och initieras ingen klassificeringsmodell |
RightToLeft | False | Ordnar detekterade rutor från höger till vänster inom horisontella rader; aktiveras av arabiska-förinställningen |
Threads | 1 | Antal ONNX-CPU-trådar från 1 till 64, taklagt vid antalet logiska processorer |
MaxPixels | 16777216 | Pixelgräns för indata, från 1 till 67 108 864 |
TimeoutMilliseconds | 60000 | Kooperativ tidsgräns för igenkänning, från 1 till 3 600 000 millisekunder |
Relativa filnamn löses mot ModelDirectory; absoluta sökvägar kan välja separat provisionerade filer
Fabriken kontrollerar filtillgänglighet, alternativ, nödvändiga exporter och ABI-version innan modellerna initieras; ogiltig konfiguration kastar EArgumentException och misslyckad modellinläsning kastar EInvalidOperation med nativ diagnostik
Modellinitiering sker i fabriken och ligger utanför igenkänningens tidsgräns; ordlistans klassantal måste matcha igenkänningsmodellen, och identiska klassantal bevisar inte ensamt att teckenordning eller förbehandling är kompatibel
Den medföljande pipelinen använder DB-detektering med maximalt 1 024 pixlar för detektionssidan och 50 pixlar vit utfyllnad; igenkännaren accepterar kompatibla NCHW-modeller med fast indatahöjd 32 eller 48 och använder 48 för dynamisk höjd
Igenkänningen bevarar proportioner för modeller med dynamisk bredd och normaliserar utfylld indata med en minimibredd på 320; en modell med fast bredd taklägger den skalade beskärningsbredden, vilket kan komprimera en lång textrad
Vinkelklassificering bevarar beskärningens proportioner inom modellens indatabredd och fyller oanvända pixlar med normaliserade nollor; en beskärning roteras 180 grader först när upp-och-ned-poängen överstiger 0,9, vilket hindrar svaga riktningsprognoser från att vända kort text
Ordlistan måste matcha modellens teckenordning och antal utdataklasser; CRLF-radslut i ordlistan accepteras, men en UTF-8-BOM avvisas
När modellen har inbäddad teckenmetadata verifierar fabriken också varje ordlistepost och dess ordning; ordlistans storlek räcker inte ensamt
Kinesiska, ryska och vanliga språk
THPDFRapidOCRDLLOptions.ForLanguage väljer en igenkänningsmodell och matchande ordlista under den lokala modellkatalogen samtidigt som de delade standardvärdena för detektor, klassificerare, trådar, pixlar och timeout behålls
Metoden accepterar språkalias oavsett skiftläge, byter understreck mot bindestreck och trimmar omgivande blanktecken; en tom eller ej stödd tagg kastar EArgumentException innan modellerna läses in
| Profilkatalog | Språk | Vanliga accepterade alias |
|---|---|---|
ch | Förenklad kinesiska och engelska | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Traditionell kinesiska | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Engelska | en, en-US, en-GB, eng |
latin | Franska, tyska, spanska, portugisiska, italienska, nederländska och turkiska | fr, de, es, pt-BR, it, nl, tr |
japan | Japanska | ja, ja-JP, jpn |
korean | Koreanska | ko, ko-KR, kor |
cyrillic | Ryska, ukrainska, bulgariska och vitryska | ru, ru-RU, rus, uk, bg, be |
arabic | Arabiska, persiska och urdu | ar, fa, ur, ara, fas, urd |
devanagari | Hindi, marathi och nepali | hi, mr, ne, hin, mar, nep |
Varje profil använder <profile>/recognition.onnx och <profile>/dictionary.txt; profilnamn accepteras direkt, och igenkända regionala alias är explicit definierade i stället för härledda från ett godtyckligt prefix
Installera de valda modelluppsättningarna före driftsättning med den SHA256-förankrade provisioneringshjälpen
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All installerar alla nio profiler; -SkipClassifier utelämnar den valfria klassificeraren, och i så fall sätt UseAngleClassifier := False när en motor skapas
Hjälpen verifierar låsta SHA256-hashar och installerar en gemensam flerspråkig detektor och klassificerare under de rotfilnamn som Default använder; igenkänningen körs offline och laddar aldrig ner saknade modeller automatiskt
Välj motorns språk för varje sida eller region; en motor detekterar inte språket automatiskt och kombinerar inte separata igenkännare för olika skriftsystem
De låsta paketen använder kompatibla PP-OCRv3- och PP-OCRv4-modeller; igenkänningsnoggrannheten beror på modell, typsnitt, upplösning och beskärning, och den latinska modellen kan förväxla diakritiska tecken som ñ även på ren indata
Nyare PP-OCRv5-modeller kan kräva en nyare ONNX Runtime än de statiska bibliotek som DLL:en byggdes med; ett modelformat som inte stöds gör att initieringen misslyckas med ett diagnostikmeddelande
Detekteringsmodeller måste acceptera en enda float32-bildtensor och producera en float32-sannolikhetskarta med formen [1, 1, H, W] vid den skalade indataupplösningen; inkompatibla typer, dimensioner eller icke-ändliga värden, eller sannolikheter utanför [0, 1] med mer än fyra float32-maskinepsilon, misslyckas med en diagnostik innan detekteringsresultaten används
Små sigmoid-avrundningsfel inom den toleransen begränsas till [0, 1] före tröskelvärdesättning och konturpoängsättning, så att giltiga modeller kan behålla sitt normala detekteringsbeteende
Kinesiskt exempel
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;
Behåll motorgränssnittet över flera begäranden för att återanvända dess modeller; använd en DLL som matchar anroparapplikationens arkitektur och placera dess beroenden bredvid den eller i standardiserade Windows-loader-kataloger
Ryskt exempel
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 och rus väljer samma cyrillic-igenkänningsmodell och ordlista
Resultat och livstid
Adaptern kopierar den aktuella bitmappen till en oberoende BGR-avbildning i topp-ner-ordning; den kontrollerar dimensioner och pixelbudget före allokering och ändrar inte den lånade bitmappen
Den nativa pipelinen avger ett resultat per igenkänd textrad, med pixelgränser i originalbilden och medelvärdet av teckentillförlitligheten; varje rad förbrukar en MaxWords-plats och ingen nativ baslinje levereras
Detekterade rutor följer läsordningen i horisontella rader, från vänster till höger som standard och från höger till vänster när RightToLeft är aktiverat; arabiska-förinställningen aktiverar detta alternativ
Vinkelklassificering korrigerar enskilda textbeskärningar; den avgör inte hela sidans orientering och ordnar inte om en upp-och-nedvänd sidas separata detekterade rutor i logisk läsordning
Igenkänd text förblir i modellens logiska Unicode-ordning; adaptern vänder inte arabiska strängar automatiskt och tillämpar ingen automatisk dubbelriktad formning
Adaptern validerar UTF-8, Unicode-kontrolltecken, gränser, tillförlitlighet och begärans gräns MaxTextCodeUnits, med ett hårt texttak på 1 048 576 UTF-16-enheter; supplerande tecken förbrukar två enheter
En tom sida lyckas med en tom resultatarray; ett fel rensar partiella resultat, och publicering av sökbar PDF behåller det befintliga atomiska sidtransaktionsbeteendet
Anrop på samma motor serialiseras; väntan på motorlåset kontrollerar avbrott och igenkänningens tidsgräns var 25:e millisekund
Nativa återanrop kontrollerar avbrott och tidsgränser före och efter detektering, klassificering och varje igenkänd rad; ett enskilt ONNX-inferensanrop kan inte tvingas avbrytas, så avbrott kan rapporteras först efter att det aktuella steget har avslutats
Indata- och textgränser avgränsar adapterns allokeringar och accepterade utdata, men de sätter inget hårt tak för minnesanvändningen i modell, detektering, beskärning eller inferens
Bygge och ABI
Native/RapidOCR innehåller C++-bryggan, en kompatibel modelligenkännare, ett versionshanterat C-huvud, exportdefinition och CMake-projekt; provisionera kompatibla CPU-nätverkskällor som exponerar DbNet, AngleNet och OcrUtils, plus matchande ONNX Runtime- och OpenCV-bibliotek
Använd Windows MSVC med C++17, ett Windows SDK och CMake 3.20 eller senare; standardbygget använder den statiska release-CRT:en, som måste matcha de provisionerade biblioteken
& 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 måste innehålla OnnxRuntimeConfig.cmake, och OpenCVDirectory måste peka på den arkitekturspecifika bibliotekskonfigurationen; välj Win32 och matchande x86-bibliotek för en 32-bitars DLL
Bygghjälpen skriver Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; -BuildDirectory, -OutputDirectory och -Generator kan åsidosätta byggplacering och Visual Studio-generator
Bryggan fångar C++-undantag och exponerar ABI version 1 genom HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize och HPDFRapidOCRDestroy; alla använder cdecl, 32-bitars statusvärden och explicita UTF-8-bylängder
ABI version 1 definierar också den valfria exporten HPDFRapidOCRSetReadingDirection; adaptern kräver den bara när RightToLeft är aktiverat, så befintliga DLL:er kan fortfarande servra vänster-till-höger-begäranden
Återanrop lånar sin text bara under anropets livstid; adaptern kopierar validerad text innan den returnerar, och motorns destruktor förstör modellerna innan DLL:en laddas ur
Validering
Med Python-paketet onnx och en nativ BUILD_TESTING-bygge kör du python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe för att kontrollera giltig tom utdata, ogiltiga tensarranker, kanaler och typer, felmatchade spatiala dimensioner samt ogiltiga sannolikheter via DLL:ens ABI; flera runner-vägar kan validera båda arkitekturerna i ett anrop
Lägg till -RapidOCRLanguageModelDirectory och en eller båda nativa DLL-biblioteksparametrarna till Delphi- eller FPC-adapterrunnern för att validera alla installerade förinställningar med kinesiska, ryska, japanska, koreanska, vanliga latinska språk, arabiska och hindi-prover; ryska och traditionell kinesiska genomgår också sparande av sökbar PDF, återinläsning, textextraktion och pixeljämförelse
Delphi- och FPC-adapterrunnarna testar beständig modelllivstid, BGR-radlayout, Unicode- och supplerande tecken, ABI-kontroller, ogiltiga resultat, budgetar, kooperativ avbrytning, serialiserad låsväntan och städning
Ange -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library och -RapidOCRNativeModelDirectory till Tests/Delphi/Run-TesseractRecognitionTests.ps1 eller Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 för riktig modellvalidering, tomma sidor, hantering av skadade modeller, engelsk och kinesisk igenkänning samt sökbara PDF-rundturer med oförändrade renderade pixlar
Se Sökbara OCR-textlager för sidrendering, Unicode-mappning av PDF-text, gruppering i valfritt innehåll och regelefterlevnadsrestriktioner