Nativni adapter RapidOCR DLL

HPDFRapidOCRRecognition izpostavi IHPDFOCREngine v procesu, ki ga nosi HotPDFRapidOCR.dll, z istim javnim API-jem v gradnjah Delphi, C++Builder ter Windows FPC/Lazarus Win32 in Win64

DLL izvaja CPU sklepanje ONNX neposredno nad posnetki pomnilnika in obdrži inicializirane modele, dokler ni sproščen vmesnik pogona; izvedljiva namestitev obsega ujemajoči nativni DLL ter združljive lokalne modele in slovar

Obstoječi procesni adapter Python ostane na voljo s svojimi izvirnimi preobremenitvami tovarne

Tovarna in možnosti

function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
  ModelDirectory: string): IHPDFOCREngine; overload;
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
  ModelDirectory: string; const Options: THPDFRapidOCRDLLOptions): IHPDFOCREngine; overload;

THPDFRapidOCRDLLOptions = record
  DetectionModel: string;
  RecognitionModel: string;
  ClassificationModel: string;
  CharacterDictionary: string;
  UseAngleClassifier: Boolean;
  RightToLeft: Boolean;
  Threads: Integer;
  MaxPixels: Integer;
  TimeoutMilliseconds: Cardinal;
  class function Default: THPDFRapidOCRDLLOptions; static;
  class function ForLanguage(const Language: string): THPDFRapidOCRDLLOptions; static;
end;

Možnosti inicializirajte s THPDFRapidOCRDLLOptions.Default; privzete vrednosti uporabljajo naslednje lokalne datoteke

PoljePrivzetoPomen
DetectionModelch_PP-OCRv3_det_infer.onnxModel zaznavanja DB
RecognitionModelch_PP-OCRv3_rec_infer.onnxZdružljiv CTC model prepoznavanja PP-OCRv3 ali PP-OCRv4
ClassificationModelch_ppocr_mobile_v2.0_cls_infer.onnxNeobvezen model usmerjenosti besedila
CharacterDictionaryppocr_keys_v1.txtSlovar UTF-8 brez BOM, v vrstnem redu znakov modela
UseAngleClassifierTrueKo je onemogočen, klasifikacijski model ni zahtevan in se ne inicializira
RightToLeftFalseZaznana okvirja znotraj horizontalnih vrstic razvrsti od desne proti levi; omogoča ga arabska prednastavitev
Threads1Število niti CPU za ONNX od 1 do 64, omejeno na število logičnih procesorjev
MaxPixels16777216Omejitev vhodnih pikslov, od 1 do 67.108.864
TimeoutMilliseconds60000Sodelovalni rok prepoznavanja, od 1 do 3.600.000 milisekund

Relativna imena datotek se razrešijo glede na ModelDirectory; absolutne poti lahko izberejo ločeno pripravljene datoteke

Tovarna preveri razpoložljivost datotek, možnosti, zahtevane izvoze in različico ABI, preden inicializira modele; neveljavna nastavitev sproži EArgumentException, napake nalaganja modelov pa EInvalidOperation z nativno diagnostiko

Inicializacija modelov poteka v tovarni in je zunaj roka prepoznavanja; števila razredov slovarja se morajo ujemati z modelom prepoznavanja, sama enaka števila razredov pa ne dokazujejo, da je vrstni red znakov ali predobdelava združljiva

Priloženi cevovod uporablja zaznavanje DB z največjo stranjo zaznavanja 1.024 pikslov in 50 piksli belega oblazinjenja; prepoznavalnik sprejme združljive modele NCHW s fiksno vhodno višino 32 ali 48 in za dinamično višino uporabi 48

Prepoznavanje ohranja razmerje stranic za modele dinamične širine in normalizira oblazinjene vhode z najmanjšo širino 320; model fiksne širine omeji širino pomanjšanega izseka, kar lahko stisne dolgo besedilno vrstico

