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

PoljeZadanoZnačenje
PageSegModetpsAutoAutomatska segmentacija stranice bez detekcije orijentacije
EngineModetemDefaultNačin motora koji podržavaju odabrani jezični modeli
TimeoutMilliseconds60000Rok zahtjeva od 1 do 3.600.000 milisekundi; DLL surađuje s otkazivanjem, dok se CLI radnik terminira pri isteku roka
MaxPixels16777216Prorač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