RapidOCR native DLL-adapter
HPDFRapidOCRRecognition eksponerer en in-process IHPDFOCREngine bag HotPDFRapidOCR.dll med samme offentlige API i Delphi- og Windows FPC/Lazarus Win32- og Win64-builds samt C++Builder
DLL'en udfører CPU ONNX-inference direkte på hukommelsessnapshots og fastholder initialiserede modeller, indtil engine-interfacet frigives; runtime-udrulningen består af den matchende native DLL og kompatible lokale modeller og ordbog
Den eksisterende Python-procesadapter forbliver tilgængelig med sine oprindelige factory-overloads
Factory og options
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;
Initialisér options med THPDFRapidOCRDLLOptions.Default; standardværdierne bruger følgende lokale filer
| Felt | Standard | Betydning |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | DB-detektionsmodel |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Kompatibel PP-OCRv3- eller PP-OCRv4-CTC-genkendelsesmodel |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Valgfri tekstorienteringsmodel |
CharacterDictionary | ppocr_keys_v1.txt | UTF-8-ordbog uden BOM, i modellens tegnrækkefølge |
UseAngleClassifier | True | Når deaktiveret, kræves eller initialiseres ingen klassifikationsmodel |
RightToLeft | False | Ordren af detekterede bokse fra højre mod venstre inden for vandrette rækker; aktiveret af den arabiske forudindstilling |
Threads | 1 | Antal ONNX CPU-tråde fra 1 til 64, begrænset til antallet af logiske processorer |
MaxPixels | 16777216 | Input-pixelgrænse fra 1 til 67.108.864 |
TimeoutMilliseconds | 60000 | Kooperativ genkendelsesdeadline fra 1 til 3.600.000 millisekunder |
Relative filnavne opløses mod ModelDirectory; absolutte stier kan vælge separat klargjorte filer
Factoryen tjekker filtillgængelighed, options, påkrævede eksports og ABI-version, før modellerne initialiseres; ugyldig konfiguration udløser EArgumentException, og fejl ved modelindlæsning udløser EInvalidOperation med en native diagnostik
Modelinitialisering sker i factoryen og ligger uden for genkendelsesdeadlinen; ordbogens klasseantal skal matche genkendelsesmodellen, og ens klasseantal alene beviser ikke, at tegnrækkefølge eller forbehandling er kompatible
Den medfølgende pipeline bruger DB-detektion med en maksimal detektionsside på 1.024 pixels og 50 pixels hvid padding; genkenderen accepterer kompatible NCHW-modeller med en fast inputhøjde på 32 eller 48 og bruger 48 ved dynamisk højde
Genkendelsen bevarer aspectratio for modeller med dynamisk bredde og normaliserer paddede inputs med en minimumsbredde på 320; en model med fast bredde begrænser den skalerede crop-bredde, hvilket kan komprimere en lang tekstlinje
Vinkelklassifikationen bevarer crop-ens aspectratio inden for sin model-inputbredde og fylder ubrugte pixels med normaliserede nuller; en crop roteres kun 180 grader, når scoren for op-ned overstiger 0,9, så svage retningsprædiktioner ikke vender kort tekst
Ordbogen skal matche modellens tegnrækkefølge og output-klasseantal; CRLF-ordbogslinjeafslutninger accepteres, men en UTF-8-BOM afvises
Når modellen indlejrer tegnmetadata, verificerer factoryen også hver ordbogspost og dens rækkefølge; ordbogsstørrelsen alene er ikke nok
Kinesisk, russisk og almindelige sprog
THPDFRapidOCRDLLOptions.ForLanguage vælger en genkendelsesmodel og matchende ordbog under den lokale modelmappe, mens de delte detektor-, klassifikator-, tråd-, pixel- og timeout-standarder bevares
Metoden accepterer case-insensitive sprogaliasser, ændrer underscores til bindestreger og trimmer omgivende whitespace; et tomt eller ikke-understøttet tag udløser EArgumentException, før modellerne indlæses
| Profilmappe | Sprog | Almindelige accepterede aliasser |
|---|---|---|
ch | Forenklet kinesisk og engelsk | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Traditionelt kinesisk | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Engelsk | en, en-US, en-GB, eng |
latin | Fransk, tysk, spansk, portugisisk, italiensk, hollandsk og tyrkisk | fr, de, es, pt-BR, it, nl, tr |
japan | Japansk | ja, ja-JP, jpn |
korean | Koreansk | ko, ko-KR, kor |
cyrillic | Russisk, ukrainsk, bulgarsk og hviderussisk | ru, ru-RU, rus, uk, bg, be |
arabic | Arabisk, persisk og urdu | ar, fa, ur, ara, fas, urd |
devanagari | Hindi, marathi og nepalesisk | hi, mr, ne, hin, mar, nep |
Alle profiler bruger <profile>/recognition.onnx og <profile>/dictionary.txt; profilnavne accepteres direkte, og genkendte regionale aliasser er eksplicit definerede frem for udledt af en vilkårlig præfiks
Installér de valgte modelsæt før udrulning med SHA256-pintede klargøringshjælper
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All installerer alle ni profiler; -SkipClassifier udelader den valgfrie klassifikator, og i det tilfælde skal du sætte UseAngleClassifier := False, når du opretter en motor
Hjælperen verificerer pintede SHA256-hashes og installerer en delt flersproget detektor og klassifikator under de rootfilnavne, som Default bruger; genkendelsen kører offline og downloader aldrig manglende modeller automatisk
Vælg motorens sprog pr. side eller region; én motor detekterer ikke automatisk sproget og kombinerer ikke separate genkendere for forskellige scripts
De pintede pakker bruger kompatible PP-OCRv3- og PP-OCRv4-modeller; genkendelsens nøjagtighed afhænger af model, font, opløsning og crop, og den latinske model kan forveksle accenter som ñ, selv på rent input
Nyere PP-OCRv5-modeller kan kræve en nyere ONNX Runtime end de statiske biblioteker, DLL'en bygges med; et ikke-understøttet modelformat fejler initialiseringen med en diagnostik
Detektionsmodeller skal acceptere en enkelt float32-billedtensor og producere et float32-sandsynlighedskort med formen [1, 1, H, W] ved den omstørrelsesændrede inputopløsning; inkompatible typer, dimensioner, ikke-endelige værdier eller sandsynligheder uden for [0, 1] med mere end fire float32-maskinepsiloner fejler med en diagnostik, før detektionsresultaterne bruges
Små sigmoidafrundingsfejl inden for denne tolerance klembes til [0, 1] før thresholding og konturscoring, så gyldige modeller kan bevare deres normale detektionsadfærd
Kinesisk eksempel
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;
Behold engine-interfacet på tværs af forespørgsler for at genbruge dens modeller; brug en DLL, der matcher den kaldende applikations arkitektur, og placér dens afhængigheder ved siden af den eller i standard Windows loader-mapper
Russisk eksempel
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 og rus vælger samme cyrillic-genkendelsesmodel og ordbog
Resultater og levetid
Adapteren kopierer den aktuelle bitmap til et uafhængigt top-down BGR-snapshot; den tjekker dimensioner og pixelbudgettet før allokering og ændrer ikke den lånte bitmap
Den native pipeline udsender ét resultat pr. genkendt tekstlinje med pixelgrænser i originalbilledet og gennemsnitlig tegn-confidence; hver linje bruger én MaxWords-plads, og der leveres ingen native baseline
Detekterede bokse følger vandret række-læseorden fra venstre mod højre som standard og fra højre mod venstre, når RightToLeft er slået til; den arabiske forudindstilling aktiverer denne option
Vinkelklassifikationen korrigerer individuelle tekst-crops; den afgør ikke hele sidens orientering og sorterer ikke en op-ned sidens separate detektionsbokse ind i logisk læseorden
Genkendt tekst forbliver i modellens logiske Unicode-orden; adapteren vender ikke automatisk arabiske strenge eller anvender bidirektionel shaping
Adapteren validerer UTF-8, Unicode-kontroltegn, grænser, confidence og forespørgslens MaxTextCodeUnits-grænse med et hårdt tekstloft på 1.048.576 UTF-16-enheder; supplerende tegn bruger to enheder
En tom side lykkes med et tomt resultat-array; en fejl rydder delvise resultater, og publicering af søgbar PDF bevarer den eksisterende atomære sidetransaktion
Kald på samme motor serialiseres; ventetid på motorlåsen tjekker annullering og genkendelsesdeadline hver 25. millisekund
Native callbacks tjekker annullering og deadlines før og efter detektion, klassifikation og hver genkendt linje; et enkelt ONNX-inferencekald kan ikke tvinges afbrudt, så annullering kan først returnere, når det aktuelle stadium er færdigt
Input- og tekstgrænser afgrænser adapterens allokeringer og accepterede output, men pålægger ikke en hård grænse for model-, detektions-, crop- eller inferenshukommelse
Bygning og ABI
Native/RapidOCR indeholder C++-bridgen, en kompatibel modelgenkender, versionsstyret C-header, eksportdefinition og CMake-projekt; klargør kompatible CPU-netværkskilder med DbNet, AngleNet og OcrUtils plus matchende ONNX Runtime- og OpenCV-biblioteker
Brug Windows MSVC med C++17, en Windows SDK og CMake 3.20 eller nyere; standardbuilden bruger den statiske release-CRT, som skal matche de klargjorte biblioteker
& 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 skal indeholde OnnxRuntimeConfig.cmake, og OpenCVDirectory skal pege på den arkitekturspecifikke bibliotekskonfiguration; vælg Win32 og matchende x86-biblioteker til en 32-bit DLL
Byggehjælperen skriver Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; -BuildDirectory, -OutputDirectory og -Generator kan tilsidesætte build-placering og Visual Studio-generatoren
Bridgen indfanger C++-exceptions og eksponerer ABI-version 1 gennem HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize og HPDFRapidOCRDestroy; alle bruger cdecl, 32-bit statusværdier og eksplicitte UTF-8-bytelængder
ABI-version 1 definerer også den valgfrie HPDFRapidOCRSetReadingDirection-eksport; adapteren kræver den kun, når RightToLeft er slået til, så eksisterende DLL'er kan stadig servicere venstre-til-højre-forespørgsler
Callbacks låner deres tekst kun i varigheden af kaldet; adapteren kopierer valideret tekst, før den returnerer, og motorens destruktor ødelægger modellerne, før DLL'en aflæsses
Validering
Med Python-pakken onnx og en native BUILD_TESTING-build køres python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe for at tjekke gyldigt blankt output, ugyldige tensor-ranks, kanaler og typer, mismatchede spatiale dimensioner og ugyldige sandsynligheder gennem DLL-ABI'en; flere runner-stier kan validere begge arkitekturer i én kørsel
Tilføj -RapidOCRLanguageModelDirectory og een eller begge native DLL-biblioteksparametre til Delphi- eller FPC-adapter-runneren for at validere alle installerede forudindstillinger med kinesiske, russiske, japanske, koreanske, almindelige latinske, arabiske og hindi-samples; russisk og traditionelt kinesisk gennemgår også søgbar PDF-gemning, genindlæsning, tekstudtræk og pixelsammenligning
Delphi- og FPC-adapter-runnerne tester vedvarende modelligetid, BGR-rækkelay-out, Unicode og supplerende tegn, ABI-tjek, ugyldige resultater, budgetter, kooperativ annullering, serialiseret låsevent og oprydning
Angiv -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library og -RapidOCRNativeModelDirectory til Tests/Delphi/Run-TesseractRecognitionTests.ps1 eller Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 for ægte modelvalidering, tomme sider, håndtering af beskadigede modeller, engelsk og kinesisk genkendelse samt søgbare PDF-roundtrips med uændrede renderede pixels
Se søgbare OCR-tekstlag for siderendering, Unicode PDF-tekstmapping, optional-content-gruppering og konformitetsbegrænsninger