Tesseract OCR-adapters

HPDFTesseractRecognition leverer valgfrie Windows-motorer, der implementerer IHPDFOCREngine til søgbare OCR-tekstlag

Native DLL-factory

function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
  TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
  TessDataDirectory, Language: string;
  const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;

Angiv en eksisterende Tesseract-DLL med den Tesseract 5-kompatible C-API, en tessdata-mappe og en ASCII-sprogidentifikator eller -kombination som eng, chi_sim eller chi_sim+eng

Bibliotekets arkitektur skal matche applikationen: en Win32-applikation indlæser en 32-bit DLL, mens en Win64-applikation indlæser en 64-bit DLL

Placér påkrævede afhængigheds-DLL'er ved siden af den valgte biblioteksfil eller i standard Windows loader-mapper; adapteren indlæser den eksplicitte bibliotekssti uden at ændre current directory eller processøgestien

Factoryen verificerer hver anmodet .traineddata-fil, indlæser biblioteket og opløser de påkrævede eksports, før den returnerer; ugyldige stier, modeller eller options, manglende eksports, arkitekturmismatch og utilgængelige afhængigheder udløser en exception

Ingen OCR-runtime eller modeller følger med eller downloades automatisk

Begge factories er tilgængelige i Windows FPC/Lazarus-pakken såvel som i Delphi- og C++Builder-builds; byg Lib/FPC/HotPDFLaz.lpk om for målarkitekturen, før du bruger HPDFTesseractRecognition

Den native FPC-adapter læser det aktuelle LCL raw image, inklusive pixels skrevet gennem scanlines, og bevarer Unicode-ord uafhængigt af systemets ANSI-kodeside

Options

THPDFTesseractOptions = record
  PageSegMode: THPDFTesseractPageSegMode;
  EngineMode: THPDFTesseractEngineMode;
  TimeoutMilliseconds: Cardinal;
  MaxPixels: Integer;
  class function Default: THPDFTesseractOptions; static;
end;

Kald THPDFTesseractOptions.Default, før du tilsidesætter felter; samme record kan konfigurere native DLL-factoryen eller den lokale CLI-options-overload

FeltStandardBetydning
PageSegModetpsAutoAutomatisk page segmentation uden orienteringsdetektion
EngineModetemDefaultDen engine mode, som de valgte sprogmodeller understøtter
TimeoutMilliseconds60000En forespørgselsdeadline fra 1 til 3.600.000 millisekunder; DLL'en koopererer med annullering, mens CLI-workeren termineres ved timeout
MaxPixels16777216Input-pixelbudgettet, konfigurerbart fra 1 til 67.108.864 pixels
THPDFTesseractPageSegMode = (
  tpsOSDOnly, tpsAutoOSD, tpsAutoOnly, tpsAuto, tpsSingleColumn,
  tpsSingleBlockVertical, tpsSingleBlock, tpsSingleLine, tpsSingleWord,
  tpsCircleWord, tpsSingleCharacter, tpsSparseText, tpsSparseTextOSD,
  tpsRawLine);
THPDFTesseractEngineMode = (
  temLegacyOnly, temLSTMOnly, temLegacyAndLSTM, temDefault);

tpsOSDOnly og tpsAutoOnly udfører ingen ordgenkendelse og afvises af adapteren; tpsAutoOSD og tpsSparseTextOSD kræver desuden osd.traineddata

Brug tpsSingleLine til én tekstlinje, tpsSingleBlock til en ensartet blok eller tpsSparseText til spredt tekst; disse modes reparerer ikke en scans perspektiv og giver ingen generel layoutgaranti

temLSTMOnly kræver LSTM-modeller, mens legacy-modes kræver tilsvarende legacy-modekomponenter; ikke-understøttede kombinationer fejler under native initialisering

Eksempel på søgbar PDF

PDF'en skal allerede være indlæst, og DLL, afhængigheder og sprogmodeller skal være installeret på de viste stier

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;

Resultater og ejerskab

Adapteren kopierer den lånte bitmap til en top-down gråtonebuffer, videresender forespørgslens DPI og genkender gennem en forespørgsels-lokal native API-instans

