RapidOCR native DLL-adapter

HPDFRapidOCRRecognition stelt een in-process IHPDFOCREngine bloot die op HotPDFRapidOCR.dll draait, met dezelfde openbare API in Delphi, C++Builder en Windows FPC/Lazarus-builds voor Win32 en Win64

De DLL voert CPU-ONNX-inferentie rechtstreeks uit op geheugensnapshots en houdt geïnitialiseerde modellen vast totdat de engine-interface wordt vrijgegeven; runtime-deployment bestaat uit de bijpassende native DLL en compatibele lokale modellen en woordenboek

De bestaande Python-procesadapter blijft beschikbaar met zijn oorspronkelijke fabrieksoverloads

Fabriek en 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;

Initialiseer de opties met THPDFRapidOCRDLLOptions.Default; de defaults gebruiken de volgende lokale bestanden

VeldDefaultBetekenis
DetectionModelch_PP-OCRv3_det_infer.onnxDB-detectiemodel
RecognitionModelch_PP-OCRv3_rec_infer.onnxCompatibel PP-OCRv3- of PP-OCRv4-CTC-herkenningsmodel
ClassificationModelch_ppocr_mobile_v2.0_cls_infer.onnxOptioneel tekstoriëntatiemodel
CharacterDictionaryppocr_keys_v1.txtUTF-8-woordenboek zonder BOM, in de tekenvolgorde van het model
UseAngleClassifierTrueWanneer uitgeschakeld, wordt geen classificatiemodel vereist of geïnitialiseerd
RightToLeftFalseOrden gedetecteerde boxes binnen horizontale rijen van rechts naar links; het Arabische preset zet dit aan
Threads1Aantal ONNX CPU-threads van 1 tot en met 64, begrensd op het aantal logische processors
MaxPixels16777216Invoerlimiet in pixels, van 1 tot en met 67.108.864
TimeoutMilliseconds60000Coöperatieve herkenningsdeadline, van 1 tot en met 3.600.000 milliseconden

Relatieve filenamen worden opgelost ten opzichte van ModelDirectory; absolute paden mogen apart ingerichte bestanden kiezen

De fabriek controleert bestandsbeschikbaarheid, opties, vereiste exports en de ABI-versie voordat de modellen worden geïnitialiseerd; ongeldige configuratie geeft EArgumentException en fouten bij het laden van modellen geven EInvalidOperation met een native diagnostische melding

Modelinitialisatie gebeurt in de fabriek en valt buiten de herkenningsdeadline; het aantal klassen van het woordenboek moet matchen met het herkenningsmodel, en alleen gelijke klantaantallen bewijzen nog niet dat tekenvolgorde of preprocessing compatibel is

De meegeleverde pijplijn gebruikt DB-detectie met een maximale detectiezijde van 1.024 pixels en 50 pixels witte opvulling; de recognizer accepteert compatibele NCHW-modellen met een vaste invoerhoogte van 32 of 48 en gebruikt 48 bij een dynamische hoogte

Herkenning behoudt de aspect ratio voor modellen met dynamische breedte en normaliseert opgevulde invoer met een minimale breedte van 320; een model met vaste breedte plafonneert de geschaalde cropbreedte, waardoor een lange tekstregel kan worden samengeperst

Hoekclassificatie behoudt de aspect ratio van de crop binnen de modelinvoerbreedte en vult ongebruikte pixels met genormaliseerde nullen; een crop draait alleen 180 graden wanneer de onderstebovenscore boven 0.9 uitkomt, zodat zwakke richtingsvoorspellingen korte tekst niet omdraaien

Het woordenboek moet matchen met de tekenvolgorde en het aantal uitvoerklassen van het model; CRLF-regelovergangen in het woordenboek worden geaccepteerd, maar een UTF-8-BOM wordt geweigerd

Als het model teken-metadata bevat, verifieert de fabriek ook elke woordenboekinvoer en diens volgorde; alleen de woordenboekgrootte is onvoldoende

Chinees, Russisch en gangbare talen

THPDFRapidOCRDLLOptions.ForLanguage kiest een herkenningsmodel en bijpassend woordenboek onder de lokale modelmap en behoudt de gedeelde defaults voor detector, classifier, threads, pixels en timeout

De methode accepteert taaliassen ongeacht hoofdlettergebruik, vervangt underscores door koppeltekens en trimt witruimte rondom; een lege of niet-ondersteunde tag geeft EArgumentException voordat de modellen worden geladen

