Tesseract OCR-adaptrar
HPDFTesseractRecognition tillhandahåller valfria Windows-motorer som implementerar IHPDFOCREngine för sökbara OCR-textlager
Nativ DLL-fabrik
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Ange en befintlig Tesseract-DLL som exponerar det Tesseract 5-kompatibla C-API:et, en tessdata-katalog och en ASCII-språkidentifierare eller kombination som eng, chi_sim eller chi_sim+eng
Biblioteksarkitekturen måste matcha applikationen: en Win32-applikation laddar en 32-bitars DLL, medan en Win64-applikation laddar en 64-bitars DLL
Lägg nödvändiga beroende-DLL:er bredvid det valda biblioteket eller i standardiserade Windows-loader-kataloger; adaptern laddar den explicita bibliotekssökvägen utan att ändra aktuell katalog eller processens dll-sökväg
Fabriken verifierar varje begärd .traineddata-fil, läser in biblioteket och löser de nödvändiga exporterna innan den returnerar; ogiltiga sökvägar, modeller, alternativ, saknade exporter, arkitekturmismatch och otillgängliga beroenden kastar ett undantag
Ingen OCR-runtime eller modeller följer med eller laddas ner automatiskt
Båda fabrikerna finns i Windows FPC/Lazarus-paketet liksom i Delphi- och C++Builder-byggen; bygg om Lib/FPC/HotPDFLaz.lpk för målarkitekturen innan HPDFTesseractRecognition används
Den nativa FPC-adaptern läser den aktuella LCL-råbilden, inklusive pixlar skrivna via skanlinjer, och bevarar Unicode-ord oberoende av systemets ANSI-kodsida
Alternativ
THPDFTesseractOptions = record
PageSegMode: THPDFTesseractPageSegMode;
EngineMode: THPDFTesseractEngineMode;
TimeoutMilliseconds: Cardinal;
MaxPixels: Integer;
class function Default: THPDFTesseractOptions; static;
end;
Anropa THPDFTesseractOptions.Default innan fälten åsidosätts; samma post kan konfigurera den nativa DLL-fabriken eller den lokala CLI-överlagringen med options-post
| Fält | Standard | Betydelse |
|---|---|---|
PageSegMode | tpsAuto | Automatisk sidsegmentering utan orienteringsdetektering |
EngineMode | temDefault | Det motorläge som de valda språkmodellerna stöder |
TimeoutMilliseconds | 60000 | En tidsgräns per begäran från 1 till 3 600 000 millisekunder; DLL:en samarbetar med avbrott, medan CLI-workern avslutas vid tidsgränsöverskridande |
MaxPixels | 16777216 | Pixelbudgeten för indata, konfigurerbar från 1 till 67 108 864 pixlar |
THPDFTesseractPageSegMode = (
tpsOSDOnly, tpsAutoOSD, tpsAutoOnly, tpsAuto, tpsSingleColumn,
tpsSingleBlockVertical, tpsSingleBlock, tpsSingleLine, tpsSingleWord,
tpsCircleWord, tpsSingleCharacter, tpsSparseText, tpsSparseTextOSD,
tpsRawLine);
THPDFTesseractEngineMode = (
temLegacyOnly, temLSTMOnly, temLegacyAndLSTM, temDefault);
tpsOSDOnly och tpsAutoOnly gör ingen ordigenkänning och avvisas av adaptern; tpsAutoOSD och tpsSparseTextOSD kräver dessutom osd.traineddata
Använd tpsSingleLine för en enskild textrad, tpsSingleBlock för ett enhetligt block eller tpsSparseText för utspridd text; de här lägena reparerar inte skanningens perspektiv och ger ingen allmän layoutgaranti
temLSTMOnly kräver LSTM-modeller, medan legacy-lägen kräver motsvarande legacy-modelkomponenter; kombinationer som inte stöds misslyckas under nativ initiering
Exempel på sökbar PDF
PDF:en måste redan vara inläst, och DLL:en, beroendena och språkmodellerna måste vara installerade på de visade platserna
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;
Resultat och ägarskap
Adaptern kopierar den lånade bitmappen till en gråskalebuffert i topp-ner-ordning, vidarebefordrar begärd DPI och igenkänner genom en begärandelokal nativ API-instans
Orden behåller nativ läsordning, validerad UTF-8-Unicode-text, pixelgränser från övre vänstra hörnet och tillförlitlighet skalad från 0–100 till 0–1; supplerande tecken förbrukar två UTF-16-enheter
Tillgängliga ordbaslinjer skickas vidare med båda ändpunkter; när en baslinje inte är tillgänglig tillämpas textlagrets befintliga reservlösning för geometri
För en huvudsakligen vertikal baslinje använder den nativa adaptern ordrutans bredd som TextHeightPixels; horisontella baslinjer använder rutans höjd, inklusive omvända läsriktningar, så att ett vertikalt ords längd inte blir dess teckenstorlek
Det här är en uppskattning längs dominantaxeln: en axeljusterad ordruta och baslinje räcker inte för att återfå den exakta texthöjden vid godtyckliga skevningsvinklar
En tom sida lyckas med en tom ordarray; felformad UTF-8, inbäddade kontrolltecken, ogiltig geometri eller tillförlitlighet, uttömda ord- eller textbudgetar, avbrott och igenkänningsfel returnerar False, rensar alla partiella ord och fyller diagnostiken
Varje begäran släpper sin iterator, allokerade nativa strängar, monitor och API-instans; när adaptern släpps laddas dess biblioteksreferens ur
Gränser och avbrott
Indatadimensionerna får var som störst vara 32 767 pixlar och måste rymmas inom MaxPixels; igenkänd text måste rymmas inom begärans MaxTextCodeUnits-budget och adapterns gräns på 1 048 576 UTF-16-enheter, och ordantalet måste rymmas inom MaxWords
Adaptern kontrollerar avbrott och förfluten tid under bitmapskonvertering och resultatiteration, och tillhandahåller en nativ monitor med återstående tidsgräns och ett avbrottsåteranrop under igenkänningen
Nativ avbrytning är kooperativ: Tesseracts monitor täcker ordigenkänning och avbryter inte varje initierings- eller layoutanalyssteg; de här anropen kan slutföras innan en begärd avbrytning eller en utgången tidsgräns rapporteras
Pixel- och utdatabudgetar sätter ingen hård gräns för det nativa bibliotekets modell- eller igenkänningsminne; använd processadaptern när applikationen behöver en worker som kan avslutas separat
ApplyLoadedOCRTextLayer validerar alla resultat och publicerar varje vald sida atomiskt, så ett adapterfel lämnar det inlästa dokumentet oförändrat
DLL-adaptern avvisar ogiltig UTF-8, trimmar avkodad ordtext och avvisar kvarvarande C0-, DEL- och C1-kontrolltecken innan resultaten returneras, så att felformaterad text misslyckar med begäran i stället för att tyst utelämnas av PDF-textlagret
Lokal CLI-fabrik
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-överlagringen vidarebefordrar PageSegMode som --psm och EngineMode som --oem, använder den konfigurerade tidsgränsen och kontrollerar MaxPixels innan den lånade bitmappen sparas eller en worker startas
Den befintliga överlagringen med tidsgräns behåller automatisk sidsegmentering och exekverbarvals motorläge utan att införa någon ny pixelgräns i adaptern; använd options-överlagringen när en explicit indatagräns krävs
Båda överlagringarna behåller begärd DPI, TSV-utdata, begränsade ärvda handtag, avbrottspollning och workeravslut vid fel; CLI:en har ingen nativ baslinjeinformation, begränsar TSV-utdata till 64 MiB och diagnostikfilsutdata till 1 MiB
Ogiltiga segmenteringslägen, motorlägen, tidsgränser och pixelgränser kastar EArgumentException när den konfigurerade motorn skapas; modelltillgänglighet, inklusive osd.traineddata för orienteringslägen, och kompatibilitet mellan modell och motor kontrolleras av den exekverbara filen under igenkänningen
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;
Använd tpsSingleWord för ett isolerat ord, tpsSparseText för utspridd text eller tpsSingleBlockVertical med en lämplig modell för vertikal text för ett vertikalt block; fabriken beskär inte sidor och väljer inte modeller automatiskt
CLI-adaptern validerar UTF-8 strikt, avvisar NUL-byte och C0/C1-kontrolltecken inuti igenkända ord och rensar alla resultat om felformaterad utdata följer efter ett i övrigt giltigt ord
Se Sökbara OCR-textlager för CLI-exemplet, renderingsalternativ, gruppering i valfritt innehåll och regelefterlevnadsgränser