Slojevi teksta OCR-a koji se mogu pretražiti
HotPDF može da renderuje izabrane učitane stranice za motor OCR-a koji isporučuje aplikacija i atomski doda tekst koji se može pretražiti, nevidljiv Unicode, poravnat sa svakom prepoznatom rečju
SearchableOCR konzolni demo nudi tok rada spreman za pokretanje: generišite trostranični uzorak samo sa slikama pomoću --create-sample, izaberite ugrađeni OCR, RapidOCR ili Tesseract DLL/CLI prepoznavanje, izaberite stranice, podesite pouzdanost i limite resursa i sačuvajte kopiju sa pretraživim tekstom uz statistiku konverzije
Integracija motora
Implementirajte IHPDFOCREngine uz bilo koji sinhroni OCR provajder dostupan aplikaciji
Motor prima pozajmljen TBitmap, traženi DPI, normalizovanu rotaciju stranice, koordinate medija-kutije, preostale budžete reči i UTF-16 i efektivni token otkazivanja kroz THPDFOCRRequest
Prostori reči i opcione osnovne linije koriste bitmat pikselske koordinate gornjeg levog, i motor ne sme da zadrži ili oslobodi pozajmljeni bitmap nakon što se Recognize vrati
Opcioni lokalni engine-i
Verzija 2.754.0 dodaje eksplicitne Tesseract i RapidOCR fabrike koje vraćaju IHPDFOCREngine na Windows-u; preopterećenje bez engine-a i dalje bira postojeći ugrađeni engine
Instalirajte i pripremite izabrani engine lokalno pre kreiranja njegovog adaptera, a zatim prosledite taj adapter engine preopterećenju metoda ApplyLoadedOCRTextLayer; izvršne datoteke, Python paketi i OCR modeli su opcione spoljašnje zavisnosti i nisu ugrađeni uz HotPDF
Tesseract
Opcioni nativni Tesseract DLL adapter dodaje konfigurabilnu segmentaciju stranice i režime engine-a, višejezično prepoznavanje i nativne osnovne linije reči kroz HPDFCreateTesseractDLLOCREngine i 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 u HPDFTesseractRecognition; obezbedite Tesseract izvršnu datoteku sposobnu za TSV izlaz i direktorijum podataka sa traženim jezičkim modelom, poput chi_sim.traineddata za chi_sim
Overload sa opcijama prihvata THPDFTesseractOptions.Default sa eksplicitnom segmentacijom stranice, režimom engine-a za prepoznavanje, tajmautom i limitom ulaznih piksela; izaberite tpsSingleLine, tpsSingleWord ili tpsSparseText da odgovarate rasporedu ulaza, kao u Tesseract OCR Adapters
Ovaj primer pretpostavlja da su izvršna datoteka i podaci već instalirani na prikazanim putanjama i da je PDF učitani THotPDF instancu
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 RapidOCR DLL adapter prepoznaje snimke memorije trajnim unutarprocesnim CPU ONNX modelima kroz HPDFCreateRapidOCRDLLOCREngine, sa opcionom klasifikacijom ugla i kooperativnim otkazivanjem u Delphi, C++Builder i Windows FPC/Lazarus buildovima
RapidOCR adapter za lokalne modele takođe nudi THPDFRapidOCROptions preopterećenje za eksplicitne putanje ONNX modela, opcionu klasifikaciju ugla, lokalne rečnike znakova i fontove, limite CPU niti i budžet ulaznih piksela u Delphi, C++Builder i FPC/Lazarus buildovima
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Deklaracija je u HPDFRapidOCRRecognition; pripremite Python sa rapidocr i onnxruntime, priloženim tools/OCR/rapidocr_tsv.py mostom, i ova tri lokalna modela
ch_PP-OCRv4_det_mobile.onnxch_PP-OCRv4_rec_mobile.onnxch_ppocr_mobile_v2.0_cls_mobile.onnx
Most takođe zahteva %WINDIR%\Fonts\arial.ttf za RapidOCR kontejner rezultata, onemogućava automatska preuzimanja i koristi jednu ONNX nit po konfigurisanom izvršnom bazenu; nedostajući modeli, paketi ili lokalni font uzrokuju neuspeh prepoznavanja
Trenutni most koristi konfiguraciju modela za pojednostavljeni kineski i čuva prepoznatu interpunkciju bez zamene fullwidth ili halfwidth oblicima
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 fabrike validiraju postojeće putanje izvršne datoteke i podataka i prihvataju tajmaut od 1 do 3,600,000 milisekundi, podrazumevano 60,000; neispravna konfiguracija podiže EArgumentException
Zajednički adapter pokreće skriveni lokalni proces sa citiranim putanjama i ograničenim nasleđenim handlovima, proverava otkazivanje, tajmaut i veličine izlaza na svakih 25 milisekundi i prekida proces pri neuspehu pre čišćenja privremenih datoteka
TSV izlaz je ograničen na 64 MiB a izlaz dijagnostičke datoteke na 1 MiB, uz vraćenu dijagnostiku odsečenu na 4,096 znakova; prepoznate reči takođe moraju stati u budžet reči i UTF-16 zahteva i ispravne granice bitmape
TSV izlaz prepoznavanja mora biti ispravan UTF-8 bez NUL bajtova i C0/C1 kontrolnih znakova unutar prepoznatih reči; neispravan izlaz obara ceo zahtev za prepoznavanje, čak i kada se ispred greške nalaze ispravne reči
Ovo su ograničenja izlaza i zahteva, a ne čvrsta granica upotrebe memorije spoljašnjeg engine-a; otkazivanje i neuspesi engine-a vraćaju se kroz status tekst-sloja bez objavljivanja delimičnih stranica
Dokazi i ograničenja prepoznavanja
Lokalni RapidOCR 3.8.4 baseline prošao je svih 15 ponavljanja kroz pet fiksnih kineskih sken regiona: dva jasna regiona na 300 DPI i tri regiona pritiska niske rezolucije na 150 DPI, evaluirano prema tekućim referentnim transkriptima sa stopom greške znakova najviše 5% i stopom brisanja najviše 2%
Sva ponavljanja prošla su provere redosleda čitanja, ukupno 5,190 koordinatnih provera reči ili znakova i jednakost vidljivih piksela na 72 DPI; dva jasna regiona imala su nula grešaka znakova prema tim referencama
Dve AI vizuelne recenzije se slažu oko kineskog teksta i brojeva, ali neke kodne tačke interpunkcije u rasteru ostaju dvosmislene i ljudska presuda je u toku; razlike u interpunkciji i dalje se računaju kao greške i ovi rezultati su dokaz iz korpusa, a ne opšta garancija tačnosti
Geometrija i tekst pretrage
HotPDF invertuje transformaciju stranice renderiranja tako osnovne linije reči ostaju poravnate na stranicama rotiranim za 0, 90, 180 ili 270 stepeni
Svaka prihvaćena reč se upisuje sa režimom renderiranja teksta 3 Tr, prilagođenom horizontalnom razmerom teksta i matricom teksta svesnom rotacije, ostavljajući raster stranice nepromenjen uz očuvanje redosleda sadržaja koji se može selektovati
Deljeni Type 0 Identity-H font dodeljuje ograničene CID-ove lokalne za dokument Unicode skalarima i upisuje potpunu ToUnicode mapu, uključujući UTF-16 surogat cilišta za dopunske znake
Susedne latinične i ćiriličke reči na istoj osnovnoj liniji dobijaju eksplicitan Unicode razmak kada njihova geometrija ukazuje na prazninu između reči; susedne CJK reči zadržavaju svoj originalni tekst bez ubačenih razmaka
Obrada skeniranog PDF-a
Console primer Demo/Delphi/SearchableOCR/SearchableOCR.dpr učitava skenirani PDF, pokreće nativni RapidOCR sa eksplicitnim lokalnim jezičkim profilom, objavljuje nevidljivi Unicode tekst na svim podobnim stranicama i čuva novi PDF bez otvaranja pregledača
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
Koristite --language ch za pojednostavljeni kineski ili --language chinese_cht za tradicionalni kineski; DLL mora da odgovara arhitekturi izvršne datoteke, a izabrani lokalni paket modela mora biti instaliran
Primer odbija da prepiše postojeću izlaznu datoteku i prihvata --replace-ocr pri ažuriranju označenog HotPDF OCR sloja
Windows FPC JPEG dekodiranje skenova crta u konačni piksel format bitmape pre prepoznavanja tako da LCL konverzija formata zadržava dekodovanu sliku
Ažuriranje postojećeg OCR sloja
Postavite THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer na True da zamenite ranije generisane, označene HotPDF OCR tokove na prepoznatim stranicama u istoj transakciji kao novi tekst
Ovo zaobilazi SkipPagesWithText samo na označenim stranicama i radi nakon čuvanja i ponovnog učitavanja; THPDFOCRTextLayerInfo.ReplacedPageCount prijavljuje broj zamenjenih stranica
Neuspesi prepoznavanja i stranice bez prihvaćenih reči čuvaju stari tekstualni sloj; neoznačeni tokovi, uključujući OCR trećih strana i slojeve generisane ranijim HotPDF izdanjima, čuvaju se
Zamena otkačuje stare OCR tokove sadržaja, ali ne uklanja resurse fontova niti grupe opcionog sadržaja na koje se drugde još može referencirati; inkrementalno čuvanje može da zadrži zamenjene objekte iz prethodnih revizija
Podrazumevano se preskače svaka stranica sa izvodljivim tekstom, uključujući broj stranice ili zaglavlje iznad skena; isključivanje SkipPagesWithText prepoznaje celu stranicu i može da udvostruči postojeći nativni tekst, pa mešovite stranice zahtevaju obradu koju bira aplikacija
Granice, otkazivanje i atomičnost
THPDFOCRTextLayerOptions.Default omogućava prepoznavanje od 300 DPI, preskače stranice koje već izlažu tekst i ograničava broj stranica, piksela, reči, UTF-16 jedinica i generisanih bajtova sadržaja
HotPDF proverava svaki rezultat motora i gradi sav sadržaj stranice pre nego što započne jednu copy-on-write transakciju grafa, tako neuspeh motora, neispravna geometrija, iscrpljeni budžeti, otkazivanje ili greške potvrde ostavljaju učitani graf objekata nepromenjen
Prazan niz indeksa stranica bira svaku učitanu stranicu, dok se duplikati indeksa stranica prepoznaju jednom u redosledu prvog pojavljivanja
MaxTotalWords broji sve primljene reči, uključujući reči niske pouzdanosti ili neispravne reči koje se kasnije odbacuju, a svaki zahtev za stranicu dobija samo preostali iznos
Ako se budžet reči ili UTF-16 jedinica iscrpi a ostaje još neka podobna stranica, obrada vraća otlsBudgetExceeded pre renderovanja ili prepoznavanja te stranice i ne objavljuje nijedan planirani tekstualni sloj; stranice preskočene zbog postojećeg teksta ne zahtevaju preostali budžet prepoznavanja
Grupisanje opcionog sadržaja
Postavite UseOptionalContentGroup da povežete svaki generisani tekst sa jednim imenovanim slojem kroz rečnik Resources/Properties svake stranice
Ova opcija zahteva PDF 1.5 i prati StrictVersionLock; podrazumevano zadržava nevidljivi tekst izvan grupe opcionog sadržaja za najširu kompatibilnost
Napomena o usaglašenosti
Generisani sloj za pretragu namerno koristi font sintetički neupotrebljen jer režim renderiranja 3 nikada ne boji glifove
Ovaj API sam po sebi ne proizvodi OCR izlaz usklađen sa PDF/A, tako tok rada PDF/A treba da koristi put sloja teksta sa ugrađenim fontom i pokrene zahtevanu proveru usaglašenosti pre objavljivanja
Primarni API
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progresivno renderiranje i otkazivanje · Metod ExtractLoadedPageText