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

PoljePrivzetoPomen
PageSegModetpsAutoSamodejna segmentacija strani brez zaznavanja usmerjenosti
EngineModetemDefaultNačin pogona, ki ga podpirajo izbrani jezikovni modeli
TimeoutMilliseconds60000Rok zahteve od 1 do 3.600.000 milisekund; DLL sodeluje s preklicem, delavec CLI pa se ob preteku roka konča
MaxPixels16777216Prorač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