Searchable OCR Text Layers
HotPDF može renderirati odabrane učitane stranice za OCR motor kojeg dostavlja aplikacija i atomski dodati pretraživ, nevidljiv Unicode tekst poravnat sa svakom prepoznatom riječi
SearchableOCR konzolni primjer nudi tijek rada koji možete pokrenuti: generirajte trostranični uzorak samo sa slikama s --create-sample, odaberite ugrađeni OCR, RapidOCR ili Tesseract DLL/CLI prepoznavanje, odaberite stranice, konfigurirajte pouzdanost i ograničenja resursa te spremite pretraživu kopiju sa statistikom konverzije
Integracija mehanizma
Implementirajte IHPDFOCREngine s bilo kojim sinkronim OCR davateljem dostupnim aplikaciji
Motor prima posuđeni TBitmap, zatraženi DPI, normaliziranu rotaciju stranice, koordinate media boxa, preostale proračune riječi i UTF-16 jedinica te učinkoviti token otkazivanja kroz THPDFOCRRequest
Okviri riječi i neobavezne bazne linije koriste pikselne koordinate bitmape od gore-lijevo, a motor ne smije zadržati ni osloboditi posuđeni bitmap nakon što se Recognize vrati
Neobavezni lokalni mehanizmi
Verzija 2.754.0 dodaje eksplicitne Tesseract i RapidOCR tvornice koje vraćaju IHPDFOCREngine na Windowsu; preopterećenje bez motora i dalje bira postojeći ugrađeni motor
Instalirajte i osigurajte odabrani motor lokalno prije stvaranja njegova adaptera, a zatim proslijedite taj adapter preopterećenju motora ApplyLoadedOCRTextLayer-a; izvršne datoteke, Python paketi i OCR modeli neobavezne su vanjske ovisnosti i ne isporučuju se s HotPDF-om
Tesseract
Neobavezni adapter nativne Tesseract DLL datoteke dodaje konfigurabilnu segmentaciju stranica i načine motora, višejezično prepoznavanje i nativne osnovne linije riječ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-u; osigurajte Tesseract izvršnu datoteku sposobnu za TSV izlaz i podatkovni direktorij koji sadrži zatraženi jezični model, poput chi_sim.traineddata za chi_sim
Preopterećenje s opcijama prihvaća THPDFTesseractOptions.Default s eksplicitnom segmentacijom stranice, načinom motora prepoznavanja, vremenskim ograničenjem i ograničenjem ulaznih piksela; odaberite tpsSingleLine, tpsSingleWord ili tpsSparseText prema rasporedu ulaza, kao u Tesseract OCR adapterima
Ovaj primjer pretpostavlja da su izvršna datoteka i podaci već instalirani na prikazanim putanjama i da je PDF učitana instanca THotPDF-a
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
Adapter nativne RapidOCR DLL datoteke prepoznaje snimke memorije s trajnim CPU ONNX modelima unutar procesa kroz HPDFCreateRapidOCRDLLOCREngine, uz neobaveznu klasifikaciju kuta i suradno otkazivanje u Delphi, C++Builder i Windows FPC/Lazarus izvedbama
Adapter lokalnih RapidOCR modela također nudi preopterećenje s THPDFRapidOCROptions za eksplicitne putanje ONNX modela, neobaveznu klasifikaciju kuta, lokalne rječnike znakova i fontove, ograničenja CPU niti i proračun ulaznih piksela u Delphi, C++Builder i FPC/Lazarus izvedbama
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;Deklaracija je u HPDFRapidOCRRecognition-u; osigurajte Python s rapidocr i onnxruntime-om, dostavljeni most tools/OCR/rapidocr_tsv.py 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đer zahtijeva %WINDIR%\Fonts\arial.ttf za RapidOCRov spremnik rezultata, onemogućuje automatska preuzimanja i koristi jednu ONNX nit po konfiguriranom izvedbenom bazenu; nedostajući modeli, paketi ili lokalni font uzrokuju pad prepoznavanja
Trenutni most koristi konfiguraciju modela pojednostavljenog kineskog i čuva prepoznatu interpunkciju bez zamjene punoširnih ili poluširnih znakova
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;Obje tvornice validiraju postojeće putanje izvršnih datoteka i podataka te prihvaćaju vremensko ograničenje od 1 do 3.600.000 milisekundi, sa zadanih 60.000; nevažeća konfiguracija diže EArgumentException
Zajednički adapter pokreće skriveni lokalni proces s citiranim putanjama i ograničenim naslijeđenim ručicama, anketira otkazivanje, vremensko ograničenje i veličine izlaza svakih 25 milisekundi i terminira proces pri neuspjehu prije čišćenja privremenih datoteka
TSV izlaz ograničen je na 64 MiB, a izlaz dijagnostičkih datoteka na 1 MiB, s vraćenom dijagnostikom skraćenom na 4.096 znakova; prepoznate riječi također moraju stati u proračune riječi i UTF-16 jedinica zahtjeva i valjane granice bitmape
TSV izlaz prepoznavanja mora biti valjan UTF-8 i ne smije sadržavati NUL bajtove ni C0/C1 kontrolne znakove unutar prepoznatih riječi; neispravan izlaz propušta cijeli zahtjev prepoznavanja čak i kada valjane riječi prethode pogrešci
To su ograničenja izlaza i zahtjeva, ne čvrsti strop memorije vanjskog motora; otkazivanje i neuspjesi motora vraćaju se kroz status tekstualnog sloja bez objavljivanja djelomičnih stranica
Dokazi prepoznavanja i ograničenja
Lokalna RapidOCR 3.8.4 baza prošla je svih 15 ponavljanja kroz pet fiksnih kineskih regija skeniranja: dvije čiste regije na 300 DPI i tri niskorazlučive pritisne regije na 150 DPI, vrednovano naspram trenutnih referentnih transkripata s pogreškom znakova najviše 5% i stopom brisanja najviše 2%
Sva ponavljanja prošla su provjere redoslijeda čitanja, ukupno 5.190 provjera koordinata riječi ili znakova i jednakost vidljivih piksela na 72 DPI; dvije čiste regije imale su nula pogrešaka znakova naspram tih referenci
Dva AI vizualna pregleda slažu se oko kineskog teksta i brojeva, ali neke kodne točke interpunkcije u rasteru ostaju dvosmislene i ljudska presuda je u tijeku; razlike interpunkcije i dalje se računaju kao greške, a ovi rezultati su dokazi korpusa, ne opća garancija točnosti
Geometrija i tekst za pretraživanje
HotPDF invertira transformaciju stranice renderera tako da bazne linije riječi ostaju poravnate na stranicama rotiranim za 0, 90, 180 ili 270 stupnjeva
Svaka prihvaćena riječ piše se s načinom renderiranja teksta 3 Tr-om, prilagođenim horizontalnim mjerilom teksta i matricom teksta svjesnom rotacije, ostavljajući raster stranice nepromijenjenim uz očuvanje odabirljivog redoslijeda sadržaja
Zajednički font Type 0 Identity-H dodjeljuje ograničene CID-ove lokalne za dokument Unicode skalarima i piše potpunu ToUnicode mapu, uključujući UTF-16 surrogate ciljeve za dopunske znakove
Susjedne latinične i ćirilične riječi na istoj osnovnoj liniji primaju izričit Unicode razmak kada njihova geometrija ukazuje na prazninu između riječi; susjedne CJK riječi zadržavaju izvorni tekst bez umetnutih razmaka
Obrada skeniranog PDF-a
Konzolni primjer Demo/Delphi/SearchableOCR/SearchableOCR.dpr učitava skenirani PDF, pokreće nativni RapidOCR s izričitim lokalnim jezičnim profilom, objavljuje nevidljivi Unicode tekst na svim podobrim stranicama i sprema novi PDF bez otvaranja preglednika
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 300Koristite --language ch za pojednostavljeni kineski ili --language chinese_cht za tradicionalni kineski; DLL mora odgovarati arhitekturi izvršne datoteke, a odabrani lokalni paket modela mora biti instaliran
Primjer odbija prepisati postojeću izlaznu datoteku i prihvaća --replace-ocr pri ažuriranju označenog HotPDF OCR sloja
Dekodiranje JPEG skena u Windows FPC-u crta u konačni pikselni format bitmape prije prepoznavanja tako da LCL konverzija formata zadrži dekodiranu sliku
Ažuriranje postojećeg OCR sloja
Postavite THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer na True da zamijenite ranije generirane, označene HotPDF OCR tokove na prepoznatim stranicama u istoj transakciji kao novi tekst
To zaobilazi SkipPagesWithText samo na označenim stranicama i radi nakon spremanja i ponovnog učitavanja; THPDFOCRTextLayerInfo.ReplacedPageCount izvještava broj zamijenjenih stranica
Neuspjesi prepoznavanja i stranice bez prihvaćenih riječi čuvaju stari tekstualni sloj; neoznačeni tokovi, uključujući OCR trećih strana i slojeve generirane ranijim izdanjima HotPDF-a, ostaju sačuvani
Zamjena odvezuje stare tokove OCR sadržaja, ali ne uklanja resurse fontova ni grupe neobaveznog sadržaja na koje se još negdje referencira; inkrementalno spremanje može zadržati zamijenjene objekte iz prethodnih revizija
Zadano ponašanje i dalje preskače svaku stranicu s izdvojivim tekstom, uključujući broj stranice ili zaglavlje preko skena; isključivanje SkipPagesWithText-a prepoznaje cijelu stranicu i može duplicirati postojeći nativni tekst, pa miješane stranice zahtijevaju obradu koju bira aplikacija
Granice, otkazivanje i atomičnost
THPDFOCRTextLayerOptions.Default omogućuje prepoznavanje na 300 DPI, preskače stranice koje već izlažu tekst i ograničava broj stranica, piksela, riječi, UTF-16 jedinica i generiranih bajtova sadržaja
HotPDF validira svaki rezultat motora i gradi sav sadržaj stranica prije pokretanja jedne copy-on-write transakcije grafa, tako da neuspjesi motora, nevažeća geometrija, iscrpljeni proračuni, otkazivanje ili greške predaje ostavljaju učitani graf objekata nepromijenjenim
Prazno polje indeksa stranica odabire sve učitane stranice, dok se duplicirani indeksi stranica prepoznaju jednom, u redoslijedu prvog pojavljivanja
MaxTotalWords broji sve primljene riječi, uključujući riječi niske pouzdanosti ili nevažeće riječi koje se kasnije odbacuju, a svaki zahtjev stranice prima samo preostali dopušteni broj
Ako se proračun riječi ili UTF-16 jedinica iscrpi a ostaje još jedna podobna stranica, obrada vraća otlsBudgetExceeded prije renderiranja ili prepoznavanja te stranice i ne objavljuje nijedan planirani tekstualni sloj; stranice preskočene zbog postojećeg teksta ne zahtijevaju preostali proračun prepoznavanja
Grupiranje neobaveznog sadržaja
Postavite UseOptionalContentGroup da svežete sav generirani tekst na jedan imenovani sloj kroz rječnik Resources/Properties svake stranice
Ova opcija zahtijeva PDF 1.5 i slijedi StrictVersionLock; zadana vrijednost drži nevidljivi tekst izvan grupe neobaveznog sadržaja radi najšire kompatibilnosti
Napomena o usklađenosti
Generirani pretraživi sloj namjerno koristi neugrađen sintetički font jer način renderiranja 3 nikad ne boja glife
Ovaj API sam po sebi ne proizvodi PDF/A sukladni OCR izlaz, pa PDF/A tijek rada treba koristiti put tekstualnog sloja s ugrađenim fontom i izvršiti zatraženu validaciju sukladnosti prije objavljivanja
Primarni API-ji
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progressive Rendering and Cancellation · ExtractLoadedPageText Method