Tesseract OCR adapteri
HPDFTesseractRecognition pruža neobavezne Windows motore koji implementiraju IHPDFOCREngine za pretražive OCR tekstualne slojeve
Tvornica nativne DLL datoteke
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Dostavite postojeću Tesseract DLL datoteku koja izlaže Tesseract 5 kompatibilan C API, tessdata direktorij te ASCII identifikator jezika ili kombinaciju poput eng, chi_sim ili chi_sim+eng
Arhitektura knjižnice mora odgovarati aplikaciji: Win32 aplikacija učitava 32-bitni DLL, a Win64 aplikacija 64-bitni DLL
Potrebne ovisne DLL datoteke držite pored odabrane knjižnice ili u standardnim direktorijima Windows učitavača; adapter učitava izričitu putanju knjižnice bez mijenjanja trenutnog direktorija ili procesne putanje pretraživanja
Tvornica provjerava svaku zatraženu .traineddata datoteku, učitava knjižnicu i razrješuje potrebne izvoze prije povratka; nevažeće putanje, modeli ili opcije, nedostajući izvozi, nepodudarne arhitekture i nedostupne ovisnosti podižu iznimku
Nijedan OCR runtime ni modeli ne isporučuju se uz paket niti se preuzimaju automatski
Obje tvornice dostupne su i u Windows FPC/Lazarus paketu uz Delphi i C++Builder izvedbe; ponovno izgradite Lib/FPC/HotPDFLaz.lpk za ciljnu arhitekturu prije upotrebe HPDFTesseractRecognition-a
Nativni FPC adapter čita trenutnu LCL sirovu sliku, uključujući piksele zapisane kroz scanline-ove, te čuva Unicode riječi neovisno o sistemskoj ANSI kodnoj stranici
Opcije
THPDFTesseractOptions = record
PageSegMode: THPDFTesseractPageSegMode;
EngineMode: THPDFTesseractEngineMode;
TimeoutMilliseconds: Cardinal;
MaxPixels: Integer;
class function Default: THPDFTesseractOptions; static;
end;
Pozovite THPDFTesseractOptions.Default prije nadjačavanja polja; isti zapis može konfigurirati tvornicu nativne DLL datoteke ili lokalno preopterećenje CLI opcija
| Polje | Zadano | Značenje |
|---|---|---|
PageSegMode | tpsAuto | Automatska segmentacija stranice bez detekcije orijentacije |
EngineMode | temDefault | Način motora koji podržavaju odabrani jezični modeli |
TimeoutMilliseconds | 60000 | Rok zahtjeva od 1 do 3.600.000 milisekundi; DLL surađuje s otkazivanjem, dok se CLI radnik terminira pri isteku roka |
MaxPixels | 16777216 | Proračun ulaznih piksela, podesiv od 1 do 67.108.864 piksela |
THPDFTesseractPageSegMode = (
tpsOSDOnly, tpsAutoOSD, tpsAutoOnly, tpsAuto, tpsSingleColumn,
tpsSingleBlockVertical, tpsSingleBlock, tpsSingleLine, tpsSingleWord,
tpsCircleWord, tpsSingleCharacter, tpsSparseText, tpsSparseTextOSD,
tpsRawLine);
THPDFTesseractEngineMode = (
temLegacyOnly, temLSTMOnly, temLegacyAndLSTM, temDefault);
tpsOSDOnly i tpsAutoOnly ne izvode prepoznavanje riječi i adapter ih odbija; tpsAutoOSD i tpsSparseTextOSD dodatno zahtijevaju osd.traineddata
Koristite tpsSingleLine za jedan redak teksta, tpsSingleBlock za jednolik blok ili tpsSparseText za raspršeni tekst; ti načini ne ispravljaju perspektivu skena i ne daju opću garanciju rasporeda
temLSTMOnly zahtijeva LSTM modele, dok naslijeđeni načini zahtijevaju odgovarajuće komponente naslijeđenih modela; nepodržane kombinacije obaraju nativnu inicijalizaciju
Primjer pretraživog PDF-a
PDF mora već biti učitan, a DLL, ovisnosti i jezični modeli moraju biti instalirani na prikazanim lokacijama
uses SysUtils, HPDFDoc, HPDFTesseractRecognition;
procedure AddNativeOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
NativeOptions: THPDFTesseractOptions;
LayerOptions: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
NativeOptions := THPDFTesseractOptions.Default;
NativeOptions.EngineMode := temLSTMOnly;
NativeOptions.PageSegMode := tpsAuto;
Engine := HPDFCreateTesseractDLLOCREngine(
'C:\OCR\libtesseract-5.dll', 'C:\OCR\tessdata',
'chi_sim+eng', NativeOptions);
LayerOptions := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, LayerOptions, Info) then
raise Exception.Create(string(Info.Diagnostic));
end;
Rezultati i vlasništvo
Adapter kopira posuđeni bitmap u međuspremnik u sivim tonovima od vrha prema dnu, prosljeđuje zatraženi DPI i prepoznaje kroz instancu nativnog API-ja vezanu uz zahtjev
Riječi zadržavaju nativni redoslijed čitanja, validirani UTF-8 Unicode tekst, pikselne granice od vrha-lijevo te pouzdanost skaliranu iz raspona 0–100 u raspon 0–1; dopunski znakovi troše dvije UTF-16 jedinice
Dostupne osnovne linije riječi prosljeđuju se s oba krajiška; kada osnovna linija nije dostupna, primjenjuje se postojeća geometrijska pričuva tekstualnog sloja
Za pretežno okomitu osnovnu liniju nativni adapter koristi širinu okvira riječi kao TextHeightPixels; horizontalne osnovne linije koriste visinu okvira, uključujući obrnute smjerove čitanja, tako da duljina okomite riječi ne postaje njena veličina fonta
Ovo je procjena dominantne osi: okvir riječi i osnovna linija poravnati s osima sami ne mogu vratiti točnu visinu teksta pod proizvoljnim kutovima nagiba
Prazna stranica uspijeva s praznim poljem riječi; deformirani UTF-8, ugrađeni kontrolni znakovi, nevažeća geometrija ili pouzdanost, iscrpljeni proračuni riječi ili teksta, otkazivanje i neuspjesi prepoznavanja vraćaju False, brišu sve djelomične riječi i popunjavaju dijagnostiku
Svaki zahtjev otpušta svoj iterator, alocirane nativne nizove, monitor i instancu API-ja; otpuštanje adaptera istovara referencu na njegovu knjižnicu
Ograničenja i otkazivanje
Ulazne dimenzije moraju svaka biti najviše 32.767 piksela i stati u MaxPixels; prepoznati tekst mora stati u proračun MaxTextCodeUnits zahtjeva i adapterovo ograničenje od 1.048.576 UTF-16 jedinica, a broj riječi mora stati u MaxWords
Adapter provjerava otkazivanje i proteklo vrijeme tijekom konverzije bitmape i iteracije rezultata te dostavlja nativni monitor s preostalim rokom i callbackom otkazivanja tijekom prepoznavanja
Nativno otkazivanje je suradno: Tesseractov monitor pokriva prepoznavanje riječi i ne prekida svaki korak inicijalizacije ni analize rasporeda; ti pozivi mogu završiti prije nego što se prijavi zatraženo otkazivanje ili istekli rok
Pikselni i izlazni proračuni ne nameću čvrsto ograničenje potrošnji memorije modela ni prepoznavanja nativne knjižnice; koristite procesni adapter kada aplikaciji treba radnik kojeg se može zasebno terminirati
ApplyLoadedOCRTextLayer validira sve rezultate i atomski objavljuje svaku odabranu stranicu, pa kvar adaptera učitani dokument ostavlja nepromijenjenim
Adapter DLL datoteke odbija nevažeći UTF-8, odrezuje dekodirani tekst riječi i prije vraćanja rezultata odbija preostale C0, DEL i C1 kontrolne znakove, pa deformirani tekst obara zahtjev umjesto da ga tekstualni sloj PDF-a nečujno izostavi
Lokalna CLI tvornica
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Preopterećenje s opcijama prosljeđuje PageSegMode kao --psm i EngineMode kao --oem, koristi konfigurirano vremensko ograničenje i provjerava MaxPixels prije spremanja posuđenog bitmape ili pokretanja radnika
Postojeće preopterećenje s vremenskim ograničenjem čuva automatsku segmentaciju stranice i način motora odabran izvršnom datotekom, bez namećanja novog adapterovog ograničenja piksela; koristite preopterećenje s opcijama kada je potrebno eksplicitno ograničenje ulaza
Oba preopterećenja zadržavaju zatraženi DPI, TSV izlaz, ograničene naslijeđene ručke, provjeru otkazivanja i terminaciju radnika pri neuspjehu; CLI nema nativnih informacija o osnovnim linijama, ograničava TSV izlaz na 64 MiB, a izlaz dijagnostičke datoteke na 1 MiB
Nevažeći načini segmentacije, načini motora, vremenska ograničenja i ograničenja piksela podižu EArgumentException prilikom stvaranja konfiguriranog motora; dostupnost modela, uključujući osd.traineddata za načine orijentacije, te kompatibilnost modela i motora provjerava izvršna datoteka tijekom prepoznavanja
var
CLIOptions: THPDFTesseractOptions;
Engine: IHPDFOCREngine;
begin
CLIOptions := THPDFTesseractOptions.Default;
CLIOptions.PageSegMode := tpsSingleLine;
CLIOptions.EngineMode := temLSTMOnly;
CLIOptions.MaxPixels := 8000000;
Engine := HPDFCreateTesseractOCREngine(
'C:\OCR\tesseract.exe', 'C:\OCR\tessdata', 'eng', CLIOptions);
end;
Koristite tpsSingleWord za izoliranu riječ, tpsSparseText za raspršeni tekst ili tpsSingleBlockVertical s odgovarajućim modelom okomitog teksta za jedan vertikalni blok; tvornica ne obrezuje stranice ni ne odabire modele automatski
CLI adapter strogo validira UTF-8, odbija NUL bajtove te C0/C1 kontrolne znakove unutar prepoznatih riječi i briše sve rezultate ako neispravan izlaz slijedi nakon inače valjane riječi
Vidi Searchable OCR Text Layers za CLI primjer, opcije renderiranja, grupiranje neobaveznog sadržaja i granice usklađenosti