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

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

Progressive Rendering and Cancellation · ExtractLoadedPageText Method