Tesseract OCR adapteri
HPDFTesseractRecognition obezbeđuje opcione Windows engine-e koji implementiraju IHPDFOCREngine za OCR tekstualne slojeve koji se mogu pretraživati
Fabrika nativnog DLL-a
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Dostavite postojeći Tesseract DLL koji izlaže Tesseract 5 kompatibilan C API, direktorijum tessdata i ASCII jezički identifikator ili kombinaciju poput eng, chi_sim ili chi_sim+eng
Arhitektura biblioteke mora da odgovara aplikaciji: Win32 aplikacija učitava 32-bitni DLL, dok Win64 aplikacija učitava 64-bitni DLL
Zadržite potrebne zavisne DLL-ove pored izabrane biblioteke ili u standardnim direktorijumima Windows loader-a; adapter učitava eksplicitnu putanju biblioteke bez menjanja tekućeg direktorijuma ili putanje pretrage procesa
Fabrika proverava svaku traženu .traineddata datoteku, učitava biblioteku i razrešava potrebne eksporte pre vraćanja; nevažeće putanje, modeli, opcije, nedostajući eksporti, nepodudarne arhitekture i nedostupne zavisnosti podižu izuzetak
Nijedan OCR runtime ni modeli se ne isporučuju uz biblioteku niti se automatski preuzimaju
Obe fabrike su dostupne i u Windows FPC/Lazarus paketu, pored Delphi i C++Builder buildova; ponovo izgradite Lib/FPC/HotPDFLaz.lpk za ciljnu arhitekturu pre korišćenja HPDFTesseractRecognition
Nativni FPC adapter čita trenutnu LCL sirovu sliku, uključujući piksele upisane kroz scanline, i čuva Unicode reči nezavisno od sistemske ANSI kodne strane
Opcije
THPDFTesseractOptions = record
PageSegMode: THPDFTesseractPageSegMode;
EngineMode: THPDFTesseractEngineMode;
TimeoutMilliseconds: Cardinal;
MaxPixels: Integer;
class function Default: THPDFTesseractOptions; static;
end;
Pozovite THPDFTesseractOptions.Default pre prekrivanja polja; isti zapis može da konfiguriše nativnu DLL fabriku ili lokalni CLI options overload
| Polje | Podrazumevano | Značenje |
|---|---|---|
PageSegMode | tpsAuto | Automatska segmentacija stranice bez detekcije orijentacije |
EngineMode | temDefault | Režim engine-a koji podržavaju izabrani jezički modeli |
TimeoutMilliseconds | 60000 | Rok zahteva od 1 do 3,600,000 milisekundi; DLL sarađuje sa otkazivanjem, dok se CLI radni proces prekida po isteku roka |
MaxPixels | 16777216 | Budžet ulaznih piksela, konfigurabilan 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 izvršavaju prepoznavanje reči i adapter ih odbacuje; tpsAutoOSD i tpsSparseTextOSD dodatno zahtevaju osd.traineddata
Koristite tpsSingleLine za jednu liniju teksta, tpsSingleBlock za uniforman blok ili tpsSparseText za rasut tekst; ovi režimi ne popravljaju perspektivu skena i ne daju opštu garanciju rasporeda
temLSTMOnly zahteva LSTM modele, dok legacy režimi zahtevaju odgovarajuće legacy komponente modela; nepodržane kombinacije ne uspevaju pri nativnoj inicijalizaciji
Primer PDF-a koji se može pretraživati
PDF mora već da bude učitan, a DLL, zavisnosti i jezički 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 pozajmljeni bitmap u grayscale bafer odozgo nadole, prosleđuje traženi DPI i prepoznaje kroz nativnu API instancu lokalnu za zahtev
Reči zadržavaju nativni redosled čitanja, validiran Unicode tekst, granice gornjeg levog piksela i poverenje skalirano iz opsega od 0 do 100 u opseg od 0 do 1; dopunski znakovi troše dve UTF-16 jedinice
Dostupne osnovne linije reči prosleđuju se sa oba krajišta; kada osnovna linija nije dostupna, primenjuje se postojeći geometrijski rezervni postupak tekstualnog sloja
Kod pretežno vertikalne osnovne linije nativni adapter koristi širinu okvira reči kao TextHeightPixels; horizontalne osnovne linije koriste visinu okvira, uključujući obrnute smerove čitanja, tako da dužina vertikalne reči ne postaje njena veličina fonta
Ovo je procena po dominantnoj osi: sam okvir reči poravnat po osama i osnovna linija ne mogu da rekonstruišu tačnu visinu teksta pri proizvoljnim uglovima nagiba
Prazna stranica uspeva sa praznim nizom reči; neispravan UTF-8, ugrađeni kontrolni znakovi, nevažeća geometrija ili poverenje, iscrpljeni budžeti reči ili teksta, otkazivanje i neuspesi prepoznavanja vraćaju False, brišu sve delimične reči i popunjavaju dijagnostiku
Svaki zahtev otpušta svoj iterator, alocirane nativne niske, monitor i API instancu; otpuštanje adaptera istovaruje referencu njegove biblioteke
Granice i otkazivanje
Svaka ulazna dimenzija mora biti najviše 32,767 piksela i mora stati u MaxPixels; prepoznati tekst mora da stane u budžet MaxTextCodeUnits iz zahteva i adapterov limit od 1,048,576 UTF-16 jedinica, a broj reči mora da stane u MaxWords
Adapter proverava otkazivanje i proteklo vreme tokom konverzije bitmape i iteracije rezultata, i dostavlja nativni monitor sa preostalim rokom i callback-om za otkazivanje tokom prepoznavanja
Nativno otkazivanje je kooperativno: Tesseract monitor pokriva prepoznavanje reči i ne prekida svaki korak inicijalizacije ili analize rasporeda; ovi pozivi mogu da se završe pre nego što se prijavi traženo otkazivanje ili istekli rok
Budžeti piksela i izlaza ne nameću čvrsto ograničenje upotrebi memorije modela ili prepoznavanja nativne biblioteke; koristite procesni adapter kada aplikaciji treba radni proces koji se može odvojeno prekinuti
ApplyLoadedOCRTextLayer validira sve rezultate i atomski objavljuje svaku izabranu stranicu, pa neuspeh adaptera ostavlja učitani dokument nepromenjen
DLL adapter odbacuje nevažeći UTF-8, odseca dekodirani tekst reči i odbacuje preostale C0, DEL i C1 kontrolne znakove pre vraćanja rezultata, pa neispravan tekst obara zahtev umesto da ga tekstualni sloj PDF-a neprimetno izostavi
Fabrika lokalnog CLI-ja
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Options overload prosleđuje PageSegMode kao --psm i EngineMode kao --oem, koristi podešeni tajmaut i proverava MaxPixels pre čuvanja pozajmljenog bitmapa ili pokretanja radnog procesa
Postojeći timeout overload čuva automatsku segmentaciju stranice i režim engine-a izabran od strane izvršne datoteke, bez nametanja novog limita piksela adaptera; koristite options overload kada je potreban eksplicitni limit ulaza
Oba overload-a zadržavaju traženi DPI, TSV izlaz, ograničene nasleđene handlove, proveru otkazivanja i prekid radnog procesa pri neuspehu; CLI nema nativne informacije o osnovnim linijama, ograničava TSV izlaz na 64 MiB, a izlaz dijagnostičke datoteke na 1 MiB
Neispravni režimi segmentacije, režimi engine-a, tajmauti i limiti piksela podižu EArgumentException pri kreiranju konfigurisanog engine-a; dostupnost modela, uključujući osd.traineddata za režime orijentacije, i kompatibilnost model/engine proverava izvršna datoteka tokom 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 izolovanu reč, tpsSparseText za rasut tekst ili tpsSingleBlockVertical sa odgovarajućim modelom vertikalnog teksta za jedan vertikalni blok; fabrika ne iseče stranicu niti automatski bira modele
CLI adapter strogo validira UTF-8, odbacuje NUL bajtove i C0/C1 kontrolne znakove unutar prepoznatih reči i briše sve rezultate ako neispravan izlaz sledi nakon inače ispravne reči
Pogledajte slojeve OCR teksta koji se mogu pretraživati za CLI primer, opcije renderovanja, grupisanje opcionog sadržaja i limite usaglašenosti