ProfielmapTalenGangbare geaccepteerde aliassen
chVereenvoudigd Chinees en Engelszh, zh-CN, zh-Hans, chi_sim
chinese_chtTraditioneel Chineeszh-TW, zh-HK, zh-Hant, chi_tra
enEngelsen, en-US, en-GB, eng
latinFrans, Duits, Spaans, Portugees, Italiaans, Nederlands en Turksfr, de, es, pt-BR, it, nl, tr
japanJapansja, ja-JP, jpn
koreanKoreaansko, ko-KR, kor
cyrillicRussisch, Oekraïens, Bulgaars en Wit-Russischru, ru-RU, rus, uk, bg, be
arabicArabisch, Perzisch en Urduar, fa, ur, ara, fas, urd
devanagariHindi, Marathi en Nepaleeshi, mr, ne, hin, mar, nep

Elk profiel gebruikt <profile>/recognition.onnx en <profile>/dictionary.txt; profielnamen worden rechtstreeks geaccepteerd en bekende regionale aliassen zijn expliciet gedefinieerd in plaats van afgeleid uit een willekeurige prefix

Installeer de gekozen modelsets vóór deployment met de SHA256-gepinde provisioning-helper

& tools/Install-RapidOCRModels.ps1 `
  -Destination C:/OCR/models `
  -Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari

-Language All installeert alle negen profielen; -SkipClassifier slaat de optionele classifier over, en zet in dat geval UseAngleClassifier := False wanneer je een engine aanmaakt

De helper verifieert vastgepinde SHA256-hashes en installeert een gedeelde meertalige detector en classifier onder de root-filienamen die Default gebruikt; herkenning draait offline en downloadt nooit automatisch ontbrekende modellen

Kies de taal van de engine per pagina of regio; één engine detecteert de taal niet automatisch en combineert ook geen aparte recognizers voor verschillende schriften

De vastgepinde packages gebruiken compatibele PP-OCRv3- en PP-OCRv4-modellen; de herkenningsnauwkeurigheid hangt af van model, font, resolutie en crop, en het Latijnse model kan accenten zoals ñ door de war halen, zelfs op schone invoer

Nieuwere PP-OCRv5-modellen kunnen een nieuwere ONNX Runtime vereisen dan de statische libraries waarmee de DLL is gebouwd; een niet-ondersteund modelformaat laat de initialisatie mislukken met een diagnostische melding

Detectiemodellen moeten één float32-beeldtensor accepteren en een float32-waarschijnlijkheidskaart met vorm [1, 1, H, W] produceren op de geschaalde invoerresolutie; incompatibele typen, afmetingen of niet-eindige waarden, of waarschijnlijkheden buiten [0, 1] met meer dan vier float32-machine-epsilon, falen met een diagnostische melding voordat de detectieresultaten worden gebruikt

Kleine sigmoid-afrondingsfouten binnen die tolerantie worden geclampt naar [0, 1] vóór thresholding en contourbepunkting, zodat geldige modellen hun normale detectiegedrag kunnen behouden

Chinees voorbeeld

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;

Houd de engine-interface vast over meerdere verzoeken om zijn modellen te hergebruiken; gebruik een DLL die matcht met de architectuur van de aanroepende applicatie en zet de afhankelijkheden ernaast of in de standaard Windows-loadermappen

Russisch voorbeeld

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 en rus kiezen hetzelfde cyrillic-herkenningsmodel en -woordenboek

Resultaten en levensduur

De adapter kopieert de huidige bitmap naar een onafhankelijke top-down BGR-snapshot; die controleert afmetingen en het pixelbudget vóór allocatie en wijzigt de uitgeleende bitmap niet

De native pijplijn levert één resultaat per herkende tekstregel, met pixelgrenzen in de originele afbeelding en de gemiddelde tekenconfidence; elke regel verbruikt één MaxWords-slot en er wordt geen native baseline meegeleverd

Gedetecteerde boxes volgen de leesvolgorde van horizontale rijen, default van links naar rechts en van rechts naar links wanneer RightToLeft is aangezet; het Arabische preset zet deze optie aan

Hoekclassificatie corrigeert individuele tekst-crops; die bepaalt niet de oriëntatie van de hele pagina en zet de apart gedetecteerde boxes van een ondersteboven pagina niet in logische leesvolgorde

