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
| Felt | Standard | Betydning |
|---|---|---|
PageSegMode | tpsAuto | Automatisk page segmentation uden orienteringsdetektion |
EngineMode | temDefault | Den engine mode, som de valgte sprogmodeller understøtter |
TimeoutMilliseconds | 60000 | En forespørgselsdeadline fra 1 til 3.600.000 millisekunder; DLL'en koopererer med annullering, mens CLI-workeren termineres ved timeout |
MaxPixels | 16777216 | Input-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