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

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 300

Koristite --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

Progressive Rendering and Cancellation · ExtractLoadedPageText Method