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

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

Progresivno renderiranje i otkazivanje · Metod ExtractLoadedPageText