Klasifikacija kota ohranja razmerje stranic izseka znotraj širine svojega modelnega vhoda in neuporabljene piksle zapolni z normaliziranimi ničlami; izsek se zavrti za 180 stopinj le, kadar je ocena na glavo prevrnjene slike nad 0,9, tako da šibke napovedi smeri ne prevrnejo kratkega besedila

Slovar se mora ujemati z vrstnim redom znakov modela in številom izhodnih razredov; sprejete so končnice vrstic CRLF v slovarju, BOM UTF-8 pa je zavrnjen

Ko model vgradi metapodatke znakov, tovarna preveri tudi vsak vnos slovarja in njegov vrstni red; sama velikost slovarja ne zadostuje

Kitajščina, ruščina in pogosti jeziki

THPDFRapidOCRDLLOptions.ForLanguage izbere model prepoznavanja z ujemajočim slovarjem pod lokalnim imenikom modelov, hkrati pa ohrani deljene privzete vrednosti za zaznavanje, klasifikator, niti, piksle in časovni rok

Metoda sprejme vzdevke jezikov neodvisno od velikosti črk, podpičja spremeni v vezaje in obreže obrobne presledke; prazen ali nepodprt tag sproži EArgumentException, preden se modeli naložijo

Profilski imenikJezikiPogosto sprejeti vzdevki
chPoenostanjena kitajščina in angleščinazh, zh-CN, zh-Hans, chi_sim
chinese_chtTradicionalna kitajščinazh-TW, zh-HK, zh-Hant, chi_tra
enAngleščinaen, en-US, en-GB, eng
latinfrancoščina, nemščina, španščina, portugalščina, italijanščina, nizozemščina in turščinafr, de, es, pt-BR, it, nl, tr
japanJaponščinaja, ja-JP, jpn
koreanKorejščinako, ko-KR, kor
cyrillicruščina, ukrajinščina, bolgarščina in beloruščinaru, ru-RU, rus, uk, bg, be
arabicarabščina, perzijščina in urdujščinaar, fa, ur, ara, fas, urd
devanagarihindijščina, maratščina in nepalščinahi, mr, ne, hin, mar, nep

Vsak profil uporablja <profile>/recognition.onnx in <profile>/dictionary.txt; imena profilov so sprejeta neposredno, prepoznani regionalni vzdevki pa so izrecno določeni in ne sklepani iz poljubne predpone

Izbrane nabore modelov pred namestitvijo pripravite s pomočnikom s pripetimi zgoščenimi vrednostmi SHA256

& tools/Install-RapidOCRModels.ps1 `
  -Destination C:/OCR/models `
  -Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari

-Language All namesti vseh devet profilov; -SkipClassifier izpusti neobvezni klasifikator, v tem primeru pa pri ustvarjanju pogona nastavite UseAngleClassifier := False

Pomočnik preveri pripete zgoščene vrednosti SHA256 in pod korenskimi imeni, ki jih uporablja Default, namesti deljenega večjezičnega zaznavalnika in klasifikator; prepoznavanje teče brez povezave in nikoli ne prenese manjkajočih modelov samodejno

Jezik pogona izberite za vsako stran ali območje; en pogon ne zazna jezika samodejno in ne združuje ločenih prepoznavalnikov za različne pisne sisteme

Pripeti paketi uporabljajo združljive modele PP-OCRv3 in PP-OCRv4; natančnost prepoznavanja je odvisna od modela, pisave, ločljivosti in izseka, latinski model pa lahko zamenja diakritike, kot je ñ, celo na čistem vhodu

Novejši modeli PP-OCRv5 lahko zahtevajo novejši ONNX Runtime od statičnih knjižnic, uporabljenih pri gradnji DLL; nepodprt format modela spodleti inicializacijo z diagnostiko

Modeli zaznavanja morajo sprejeti en tenzor slike float32 in izdelati zemljevid verjetnosti float32 s obliko [1, 1, H, W] pri razširjeni vhodni ločljivosti; nezdružljive vrste, dimenzije, nekončne vrednosti ali verjetnosti izven [0, 1] za več kot štiri strojne epsilone float32 spodletijo z diagnostiko, preden se uporabijo rezultati zaznavanja

