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

FeltStandardBetydning
DetectionModelch_PP-OCRv3_det_infer.onnxDB-detektionsmodel
RecognitionModelch_PP-OCRv3_rec_infer.onnxKompatibel PP-OCRv3- eller PP-OCRv4-CTC-genkendelsesmodel
ClassificationModelch_ppocr_mobile_v2.0_cls_infer.onnxValgfri tekstorienteringsmodel
CharacterDictionaryppocr_keys_v1.txtUTF-8-ordbog uden BOM, i modellens tegnrækkefølge
UseAngleClassifierTrueNår deaktiveret, kræves eller initialiseres ingen klassifikationsmodel
RightToLeftFalseOrdren af detekterede bokse fra højre mod venstre inden for vandrette rækker; aktiveret af den arabiske forudindstilling
Threads1Antal ONNX CPU-tråde fra 1 til 64, begrænset til antallet af logiske processorer
MaxPixels16777216Input-pixelgrænse fra 1 til 67.108.864
TimeoutMilliseconds60000Kooperativ 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

ProfilmappeSprogAlmindelige accepterede aliasser
chForenklet kinesisk og engelskzh, zh-CN, zh-Hans, chi_sim
chinese_chtTraditionelt kinesiskzh-TW, zh-HK, zh-Hant, chi_tra
enEngelsken, en-US, en-GB, eng
latinFransk, tysk, spansk, portugisisk, italiensk, hollandsk og tyrkiskfr, de, es, pt-BR, it, nl, tr
japanJapanskja, ja-JP, jpn
koreanKoreanskko, ko-KR, kor
cyrillicRussisk, ukrainsk, bulgarsk og hviderussiskru, ru-RU, rus, uk, bg, be
arabicArabisk, persisk og urduar, fa, ur, ara, fas, urd
devanagariHindi, marathi og nepalesiskhi, 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