Iskalne plasti besedila OCR
HotPDF lahko upodobi izbrane naložene strani za pogon OCR, ki ga zagotovi aplikacija, in atomsko doda iskalno nevidno besedilo Unicode, poravnano z vsako prepoznano besedo
Konzolni demo SearchableOCR ponuja takoj izvedljiv potek dela: s --create-sample ustvarite tristranski vzorec samo s sliko, izberete vgrajeno OCR, RapidOCR ali prepoznavo Tesseract DLL/CLI, izberete strani, nastavite zaupanje in omejitve virov ter shranite iskalno kopijo s statistiko pretvorbe
Integracija pogona
Implementirajte IHPDFOCREngine s katerim koli sinhronim ponudnikom OCR, ki je na voljo aplikaciji
Pogon prejme izposojeni TBitmap, zahtevani DPI, normalizirano rotacijo strani, koordinate medijskega polja, preostale proračune besed in UTF-16 ter efektivni žeton preklica prek THPDFOCRRequest
Polja besed in neobvezne osnovne črte uporabljajo koordinate slikovnih pik bitmapnega zgornjega levega vogala, pogon pa po vrnitvi Recognize ne sme obdržati ali sprostiti izposojene bitmapne slike
Izbirni krajevni pogoni
Različica 2.754.0 doda izrecni tovarni Tesseract in RapidOCR, ki v sistemu Windows vrneta IHPDFOCREngine; preobremenitev brez pogona še naprej izbere obstoječi vgrajeni pogon
Izbrani pogon namestite in pripravite lokalno, preden ustvarite njegov adapter, nato adapter podajte preobremenitvi ApplyLoadedOCRTextLayer s pogonom; izvedljive datoteke, paketi Python in modeli OCR so izbirne zunanje odvisnosti in niso priloženi HotPDF
Tesseract
Izbirni nativni adapter Tesseract DLL doda nastavljivo segmentacijo strani in načine pogona, večjezično prepoznavanje ter nativne osnovne črte besed prek HPDFCreateTesseractDLLOCREngine in 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;
Deklaracija je v HPDFTesseractRecognition; potrebujete izvedljivo datoteko Tesseract, ki zna izpisati TSV, in podatkovni imenik z modelom zahtevanega jezika, na primer chi_sim.traineddata za chi_sim
Preobremenitev z možnostmi sprejme THPDFTesseractOptions.Default z izrecno segmentacijo strani, načinom prepoznavnega pogona, časovno omejitvijo in omejitvijo vhodnih pikslov; da se ujemate z razporeditvijo vnosa, izberite tpsSingleLine, tpsSingleWord ali tpsSparseText, kot je prikazano v adapterjih Tesseract OCR
Ta primer predpostavlja, da sta izvedljiva datoteka in podatki že nameščena na prikazanih poteh ter da je PDF naložen primerek 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
Nativni adapter RapidOCR DLL prepozna posnetke pomnilnika s trajnimi modeli ONNX za CPU znotraj procesa prek HPDFCreateRapidOCRDLLOCREngine, z izbirno klasifikacijo kota in sodelovalnim preklicem v gradnjah Delphi, C++Builder in Windows FPC/Lazarus
Adapter RapidOCR z lokalnimi modeli poleg tega ponuja preobremenitev s THPDFRapidOCROptions za izrecne poti modelov ONNX, izbirno klasifikacijo kota, krajevne slovarje znakov in pisave, omejitve niti CPU ter proračun vhodnih pikslov v gradnjah Delphi, C++Builder in FPC/Lazarus
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Deklaracija je v HPDFRapidOCRRecognition; pripravite Python s paketoma rapidocr in onnxruntime, priloženim mostom tools/OCR/rapidocr_tsv.py in ti tremi krajevnimi modeli
ch_PP-OCRv4_det_mobile.onnxch_PP-OCRv4_rec_mobile.onnxch_ppocr_mobile_v2.0_cls_mobile.onnx
Most poleg tega za vsebnik rezultatov RapidOCR zahteva %WINDIR%\Fonts\arial.ttf, onemogoči samodejne prenose in uporablja eno nit ONNX na konfiguriran izvajalski sklad; manjkajoči modeli, paketi ali lokalna pisava povzročijo neuspeh prepoznavanja
Trenutni most uporablja konfiguracijo modela za poenostavljeno kitajščino in ohrani prepoznana ločila brez zamenjave med polnimi in polovičnimi širinami
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;
Obe tovarni preverita obstoječe poti do izvedljive datoteke in podatkov ter sprejmeta časovno omejitev od 1 do 3,600,000 milisekund, privzeto 60,000; neveljavna konfiguracija sproži EArgumentException
Skupni adapter zažene skrit lokalni proces s potmi v narekovajih in omejenimi podedovanimi handli, vsakih 25 milisekund preveri preklic, časovno omejitev in velikosti izhoda ter ob neuspehu proces ustavi, preden počisti začasne datoteke
Izhod TSV je omejen na 64 MiB, izhod diagnostične datoteke pa na 1 MiB, vrnjene diagnostike se skrajšajo na 4,096 znakov; prepoznane besede se morajo prilegati tudi proračunoma besed in UTF-16 zahteve ter veljavnim mejam bitne slike
Izhod prepoznave TSV mora biti veljaven UTF-8 in ne sme vsebovati bajtov NUL ali krmilnih znakov C0/C1 znotraj prepoznanih besed; nepravilno oblikovan izhod spodleti celotno zahtevo prepoznave, tudi kadar pred napako obstajajo veljavne besede
To so omejitve izhoda in zahteve, ne pa trda zgornja meja porabe pomnilnika zunanjega pogona; preklici in napake pogona se vrnejo prek stanja besedilnega sloja, brez objave delnih strani
Dokazila in omejitve prepoznave
Lokalna osnova RapidOCR 3.8.4 je opravila vseh 15 ponovitev na petih fiksnih kitajskih območjih skenov: dveh jasnih območjih pri 300 DPI in treh obremenilnih območjih nizke ločljivosti pri 150 DPI, ovrednotenih glede na trenutne referenčne prepise, z največ 5 % napak na znak in največ 2 % izpustov
Vse ponovitve so opravile preverjanja vrstnega reda branja, skupno 5,190 preverjanj koordinat besed ali znakov in enakost vidnih slikovnih pik pri 72 DPI; obe jasni območji sta imeli glede na te reference nič napak na znak
Dva vizualna pregleda z AI se skladata glede kitajskega besedila in številk, vendar nekatere kodne točke ločil v rastru ostajajo dvoumne in človeška presoja še čaka; razlike v ločilih se še vedno štejejo za napake, ti rezultati pa so dokaz iz korpusa, ne splošno zagotovilo natančnosti
Geometrija in iskalno besedilo
HotPDF obrne transformacijo strani upodabljalnika, tako da osnovne črte besed ostanejo poravnane na straneh, zasukanih za 0, 90, 180 ali 270 stopinj
Vsaka sprejeta beseda se zapiše z načinom upodabljanja besedila 3 Tr, prilagojeno vodoravno merilo besedila in matriko besedila, ki upošteva rotacijo, pri čemer raster strani ostane nespremenjen, vrstni red izbirne vsebine pa ohranjen
Skupna pisava Type 0 Identity-H dodeli omejene dokumentno lokalne CID-je skalarnim vrednostim Unicode in zapiše popoln zemljevid ToUnicode, vključno s cilji nadomestnih parov UTF-16 za dopolnilne znake
Sosednje latin in cirilične besede na isti osnovni črti prejmejo izrecni presledek Unicode, kadar njihova geometrija nakazuje vrzel med besedami; sosednje besede CJK ohranijo izvirno besedilo brez vstavljenih presledkov
Obdelava skeniranega PDF
Konzolni primer Demo/Delphi/SearchableOCR/SearchableOCR.dpr naloži skeniran PDF, zažene nativni RapidOCR z izrecnim krajevnim jezikovnim profilom, objavi nevidno besedilo Unicode na vseh upravičenih straneh in shrani nov PDF brez odpiranja pregledovalnika
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
Za poenostavljeno kitajščino uporabite --language ch, za tradicionalno kitajščino pa --language chinese_cht; DLL se mora ujemati z arhitekturo izvedljive datoteke, izbrani krajevni paket modelov pa mora biti nameščen
Primer zavrne prepis obstoječe izhodne datoteke in sprejme --replace-ocr, kadar posodablja označeno plast OCR HotPDF
Dekodiranje skenov JPEG v Windows FPC se pred prepoznavo izriše v končni format pikslov bitne slike, tako da pretvorba formatov LCL ohrani dekodirano sliko
Posodabljanje obstoječe plasti OCR
Nastavite THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer na True, da v isti transakciji kot novo besedilo zamenjate prej ustvarjene, označene tokove OCR HotPDF na prepoznanih straneh
To obide SkipPagesWithText samo na označenih straneh in deluje po shranjevanju ter ponovnem nalaganju; THPDFOCRTextLayerInfo.ReplacedPageCount poroča število zamenjanih strani
Napake prepoznave in strani brez sprejetih besed ohranijo staro besedilno plast; neoznačeni tokovi, vključno s OCR tretjih strani in plastmi, ustvarjenimi v prejšnjih izdajah HotPDF, ostanejo ohranjeni
Zamenjava poveže stare vsebinske tokove OCR od dokumenta, ne odstrani pa virov pisav ali skupin izbirne vsebine, na katere se je morda še kje sklicevano; inkrementalno shranjevanje lahko obdrži nadomeščene objekte iz prejšnjih revizij
Privzeto ostane preskok vsake strani z izvlečljivim besedilom, vključno s številko strani ali glavo nad skenom; izklop SkipPagesWithText prepozna celo stran in lahko podvoji obstoječe nativno besedilo, zato mešane strani zahtevajo obdelavo, izbrano s strani aplikacije
Meje, preklic in atomskost
THPDFOCRTextLayerOptions.Default omogoči prepoznavanje pri 300 DPI, preskoči strani, ki že izpostavljajo besedilo, ter omeji število strani, slikovnih pik, besed, enot UTF-16 in generiranih vsebinskih bajtov
HotPDF preveri vsak rezultat pogona in zgradi vso vsebino strani, preden začne eno transakcijo grafa s kopiranjem ob pisanju, zato napake pogona, neveljavna geometrija, izčrpani proračuni, preklic ali napake pri potrditvi pustijo naloženi objektni graf nespremenjen
Prazna tabela indeksov strani izbere vsako naloženo stran, medtem ko se podvojeni indeksi strani prepoznajo enkrat v vrstnem redu prvega pojava
MaxTotalWords šteje vse prejete besede, vključno z besedami z nizko zaupanjem ali neveljavnimi, ki jih kasneje zavrže, vsaka zahteva strani pa prejme le preostali odbitek
Kadar se proračun besed ali UTF-16 izčrpa in ostane še ena upravičena stran, se obdelava vrne s otlsBudgetExceeded, preden to stran upodobi ali prepozna, in ne objavi nobene načrtovane besedilne plasti; strani, preskočene zaradi obstoječega besedila, ne potrebujejo preostalega proračuna prepoznave
Združevanje neobvezne vsebine
Nastavite UseOptionalContentGroup, da vse generirano besedilo povežete z eno imenovano plastjo prek vsakega slovarja Resources/Properties strani
Ta možnost zahteva PDF 1.5 in sledi StrictVersionLock; privzeta nastavitev ohrani nevidno besedilo zunaj skupine neobvezne vsebine za najširšo združljivost
Opomba o skladnosti
Generirana iskalna plast namenoma uporablja nevgrajeno sintetično pisavo, ker način upodabljanja 3 nikoli ne nariše glifov
Ta API sam po sebi ne ustvari izhoda OCR, skladnega s PDF/A, zato naj potek dela PDF/A uporabi pot plasti besedila z vgrajeno pisavo in pred objavo izvede zahtevano preverjanje skladnosti
Primarni API-ji
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progresivno upodabljanje in preklic · Metoda ExtractLoadedPageText