Majhne napake zaokroževanja sigmoide znotraj te tolerance se pred pragovanjem in ocenjevanjem kontur stisnejo v [0, 1], da veljavni modeli ohranijo svoje običajno vedenje zaznavanja

Kitajski primer

uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;

procedure AddNativeRapidOCRText(PDF: THotPDF);
var
  Engine: IHPDFOCREngine;
  Models: THPDFRapidOCRDLLOptions;
  Layer: THPDFOCRTextLayerOptions;
  Info: THPDFOCRTextLayerInfo;
begin
  Models := THPDFRapidOCRDLLOptions.ForLanguage('zh-CN');
  Models.UseAngleClassifier := False;
  Engine := HPDFCreateRapidOCRDLLOCREngine(
    'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
  Layer := THPDFOCRTextLayerOptions.Default;
  if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
    raise Exception.Create('Native RapidOCR text layer was not added');
end;

Vmesnik pogona ohranite čez zahteve, da ponovno uporabite njegove modele; uporabite DLL, ki se ujema z arhitekturo klicajoče aplikacije, njegove odvisnosti pa podajte ob njem ali v standardnih imenikih nalagalnika Windows

Ruski primer

procedure AddRussianRapidOCRText(PDF: THotPDF);
var
  Engine: IHPDFOCREngine;
  Models: THPDFRapidOCRDLLOptions;
  Layer: THPDFOCRTextLayerOptions;
  Info: THPDFOCRTextLayerInfo;
begin
  Models := THPDFRapidOCRDLLOptions.ForLanguage('ru-RU');
  Engine := HPDFCreateRapidOCRDLLOCREngine(
    'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
  Layer := THPDFOCRTextLayerOptions.Default;
  if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
    raise Exception.Create('Russian RapidOCR text layer was not added');
end;

ru, ru-RU in rus izberejo isti model prepoznavanja cyrillic in isti slovar

Rezultati in življenjska doba

Adapter kopira trenutno bitno sliko v neodvisen posnetek BGR od zgoraj navzdol; pred dodelitvijo preveri dimenzije in proračun pikslov ter izposojene bitne slike ne spreminja

Nativni cevovod izda en rezultat na prepoznano besedilno vrstico, z mejami v pikslih izvirne slike in s povprečno vrednostjo zaupanja znakov; vsaka vrstica porabi eno mesto MaxWords, nativna osnovna črta pa se ne posreduje

Zaznana okvirja sledijo vrstnemu redu branja po horizontalnih vrsticah, privzeto od leve proti desni in od desne proti levi, kadar je omogočen RightToLeft; to možnost omogoča arabska prednastavitev

Klasifikacija kota popravi posamezne besedilne izseke; ne določa usmerjenosti cele strani in ločenih zaznanih okvirjev na glavo prevrnjene strani ne preuredi v logični vrstni red branja

Prepoznano besedilo ostane v logičnem vrstnem redu Unicode modela; adapter nizov arabščine ne obrne samodejno in ne uporabi dvosmernega oblikovanja

Adapter preveri UTF-8, krmilne znake Unicode, meje, zaupanje in omejitev MaxTextCodeUnits zahteve, s strogo besedilno zgornjo mejo 1.048.576 enot UTF-16; dopolnilni znaki porabijo dve enoti

Prazna stran uspe s prazno tabelo rezultatov; napaka počisti delne rezultate, objava iskalnega PDF pa ohranja obstoječe atomsko ravnanje s transakcijami strani

Klici na istem pogonu se serializirajo; čakanje na zaklep pogona preverja preklic in rok prepoznavanja vsakih 25 milisekund

Nativni povratni klici preverijo preklic in roke pred zaznavanjem, klasifikacijo in vsako prepoznano vrstico ter za njimi; posameznega klica sklepanja ONNX ni mogoče silovito prekiniti, zato se preklic lahko vrne šele, ko se trenutna faza zaključi

Vhodne in besedilne omejitve omejijo dodelitve adapterja in sprejeti izhod, ne postavljajo pa stroge zgornje meje pomnilnika modelov, zaznavanja, izsekov ali sklepanja

Gradnja in ABI

Native/RapidOCR vsebuje C++ most, združljiv prepoznavalnik modelov, versioniran glavo C, definicijo izvozov in projekt CMake; pripravite združljive vire omrežij CPU, ki izpostavljajo DbNet, AngleNet in OcrUtils, ter ujemajoči knjižnici ONNX Runtime in OpenCV

Uporabite Windows MSVC s C++17, Windows SDK in CMake 3.20 ali novejši; privzeta gradnja uporablja statični release CRT, ki se mora ujemati s pripravljenimi knjižnicami

& tools/Build-HotPDFRapidOCR.ps1 `
  -NativeSourceDirectory C:/OCR/native-sources `
  -OnnxRuntimeDirectory C:/OCR/onnxruntime/windows-x64 `
  -OpenCVDirectory C:/OCR/opencv/x64/vc16/staticlib `
  -Platform Win64

OnnxRuntimeDirectory mora vsebovati OnnxRuntimeConfig.cmake, OpenCVDirectory pa mora kazati na nastavitev knjižnic za določeno arhitekturo; za 32-bitni DLL izberite Win32 in ujemajoče knjižnice x86

Gradbeni pomočnik zapiše Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; s -BuildDirectory, -OutputDirectory in -Generator lahko spremenite mesto gradnje in generator Visual Studio

Most ujame izjeme C++ in izpostavi različico ABI 1 prek HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize in HPDFRapidOCRDestroy; vsi uporabljajo cdecl, 32-bitne vrednosti stanja in izrecne dolžine bajtov UTF-8

Različica ABI 1 določa tudi neobvezen izvoz HPDFRapidOCRSetReadingDirection; adapter ga zahteva le, kadar je omogočen RightToLeft, zato obstoječi DLL-ji še naprej opravljajo zahteve od leve proti desni

Povratni klici besedilo izposojajo le za trajanje klica; adapter preverjeno besedilo kopira, preden se vrne, destruktor pogona pa uniči modele, preden sprosti DLL

Preverjanje

Z paketom Python onnx in nativno gradnjo BUILD_TESTING zaženite python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe, da prek ABI DLL-ja preverite veljaven prazen izhod, neveljavne rangove tenzorjev, kanale in vrste, neujemajoče prostorske dimenzije ter neveljavne verjetnosti; več poti zaganjalnika lahko v enem klicu preveri obe arhitekturi

Zaganjalniku adapterjev Delphi ali FPC dodajte -RapidOCRLanguageModelDirectory ter enega ali oba parametra nativnih knjižnic DLL, da preverite vse nameščene prednastavitve z vzorci v kitajščini, ruščini, japonščini, korejščini, pogostih latinskih jezikih, arabščini in hindijščini; ruščina in tradicionalna kitajščina pretečejo še shranjevanje iskalnega PDF, ponovno nalaganje, izvlečenje besedila in primerjavo pikslov

Zaganjalnika adapterjev Delphi in FPC preizkušata trajno življenjsko dobo modelov, razporeditev vrstic BGR, znake Unicode in dopolnilne znake, preverjanja ABI, neveljavne rezultate, proračune, sodelovalni preklic, serializirano čakanje na zaklep in čiščenje

Zaganjalniku Tests/Delphi/Run-TesseractRecognitionTests.ps1 ali Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 podajte -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library in -RapidOCRNativeModelDirectory za preverjanje z resničnimi modeli, praznimi stranmi, ravnanjem s poškodovanimi modeli, prepoznavanjem v angleščini in kitajščini ter povratnimi preizkusi iskalnega PDF z nespremenjenimi upodobljenimi piksli

Glejte Iskalne plasti besedila OCR za upodabljanje strani, preslikavo besedila Unicode v PDF, združevanje neobvezne vsebine in zahteve skladnosti