RapidOCR-adapter voor lokale modellen

Voor gecachte in-process ONNX-inferentie gebruik je de RapidOCR native DLL-adapter met HPDFCreateRapidOCRDLLOCREngine en THPDFRapidOCRDLLOptions

De native adapter biedt THPDFRapidOCRDLLOptions.ForLanguage-presets voor vereenvoudigd en traditioneel Chinees, Engels, Latijnse talen, Japans, Koreaans, Cyrillische talen waaronder Russisch, Arabische talen en Devanagari-talen

HPDFRapidOCRRecognition levert een Windows-procesadapter die IHPDFOCREngine implementeert, in Delphi-, C++Builder- en FPC/Lazarus-builds voor Win32 en Win64

Voorzie Python van rapidocr en onnxruntime, de meegeleverde brug tools/OCR/rapidocr_tsv.py en compatibele lokale ONNX-modellen; de adapter installeert zelf geen packages en downloadt geen modellen, woordenboeken of fonts

Python draait in een apart, verborgen proces, dus de architectuur mag afwijken van die van de aanroepende applicatie; het ONNX Runtime-pakket moet wel aansluiten op de eigen Python-architectuur

Fabrieksoverloads

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

De oorspronkelijke timeout-overload blijft compatibel met het bestaande brugprotocol en gebruikt de drie default PP-OCRv4-modelfilienamen; ze controleert executable-, script- en mappaden bij het aanmaken en laat de controle op modelbeschikbaarheid in de worker plaatsvinden

De options-overload controleert elk vereist model, een optioneel woordenboek en het lokale font voordat ze de adapter teruggeeft; ontbrekende bestanden of ongeldige opties geven EArgumentException voordat de herkenning start

Relatieve model-, woordenboek- en fontpaden worden opgelost ten opzichte van ModelDirectory; absolute paden mogen verwijzen naar apart ingerichte bestanden

Gebruik modellen die compatibel zijn met de detectie-, classificatie- en CTC-herkenningspijplijn van RapidOCR; een model uit een andere OCR-pijplijn kan andere preprocessing vereisen en je kunt het niet uitsluitend selecteren omdat het het ONNX-formaat gebruikt

Modelkeuze per taal

De Python-procesadapter blijft expliciete THPDFRapidOCROptions-paden gebruiken; ForLanguage hoort bij het optionsrecord van de native DLL en is geen methode van de Python-adapter

Richt lokale taalmodellen en woordenboeken in met tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, of kies -Language All voor alle negen taalprofielen

De helper controleert vastgepinde SHA256-hashes en plaatst elke recognizer op <profile>/recognition.onnx met het bijbehorende <profile>/dictionary.txt; herkenning blijft tijdens runtime offline, zonder automatische downloads

Voor Russisch gebruik je cyrillic/recognition.onnx en cyrillic/dictionary.txt; vereenvoudigd Chinees gebruikt het profiel ch en traditioneel Chinees 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';

De hierboven genoemde root-filienamen van detector en classifier komen overeen met de gedeelde modellen van de provisioning-helper; lever het bijpassende herkenningsmodel en woordenboek samen aan en kies een aparte engine voor pagina's of regio's die een ander schrift nodig hebben

Opties en defaults

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;

Initialiseer het record met THPDFRapidOCROptions.Default voordat je velden overschrijft

VeldDefaultBetekenis
DetectionModelch_PP-OCRv4_det_mobile.onnxLokaal detectiemodel
RecognitionModelch_PP-OCRv4_rec_mobile.onnxLokaal herkenningsmodel
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxAlleen vereist wanneer hoekclassificatie is aangezet
CharacterDictionaryLeegGebruikt de ingebouwde teken-metadata van het herkenningsmodel; lever een lokaal woordenboek aan wanneer het model die metadata mist
FontPathLeegKomt uit op %WINDIR%\Fonts\arial.ttf voor de resultatencontainer van RapidOCR
UseAngleClassifierTrueZet hoekclassificatie van tekst aan; wanneer uitgeschakeld, is geen classificatiemodel vereist en wordt er ook geen doorgegeven
IntraOpThreads1ONNX intra-operation-threads, van 1 tot en met 64, begrensd op het aantal logische CPU's van de worker
InterOpThreads1ONNX inter-operation-threads met dezelfde limieten
MaxPixels16777216Pixelbudget voor de invoer, van 1 tot en met 67.108.864
TimeoutMilliseconds60000Totale deadline per verzoek, van 1 tot en met 3.600.000 milliseconden

