Searchable OCR Text Layers
Aplikace HotPDF umí vykreslit vybrané načtené stránky pro OCR engine dodaný aplikací a atomicky přidat prohledávatelný neviditelný text Unicode zarovnaný s každým rozpoznaným slovem
Konzolový příklad SearchableOCR nabízí spustitelný pracovní postup: s --create-sample vygeneruje třístránkový vzorek složený jen z obrázků, na výběr máte vestavěné OCR, RapidOCR nebo Tesseract jako DLL/CLI, vyberete stránky, nastavíte confidence a limity prostředků a uložíte prohledávatelnou kopii se statistikami konverze
Engine integration
Implementujte IHPDFOCREngine s jakýmkoli synchronním poskytovatelem OCR dostupným aplikaci
Engine přijímá vypůjčený TBitmap, požadované DPI, normalizovanou rotaci stránky, souřadnice media-boxu, zbývající rozpočty slov a UTF-16 a efektivní token zrušení prostřednictvím THPDFOCRRequest
Rámečky slov a volitelné základní linie používají souřadnice pixelů bitmapy zleva nahoře a engine nesmí po návratu Recognize vypůjčenou bitmapu uchovávat ani uvolňovat
Volitelné lokální enginy
Verze 2.754.0 přidává na Windows explicitní továrny na Tesseract a RapidOCR vracející IHPDFOCREngine; přetížení bez enginu stále vybere existující vestavěný engine
Zvolený engine nainstalujte a připravte lokálně, než vytvoříte jeho adaptér, a ten pak předejte přetížení ApplyLoadedOCRTextLayer s enginem; spustitelné soubory, Python balíčky a OCR modely jsou volitelné externí závislosti a HotPDF je nedodává
Tesseract
Volitelný adaptér nativní DLL Tesseractu přidává konfigurovatelné režimy segmentace stránky a engine mode, vícejazyčné rozpoznávání a nativní baselines slov přes HPDFCreateTesseractDLLOCREngine a THPDFTesseractOptions
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Deklarace je v HPDFTesseractRecognition; připravte spustitelný Tesseract schopný TSV výstupu a datový adresář s požadovaným jazykovým modelem, například chi_sim.traineddata pro chi_sim
Přetížení s volbami přijímá THPDFTesseractOptions.Default s explicitní segmentací stránky, režimem rozpoznávacího enginu, timeoutem a limitem vstupních pixelů; pro shodu s rozložením vstupu zvolte tpsSingleLine, tpsSingleWord nebo tpsSparseText, jak ukazuje Tesseract OCR Adapters
Tento příklad předpokládá, že spustitelný soubor i data už jsou nainstalované na uvedených cestách a PDF je načtená instance THotPDF
uses SysUtils, HPDFDoc, HPDFTesseractRecognition;
procedure AddTesseractText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateTesseractOCREngine(
'C:\OCR\Tesseract\tesseract.exe',
'C:\OCR\Tesseract\tessdata', 'chi_sim', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
RapidOCR
Adaptér nativní DLL RapidOCR rozpoznává snímky paměti s perzistentními in-process CPU ONNX modely přes HPDFCreateRapidOCRDLLOCREngine, s volitelnou klasifikací úhlů a kooperativním zrušením v buildách Delphi, C++Builder a Windows FPC/Lazarus
Adaptér lokálních modelů RapidOCR navíc nabízí přetížení s THPDFRapidOCROptions pro explicitní cesty ONNX modelů, volitelnou klasifikaci úhlů, lokální znakové slovníky a fonty, limity CPU vláken a rozpočet vstupních pixelů v buildách Delphi, C++Builder a FPC/Lazarus
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Deklarace je v HPDFRapidOCRRecognition; připravte Python s balíčky rapidocr a onnxruntime, dodávaný most tools/OCR/rapidocr_tsv.py a tyto tři lokální modely
ch_PP-OCRv4_det_mobile.onnxch_PP-OCRv4_rec_mobile.onnxch_ppocr_mobile_v2.0_cls_mobile.onnx
Most dále vyžaduje %WINDIR%\Fonts\arial.ttf pro kontejner výsledků RapidOCR, zakazuje automatická stahování a používá jedno ONNX vlákno na nakonfigurovaný exekuční pool; chybějící modely, balíčky nebo lokální font způsobí selhání rozpoznávání
Aktuální most používá konfiguraci modelů pro zjednodušenou čínštinu a zachovává rozpoznanou interpunkci bez náhrady fullwidth nebo halfwidth variantami
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\RapidOCR\models', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
Obě továrny ověřují existující cesty ke spustitelným souborům i dat a přijímají timeout od 1 do 3 600 000 milisekund, defaultně 60 000; neplatná konfigurace vyvolá EArgumentException
Sdílený adaptér spouští skrytý lokální proces s uvozovanými cestami a omezenými děděnými handly, každých 25 milisekund kontroluje zrušení, timeout a velikosti výstupů a při selhání proces ukončí, než uklidí dočasné soubory
Výstup TSV je omezen na 64 MiB a výstup diagnostického souboru na 1 MiB, přičemž vrácená diagnostika se zkracuje na 4 096 znaků; rozpoznaná slova se musí vejít i do rozpočtů slov a UTF-16 požadavku a do platných hranic bitmapy
Výstup rozpoznávání TSV musí být validní UTF-8 a nesmí obsahovat NUL bajty ani řídicí znaky C0/C1 uvnitř rozpoznaných slov; poškozený výstup selže v celém rozpoznávacím požadavku, i když validní slova chybu předcházejí
Toto jsou limity výstupu a požadavku, ne tvrdý strop paměti externího enginu; zrušení a selhání enginu se vracejí přes status textové vrstvy bez publikování částečných stránek
Důkazy a limity rozpoznávání
Lokální baseline RapidOCR 3.8.4 prošel všech 15 opakování napříč pěti pevnými čínskými skenovacími regiony: dva čisté regiony při 300 DPI a tři zátěžové regiony s nízkým rozlišením při 150 DPI, vyhodnocené proti aktuálním referenčním přepisům s chybovostí znaků nejvýše 5 % a mírou vymazání nejvýše 2 %
Všechna opakování prošla kontrolami pořadí čtení, celkem 5 190 kontrolami souřadnic slov a znaků a rovností viditelných pixelů při 72 DPI; dva čisté regiony měly proti těmto referencím nulovou chybovost znaků
Dvě vizuální revize AI se shodnou na čínském textu a číslech, ale některé kódové body interpunkce v rastru zůstávají nejednoznačné a lidské rozhodnutí ještě probíhá; rozdíly v interpunkci se stále počítají jako chyby a tyto výsledky jsou důkazem pro korpus, ne obecnou zárukou přesnosti
Geometry and search text
Aplikace HotPDF invertuje transformaci stránky rendereru, takže základní linie slov zůstávají zarovnané na stránkách otočených o 0, 90, 180 nebo 270 stupňů
Každé přijaté slovo je zapsáno s režimem vykreslování textu 3 Tr, přizpůsobenou horizontální textovou stupnicí a maticí textu citlivou na rotaci, přičemž rastr stránky zůstává beze změny a pořadí vybíratelného obsahu je zachováno
Sdílený font Type 0 Identity-H přiřazuje omezené CID lokální pro dokument skalárům Unicodeu a zapisuje kompletní mapu ToUnicode včetně UTF-16 náhradních cílů pro doplňkové znaky
Sousední latinská a cyrilská slova na stejné baseline dostanou explicitní mezeru Unicode, když jejich geometrie naznačuje mezeru mezi slovy; sousední CJK slova si ponechávají původní text bez vkládaných mezer
Zpracování skenovaného PDF
Konzolový příklad Demo/Delphi/SearchableOCR/SearchableOCR.dpr načte skenované PDF, spustí nativní RapidOCR s explicitním lokálním jazykovým profilem, publikuje neviditelný text Unicode na všech vhodných stránkách a uloží nové PDF bez otevírání prohlížeče
SearchableOCR.exe scan.pdf searchable.pdf --dll C:\HotPDF\Lib\Native\RapidOCR\Win64\HotPDFRapidOCR.dll --models C:\HotPDF\Lib\Native\RapidOCR\Models --language ru --dpi 300
--language ch použijte pro zjednodušenou čínštinu a --language chinese_cht pro tradiční čínštinu; DLL musí odpovídat architektuře spustitelného souboru a zvolený lokální balíček modelů musí být nainstalovaný
Příklad odmítne přepsat existující výstupní soubor a při aktualizaci označené OCR vrstvy HotPDF přijímá --replace-ocr
Dekódování JPEG skenů ve Windows FPC kreslí do finálního pixel formátu bitmapy před rozpoznáváním, takže konverze formátů LCL dekódovaný obrázek zachová
Aktualizace existující OCR vrstvy
Nastavte THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer na True, abyste na rozpoznaných stránkách nahradili dříve generované označené OCR streamy HotPDF ve stejné transakci jako nový text
Toto obchází SkipPagesWithText jen na označených stránkách a funguje i po uložení a opětovném načtení; THPDFOCRTextLayerInfo.ReplacedPageCount hlásí počet nahrazených stránek
Selhání rozpoznávání a stránky bez přijatých slov ponechávají starou textovou vrstvu; neoznačené streamy, včetně OCR třetích stran a vrstev generovaných dřívějšími verzemi HotPDF, zůstávají zachované
Nahrazení odpojí staré content streamy OCR, ale neodstraní fontové zdroje ani skupiny optional content, na které se může jinam odkazovat; inkrementální ukládání může ponechat nahrazené objekty z předchozích revizí
Default se stále přeskočí jakákoli stránka s extrahovatelným textem, včetně čísla stránky nebo hlavičky přes sken; vypnutí SkipPagesWithText rozpozná celou stránku a může zdvojit existující nativní text, takže smíšené stránky vyžadují výběr zpracování na straně aplikace
Bounds, cancellation, and atomicity
THPDFOCRTextLayerOptions.Default povoluje rozpoznávání při 300 DPI, přeskočí stránky, které už text vystavují, a omezuje počet stránek, pixelů, slov, jednotek UTF-16 a generovaných bajtů obsahu
Aplikace HotPDF ověřuje každý výsledek enginu a sestavuje veškerý obsah stránek před spuštěním jedné transakce grafu s kopírováním při zápisu, takže selhání enginu, neplatná geometrie, vyčerpané rozpočty, zrušení nebo chyby potvrzení nechají načtený graf objektů beze změny
Prázdné pole indexů stránek vybírá každou načtenou stránku, zatímco duplicitní indexy stránek jsou rozpoznány jednou v pořadí prvního výskytu
MaxTotalWords počítá všechna přijatá slova, včetně slov s nízkou confidence nebo neplatných, která se později zahodí, a každý požadavek na stránku dostane jen zbývající povolený počet
Když je budget slov nebo UTF-16 vyčerpaný a zbývá další vhodná stránka, zpracování vrátí otlsBudgetExceeded, dřív než stránku vykreslí nebo rozpozná, a nezveřejní žádnou z plánovaných textových vrstev; stránky přeskočené kvůli existujícímu textu nevyžadují žádný zbývající rozpočet rozpoznávání
Optional-content grouping
Nastavte UseOptionalContentGroup, abyste svázali veškerý generovaný text s jednou pojmenovanou vrstvou prostřednictvím slovníku Resources/Properties každé stránky
Tato možnost vyžaduje PDF 1.5 a dodržuje StrictVersionLock; výchozí hodnota ponechává neviditelný text mimo skupinu volitelného obsahu pro nejširší kompatibilitu
Conformance note
Generovaná prohledávatelná vrstva záměrně používá nevestavený syntetický font, protože režim vykreslování 3 nikdy nekreslí glyfy
Toto rozhraní samo o sobě nevytváří výstup OCR vyhovující PDF/A, takže pracovní postup PDF/A by měl použít cestu textové vrstvy s vloženým fontem a před publikací spustit požadované ověření shody
Primary APIs
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progressive Rendering and Cancellation · ExtractLoadedPageText Method