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
| Pole | Výchozí | Význam |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Lokální detekční model |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Lokální rozpoznávací model |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Vyžadován jen při zapnuté klasifikaci úhlů |
CharacterDictionary | Prázdné | Použije se znaková metadata zabudovaná v rozpoznávacím modelu; lokální slovník dodávejte, když model tato metadata nemá |
FontPath | Prázdné | Řeší se na %WINDIR%\Fonts\arial.ttf pro kontejner výsledků RapidOCR |
UseAngleClassifier | True | Zapne klasifikaci úhlu textu; při vypnutí není klasifikační model vyžadován ani předáván |
IntraOpThreads | 1 | ONNX vlákna v rámci operace, od 1 do 64, omezená počtem logických CPU workeru |
InterOpThreads | 1 | ONNX vlákna mezi operacemi se stejnými limity |
MaxPixels | 16777216 | Rozpočet vstupních pixelů, od 1 do 67,108,864 |
TimeoutMilliseconds | 60000 | Celková 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