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

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

Progresivno upodabljanje in preklic · Metoda ExtractLoadedPageText