Adaptér lokálních modelů RapidOCR

Pro cachovanou ONNX inferenci v procesu použijte adaptér nativní DLL RapidOCR s HPDFCreateRapidOCRDLLOCREngine a THPDFRapidOCRDLLOptions

Nativní adaptér nabízí presety THPDFRapidOCRDLLOptions.ForLanguage pro zjednodušenou a tradiční čínštinu, angličtinu, latinské jazyky, japonštinu, korejštinu, jazyky s cyrilicí včetně ruštiny, arabštinu a jazyky s písmem dévanágarí

HPDFRapidOCRRecognition poskytuje na Windows procesní adaptér implementující IHPDFOCREngine v buildách Delphi, C++Builder a FPC/Lazarus Win32 a Win64

Připravte Python s balíčky rapidocr a onnxruntime, dodávaný most tools/OCR/rapidocr_tsv.py a kompatibilní lokální ONNX modely; adaptér sám neinstaluje balíčky ani nestahuje modely, slovníky nebo fonty

Python běží v samostatném skrytém procesu, takže jeho architektura se může lišit od architektury volající aplikace; jeho balíček ONNX Runtime musí odpovídat architektuře jeho vlastního Pythonu

Přetížení továrních funkcí

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

Původní přetížení s timeoutem zůstává kompatibilní se stávajícím protokolem mostu a používá tři výchozí názvy modelů PP-OCRv4; cesty ke spustitelnému souboru, skriptu a adresáři kontroluje už při konstrukci a dostupnost modelů ověří ve workeru

Přetížení s volbami před vrácením adaptéru zkontroluje všechny vyžadované modely, volitelný slovník i lokální font; chybějící soubory nebo neplatné volby vyvolají EArgumentException dřív, než rozpoznávání začne

Relativní cesty k modelům, slovníkům a fontům se řeší vůči ModelDirectory; absolutní cesty můžou mířit na samostatně připravené soubory

Používejte modely kompatibilní s pipeline RapidOCR pro detekci, klasifikaci a CTC rozpoznávání; model z jiné OCR pipeline může vyžadovat odlišné předzpracování a nelze ho vybrat jen proto, že má formát ONNX

Výběr modelů podle jazyka

Procesní adaptér Pythonu dál používá explicitní cesty v THPDFRapidOCROptions; ForLanguage patří k recordu voleb nativní DLL a není to metoda Python adaptéru

Lokální jazykové modely a slovníky připravíte pomocí tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, případně -Language All pro všech devět jazykových profilů

Helper kontroluje zamčené hashe SHA256 a umisťuje každý rozpoznávač do <profile>/recognition.onnx s odpovídajícím <profile>/dictionary.txt; rozpoznávání za běhu zůstává offline bez automatických stahování

Pro ruštinu použijte cyrillic/recognition.onnx a cyrillic/dictionary.txt; zjednodušená čínština používá profil ch a tradiční čínština 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';

Kořenové názvy souborů detektoru a klasifikátoru výše odpovídají sdíleným modelům z provisioning helperu; odpovídající recognition model a slovník dodávejte vždy spolu a pro stránky nebo regiony s jiným písmem zvolte samostatný engine

Volby a výchozí hodnoty

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;

Record inicializujte přes THPDFRapidOCROptions.Default, než začnete přepisovat jednotlivá pole

PoleVýchozíVýznam
DetectionModelch_PP-OCRv4_det_mobile.onnxLokální detekční model
RecognitionModelch_PP-OCRv4_rec_mobile.onnxLokální rozpoznávací model
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxVyžadován jen při zapnuté klasifikaci úhlů
CharacterDictionaryPrázdnéPoužije se znaková metadata zabudovaná v rozpoznávacím modelu; lokální slovník dodávejte, když model tato metadata nemá
FontPathPrázdnéŘeší se na %WINDIR%\Fonts\arial.ttf pro kontejner výsledků RapidOCR
UseAngleClassifierTrueZapne klasifikaci úhlu textu; při vypnutí není klasifikační model vyžadován ani předáván
IntraOpThreads1ONNX vlákna v rámci operace, od 1 do 64, omezená počtem logických CPU workeru
InterOpThreads1ONNX vlákna mezi operacemi se stejnými limity
MaxPixels16777216Rozpočet vstupních pixelů, od 1 do 67,108,864
TimeoutMilliseconds60000Celková deadline požadavku, od 1 do 3,600,000 milisekund

Most explicitně vybírá CPU backend ONNX Runtime pro všechny fáze a zakazuje automatická stahování; chybí-li ve modelu zabudovaný znakový slovník, je potřeba připravený lokální CharacterDictionary

Příklad s explicitně zvolenými modely

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;

Výsledky, rozpočty a zrušení

Každý požadavek serializuje vypůjčenou bitmapu do privátního dočasného adresáře, spustí lokální Python workera a po skončení požadavku uklidí jeho handly procesu a dočasné soubory

Přetížení s volbami kontroluje MaxPixels před serializací bitmapy; worker kontroluje vstupní rozměry také před načtením modelů a dostane limity MaxWords a MaxTextCodeUnits požadavku

Most si vyžádá souřadnice znaků a zvaliduje geometrii, confidence a pokrytí textem každého znaku, poté emituje každou kompletní rozpoznanou řádku s jejími původními vnitřními mezerami a interpunkcí, obklopujícími hranicemi v pixelech původního obrázku a průměrnou confidence v rozsahu 0 až 1

Každá emitovaná řádka spotřebuje jednu pozici v MaxWords; vnitřní mezery se počítají do MaxTextCodeUnits a publikování celé řádky brání textové vrstvě zaměnit mezery mezi písmeny za mezery mezi slovy

Rozestupy se zachovávají z textu řádky rozpoznávače; text, který detekce rozdělí do samostatných boxů, stále závisí na prostorové inferenci mezer mezi slovy a externí PDF čtečky mohou opakované mezery při extrakci rekonstruovat nebo slučovat

Doplňkové znaky spotřebují dvě jednotky UTF-16; neplatné souřadnice, confidence, řídicí znaky nebo vyčerpané rozpočty způsobí selhání rozpoznávání a vymažou částečné výsledky

Prázdná stránka projde úspěšně s prázdným polem slov; nativní baseline se neposkytuje, takže textová vrstva použije svůj stávající geometrický fallback

Zrušení, timeout a velikosti výstupů se kontrolují každých 25 milisekund; Windows job obsahuje workera i případné child procesy interpretru a ukončení čeká na úklid procesů ještě až pět sekund navíc

ApplyLoadedOCRTextLayer publikuje všechny vybrané stránky atomicky po úspěšném rozpoznávání

Výstup TSV je omezen na 64 MiB a diagnostický výstup na 1 MiB; vstupní a výstupní rozpočty nekladou tvrdý strop na paměť ONNX modelů ani inference

Inicializace modelů probíhá v novém Python procesu pro každý požadavek a počítá se do deadline

Validace

Sdílené Delphi a FPC runnery adaptérů pokrývají preflight modelů, vlastní cesty, volitelnou klasifikaci, Unicode, rozpočty, selhání workera, zrušení a timeout; jejich volitelné parametry RapidOCR zapnou reálné rozpoznávání a kontroly round-trip prohledávatelného PDF

Použijte Tests/Delphi/Run-TesseractRecognitionTests.ps1 nebo Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 s -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel a -RapidOCRRecognitionModel

Pro volby vykreslování, mapování Unicode textu do PDF, seskupování optional content a limity shody viz Searchable OCR Text Layers