Adapterji OCR Tesseract
HPDFTesseractRecognition ponuja neobvezne pogone za Windows, ki implementirajo IHPDFOCREngine za iskalne plasti besedila OCR
Tovarna nativnega DLL
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Podajte obstoječi DLL Tesseract, ki izpostavlja C API, združljiv s Tesseract 5, imenik tessdata ter identifikator jezika ASCII ali kombinacijo, kot sta eng, chi_sim ali chi_sim+eng
Arhitektura knjižnice se mora ujemati z aplikacijo: aplikacija Win32 nalaga 32-bitni DLL, aplikacija Win64 pa 64-bitni DLL
Zahtevane odvisne DLL-je hranite ob izbrani knjižnici ali v standardnih imenikih nalagalnika Windows; adapter naloži izrecno podano pot knjižnice, ne da bi spremenil trenutni imenik ali iskalno pot procesa
Tovarna preveri vsako zahtevano datoteko .traineddata, naloži knjižnico in razreši zahtevane izvoze, preden se vrne; neveljavne poti, modeli, možnosti, manjkajoči izvozi, neujemanja arhitektur in nerazpoložljive odvisnosti sprožijo izjemo
Nobeden pogon OCR ali modelov ni priložen in nobeden se ne prenese samodejno
Obe tovarni sta na voljo v paketu Windows FPC/Lazarus ter v gradnjah Delphi in C++Builder; Lib/FPC/HotPDFLaz.lpk zgradite znova za ciljno arhitekturo, preden uporabite HPDFTesseractRecognition
Nativni adapter FPC bere trenutno surovo sliko LCL, vključno s piksli, zapisanimi prek scanline, in ohranja besede Unicode neodvisno od sistemske ANSI kodne strani
Možnosti
THPDFTesseractOptions = record
PageSegMode: THPDFTesseractPageSegMode;
EngineMode: THPDFTesseractEngineMode;
TimeoutMilliseconds: Cardinal;
MaxPixels: Integer;
class function Default: THPDFTesseractOptions; static;
end;
Pokličite THPDFTesseractOptions.Default, preden povozite polja; isti zapis lahko nastavi tovarno nativnega DLL-ja ali lokalno preobremenitev možnosti CLI
| Polje | Privzeto | Pomen |
|---|---|---|
PageSegMode | tpsAuto | Samodejna segmentacija strani brez zaznavanja usmerjenosti |
EngineMode | temDefault | Način pogona, ki ga podpirajo izbrani jezikovni modeli |
TimeoutMilliseconds | 60000 | Rok zahteve od 1 do 3.600.000 milisekund; DLL sodeluje s preklicem, delavec CLI pa se ob preteku roka konča |
MaxPixels | 16777216 | Proračun vhodnih pikslov, nastavljiv od 1 do 67.108.864 pikslov |
THPDFTesseractPageSegMode = (
tpsOSDOnly, tpsAutoOSD, tpsAutoOnly, tpsAuto, tpsSingleColumn,
tpsSingleBlockVertical, tpsSingleBlock, tpsSingleLine, tpsSingleWord,
tpsCircleWord, tpsSingleCharacter, tpsSparseText, tpsSparseTextOSD,
tpsRawLine);
THPDFTesseractEngineMode = (
temLegacyOnly, temLSTMOnly, temLegacyAndLSTM, temDefault);
tpsOSDOnly in tpsAutoOnly ne izvajata prepoznavanja besed in ju adapter zavrne; tpsAutoOSD in tpsSparseTextOSD poleg tega zahtevata osd.traineddata
tpsSingleLine uporabite za eno besedilno vrstico, tpsSingleBlock za enoten blok ali tpsSparseText za raztreseno besedilo; ti načini ne popravijo perspektive skena in ne zagotavljajo splošne garancije postavitve
temLSTMOnly zahteva modele LSTM, zapuščeni načini pa ustrezne komponente zapuščenih modelov; nepodprte kombinacije spodletijo med nativno inicializacijo
Primer iskalnega PDF
PDF mora biti že naložen, DLL, odvisnosti in jezikovni modeli pa morajo biti nameščeni na prikazanih mestih
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 in lastništvo
Adapter kopira izposojeno bitno sliko v sivinski medpomnilnik od zgoraj navzdol, posreduje DPI zahteve in prepoznava prek primerka nativnega API-ja, dodeljenega za to zahtevo
Besede ohranijo nativni vrstni red branja, preverjeno besedilo Unicode UTF-8, meje v pikslih z izhodiščem zgoraj levo in zaupanje, prilagojeno iz 0–100 v 0–1; dopolnilni znaki porabijo dve enoti UTF-16
Razpoložljive osnovne črte besed se posredujejo z obema končnima točkama; kadar osnovna črta ni razpoložljiva, velja obstoječi geometrijski rezervni način besedilne plasti
Pri pretežno navpični osnovni črti nativni adapter kot TextHeightPixels uporabi širino polja besede; vodoravne osnovne črte uporabijo višino polja, vključno z obrnjenimi smernimi branja, tako da dolžina navpične besede ne postane njena velikost pisave
To je ocena po prevladujoči osi: iz polja besede in osnovne črte, poravnanih z osmi, same ni mogoče rekonstruirati točne višine besedila pri poljubnih nagibnih kotih
Prazna stran uspe s prazno tabelo besed; napačno oblikovan UTF-8, vgrajeni krmilni znaki, neveljavna geometrija ali zaupanje, izčrpana proračuna besed ali besedila, preklic in napake prepoznavanja vrnejo False, počistijo vse delne besede in napolnijo diagnostiko
Vsaka zahteva sprosti svoj iterator, dodeljene nativne nize, nadzornik in primerek API-ja; sprostitev adapterja sprosti sklic na njegovo knjižnico
Omejitve in preklic
Vhodna dimenzija je vsaka omejena na največ 32.767 pikslov in mora ustrezati MaxPixels; prepoznano besedilo mora ustrezati proračunu MaxTextCodeUnits zahteve in adapterjevi meji 1.048.576 enot UTF-16, število besed pa MaxWords
Adapter med pretvorbo bitne slike in iteracijo rezultatov preverja preklic in pretečen čas ter med prepoznavanjem podaja nativnega nadzornika s preostalim rokom in povratnim klicem preklica
Nativni preklic je sodelovalen: nadzornik Tesseracta pokriva prepoznavanje besed in ne prekine vsakega koraka inicializacije ali analize postavitve; ti klici se lahko zaključijo, preden je sporočen zahtevani preklic ali potekel rok
Proračuna pikslov in izhoda ne postavljata stroge meje porabi pomnilnika nativne knjižnice za modele ali prepoznavanje; kadar aplikacija potrebuje delavca, ki ga je mogoče ločeno končati, uporabite procesni adapter
ApplyLoadedOCRTextLayer preveri vse rezultate in objavi vsako izbrano stran atomsko, tako da odpoved adapterja pusti naloženi dokument nespremenjen
Adapter DLL zavrne neveljaven UTF-8, obreže dekodirano besedilo besed in zavrne preostale krmilne znake C0, DEL in C1, preden vrne rezultate, tako da napačno oblikovano besedilo spodleti zahtevo, namesto da bi ga besedilna plast PDF tiho izpustila
Lokalna tovarna CLI
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Preobremenitev z možnostmi posreduje PageSegMode kot --psm in EngineMode kot --oem, uporabi nastavljeni časovni rok in preveri MaxPixels, preden shrani izposojeno bitno sliko ali zažene delavca
Obstoječa preobremenitev s časovnim rokom ohrani samodejno segmentacijo strani in način pogona, izbran z izvedljivo datoteko, brez vsiljevanja nove omejitve pikslov adapterja; preobremenitev z možnostmi uporabite, kadar je zahtevana izrecna omejitev vnosa
Oba preobremenitvi ohranita zahtevani DPI, izhod TSV, omejene podedovane ročaje, odvračanje preklica in prekinitev delavca ob napaki; CLI nima nativnih informacij o osnovnih črtah, omeji izhod TSV na 64 MiB in izhod diagnostične datoteke na 1 MiB
Neveljavni načini segmentacije, načini pogona, časovni roki in omejitve pikslov sprožijo EArgumentException pri ustvarjanju nastavljenega pogona; razpoložljivost modelov, vključno z osd.traineddata za načine usmerjenosti, in združljivost model/pogon preveri izvedljiva datoteka med prepoznavanjem
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;
tpsSingleWord uporabite za osamljeno besedo, tpsSparseText za raztreseno besedilo ali tpsSingleBlockVertical z ustreznim modelom navpičnega besedila za en navpični blok; tovarna ne obreže strani in ne izbira modelov samodejno
Adapter CLI strogo preveri UTF-8, zavrne bajte NUL in krmilne znake C0/C1 znotraj prepoznanih besed ter počisti vse rezultate, kadar se za sicer veljavno besedo pojavi nepravilno oblikovan izhod
Glejte Iskalne plasti besedila OCR za primer CLI, možnosti upodabljanja, združevanje neobvezne vsebine in omejitve skladnosti