Ord bevarer native læseorden, valideret UTF-8 Unicode-tekst, pixelgrænser med oprindelse øverst til venstre og confidence skaleret fra 0 til 100 ned i 0 til 1; supplerende tegn bruger to UTF-16-enheder

Tilgængelige ord-baselinjer videregives med begge endepunkter; når en baseline mangler, anvendes tekstlagets eksisterende geometri-fallback

Ved en overvejende lodret baseline bruger den native adapter ordets boksbredde som TextHeightPixels; vandrette baselinjer bruger boksens højde, også ved omvendte læseretninger, så et lodret ords længde ikke bliver dets fontstørrelse

Dette er et estimat langs den dominerende akse: en aksejusteret ord-boks og baseline alene kan ikke gendanne den præcise texthøjde ved vilkårlige skævvinkler

En tom side lykkes med et tomt ord-array; misdannet UTF-8, indlejrede kontroltegn, ugyldig geometri eller confidence, opbrugte ord- eller tekstbudgetter, annullering og genkendelsesfejl returnerer False, rydder alle delvise ord og udfylder diagnostikken

Hver forespørgsel frigiver sin iterator, allokerede native strenge, monitor og API-instans; at adapteren frigives aflæsser dens biblioteksreference

Grænser og annullering

Inputdimensionerne må højst være 32.767 pixels hver og skal være inden for MaxPixels; genkendt tekst skal være inden for forespørgslens MaxTextCodeUnits-budget og adapterens grænse på 1.048.576 UTF-16-enheder, og ordantallet skal være inden for MaxWords

Adapteren tjekker annullering og forløbet tid under bitmap-konvertering og resultatiteration og leverer en native monitor med resterende deadline og et annullerings-callback under genkendelsen

Native annullering er kooperativ: Tesseracts monitor dækker ordgenkendelse og afbryder ikke hvert initialiserings- eller layoutanalysetrin; disse kald kan nå at færdige, før en ønsket annullering eller udløbet deadline rapporteres

Pixel- og outputbudgetter pålægger ikke en hård grænse for det native biblioteks model- eller genkendelseshukommelse; brug procesadapteren, når applikationen behøver en separat, terminerbar worker

ApplyLoadedOCRTextLayer validerer alle resultater og publicerer hver valgt side atomært, så en adapterfejl efterlader det indlæste dokument uændret

DLL-adapteren afviser ugyldig UTF-8, trimmer dekodet ordtekst og afviser resterende C0-, DEL- og C1-kontroltegn, før resultaterne returneres, så misdannet tekst fejler forespørgslen i stedet for at blive tavs udeladt af PDF-tekstlaget

Lokal CLI-factory

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-overloaden videresender PageSegMode som --psm og EngineMode som --oem, bruger den konfigurerede timeout og kontrollerer MaxPixels, inden den lånte bitmap gemmes eller en worker startes

Den eksisterende timeout-overload bevarer automatisk page segmentation og den eksekverbare fils valg af engine mode uden at pålægge en ny adapter-pixelgrænse; brug options-overloaden, når der kræves en eksplicit inputgrænse

Begge overloads bevarer ønsket DPI, TSV-output, begrænsede nedarvede handles, annulleringspolling og worker-terminering ved fejl; CLI'en har ingen native baseline-information, begrænser TSV-output til 64 MiB og diagnostikfil-output til 1 MiB

Ugyldige segmentation-modes, engine modes, timeouts og pixelgrænser udløser EArgumentException ved oprettelse af den konfigurerede motor; modeltilgængelighed, inklusive osd.traineddata til orienterings-modes, og model/engine-kompatibilitet kontrolleres af den eksekverbare fil under genkendelsen

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;

Brug tpsSingleWord til et isoleret ord, tpsSparseText til spredt tekst eller tpsSingleBlockVertical med en passende lodrettekst-model til én lodret blok; factoryen beskærer ikke sider og vælger ikke modeller automatisk

CLI-adapteren validerer UTF-8 strengt, afviser NUL-bytes og C0/C1-kontroltegn inde i genkendte ord og rydder alle resultater, hvis misdannet output følger et ellers gyldigt ord

Se søgbare OCR-tekstlag for CLI-eksemplet, renderingsvalg, optional-content-gruppering og konformitetsgrænser