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
| Veld | Default | Betekenis |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Lokaal detectiemodel |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Lokaal herkenningsmodel |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Alleen vereist wanneer hoekclassificatie is aangezet |
CharacterDictionary | Leeg | Gebruikt de ingebouwde teken-metadata van het herkenningsmodel; lever een lokaal woordenboek aan wanneer het model die metadata mist |
FontPath | Leeg | Komt uit op %WINDIR%\Fonts\arial.ttf voor de resultatencontainer van RapidOCR |
UseAngleClassifier | True | Zet hoekclassificatie van tekst aan; wanneer uitgeschakeld, is geen classificatiemodel vereist en wordt er ook geen doorgegeven |
IntraOpThreads | 1 | ONNX intra-operation-threads, van 1 tot en met 64, begrensd op het aantal logische CPU's van de worker |
InterOpThreads | 1 | ONNX inter-operation-threads met dezelfde limieten |
MaxPixels | 16777216 | Pixelbudget voor de invoer, van 1 tot en met 67.108.864 |
TimeoutMilliseconds | 60000 | Totale 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