Herkende tekst blijft in de logische Unicode-volgorde van het model; de adapter draait Arabische strings niet automatisch om en past geen bidirectionele shaping toe

De adapter valideert UTF-8, Unicode-controltekens, grenzen, confidence en de limiet MaxTextCodeUnits van het verzoek, met een hard tekstplafond van 1.048.576 UTF-16-eenheden; aanvullende tekens verbruiken twee eenheden

Een lege pagina slaagt met een lege resultaten-array; bij falen worden partiële resultaten gewist en behoudt publicatie van doorzoekbare PDF's het bestaande atomaire pagina-transactiegedrag

Aanroepen op dezelfde engine worden geserialiseerd; het wachten op de enginelock controleert annulering en de herkenningsdeadline elke 25 milliseconden

Native callbacks controleren annulering en deadlines vóór en na detectie, classificatie en elke herkende regel; een individuele ONNX-inferentieaanroep kan niet geforceerd worden onderbroken, dus annulering kan pas terugkomen nadat de huidige fase is afgerond

Invoer- en tekstlimieten begrensen adapterallocaties en geaccepteerde uitvoer, maar leggen geen hard plafond op het geheugen van model, detectie, crop of inferentie

Bouwen en ABI

Native/RapidOCR bevat de C++-brug, een compatibele modelrecognizer, een geversioneerde C-header, de exportdefinitie en het CMake-project; voorzie compatibele CPU-netwerksources met DbNet, AngleNet en OcrUtils, plus bijpassende ONNX Runtime- en OpenCV-libraries

Gebruik Windows MSVC met C++17, een Windows SDK en CMake 3.20 of nieuwer; de default build gebruikt de statische release-CRT, die moet matchen met de aangeleverde libraries

& 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 moet OnnxRuntimeConfig.cmake bevatten en OpenCVDirectory moet naar de architecturespecifieke libraryconfiguratie wijzen; kies Win32 en bijpassende x86-libraries voor een 32-bits DLL

De buildhelper schrijft Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; met -BuildDirectory, -OutputDirectory en -Generator kun je de buildplaatsing en de Visual Studio-generator overschrijven

De brug houdt C++-exceptions binnen en stelt ABI-versie 1 bloot via HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize en HPDFRapidOCRDestroy; alles gebruikt cdecl, 32-bits statuswaarden en expliciete UTF-8-bytelengtes

ABI-versie 1 definieert ook de optionele export HPDFRapidOCRSetReadingDirection; de adapter vereist die alleen wanneer RightToLeft is aangezet, dus bestaande DLL's kunnen nog steeds verzoeken van links naar rechts bedienen

Callbacks lenen hun tekst alleen voor de duur van de aanroep; de adapter kopieert gevalideerde tekst voordat hij terugkeert en de destructor van de engine vernietigt de modellen voordat de DLL wordt ontladen

Validatie

Met het Python-package onnx en een native BUILD_TESTING-build draait u python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe om geldige lege uitvoer, ongeldige tensor-ranks, kanalen en typen, niet-matchende ruimtelijke afmetingen en ongeldige waarschijnlijkheden via de DLL-ABI te controleren; meerdere runner-paden kunnen beide architecturen in één aanroep valideren

Voeg -RapidOCRLanguageModelDirectory en een of beide native-DLL-libraryparameters toe aan de Delphi- of FPC-adapterrunner om alle geïnstalleerde presets te valideren met Chinese, Russische, Japanse, Koreaanse, gangbare Latijnse, Arabische en Hindi-samples; Russisch en Traditioneel Chinees ondergaan ook een ronde met opslaan van doorzoekbare PDF's, herladen, tekstextractie en pixelvergelijking

De Delphi- en FPC-adapterrunners testen persistente modellevensduur, BGR-rijlayout, Unicode en aanvullende tekens, ABI-controles, ongeldige resultaten, budgetten, coöperatieve annulering, geserialiseerd wachten op de lock en opruiming

Geef -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library en -RapidOCRNativeModelDirectory mee aan Tests/Delphi/Run-TesseractRecognitionTests.ps1 of Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 voor echte modelvalidatie, lege pagina's, omgang met beschadigde modellen, Engelse en Chinese herkenning en doorzoekbare PDF-roundtrips met ongewijzigde gerenderde pixels

Zie Zoekbare OCR-tekstlagen voor paginarendering, Unicode-PDF-tekstmapping, optional-content-groepering en conformance-beperkingen