De brug kiest expliciet de ONNX Runtime CPU-backend voor alle fasen en zet automatische downloads uit; als het ingebouwde tekenwoordenboek ontbreekt, is een lokaal ingericht CharacterDictionary vereist

Voorbeeld met expliciet gekozen modellen

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;

Resultaten, budgetten en annulering

Elk verzoek serialiseert de uitgeleende bitmap naar een eigen tijdelijke map, start een lokale Python-worker en ruimt diens process handles en tijdelijke bestanden op zodra het verzoek klaar is

De options-overload controleert MaxPixels vóór het serialiseren van de bitmap; de worker controleert ook de invoerafmetingen vóór het laden van de modellen en krijgt de limieten MaxWords en MaxTextCodeUnits van het verzoek mee

De brug vraagt tekencoördinaten op en valideert de geometrie, confidence en tekstdekking van elk teken, en geeft daarna elke complete herkende regel terug met diens originele interne spaties en punctie, de omsluitende grenzen in pixels van de originele afbeelding en een gemiddelde confidence in het bereik 0 tot en met 1

Elke teruggegeven regel verbruikt één MaxWords-slot; interne spaties tellen mee voor MaxTextCodeUnits, en het publiceren van de hele regel voorkomt dat de tekstlaag letterafstanden aanziet voor woordafstanden

De spatiëring blijft behouden uit de regeltekst van de recognizer; tekst die detectie in aparte boxes splitst, blijft afhankelijk van ruimtelijke inferentie van woordgaten, en externe PDF-lezers kunnen herhaalde spaties tijdens extractie reconstrueren of samenvouwen

Aanvullende tekens verbruiken twee UTF-16-eenheden; ongeldige coördinaten, confidence, controltekens of uitgeputte budgetten laten de herkenning mislukken en wissen partiële resultaten

Een lege pagina slaagt met een lege woorden-array; er wordt geen native baseline meegeleverd, dus de tekstlaag gebruikt haar bestaande geometrie-terugval

Annulering, timeout en uitvoergroottes worden elke 25 milliseconden gecontroleerd; een Windows-job omsluit de worker en eventuele childprocessen van de interpreter, en bij beëindiging wordt tot vijf extra seconden gewacht tot de processen zijn opgeruimd

ApplyLoadedOCRTextLayer publiceert alle geselecteerde pagina's atoomisch nadat de herkenning is geslaagd

TSV-uitvoer is beperkt tot 64 MiB en diagnostische uitvoer tot 1 MiB; invoer- en uitvoerbudgetten leggen geen hard plafond op het geheugengebruik van ONNX-modellen of inferentie

Modelinitialisatie gebeurt in een nieuw Python-proces per verzoek en telt mee binnen de deadline

Validatie

De gedeelde Delphi- en FPC-adapterrunners dekken model-preflight, eigen paden, optionele classificatie, Unicode, budgetten, workerfalen, annulering en timeout af; hun optionele RapidOCR-parameters zetten echte herkenning en round-tripcontroles van doorzoekbare PDF's aan

Gebruik Tests/Delphi/Run-TesseractRecognitionTests.ps1 of Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 met -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel en -RapidOCRRecognitionModel

Zie Zoekbare OCR-tekstlagen voor renderingopties, Unicode-PDF-tekstmapping, optional-content-groepering en conformance-grenzen