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
| Polje | Privzeto | Pomen |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | Model zaznavanja DB |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Združljiv CTC model prepoznavanja PP-OCRv3 ali PP-OCRv4 |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Neobvezen model usmerjenosti besedila |
CharacterDictionary | ppocr_keys_v1.txt | Slovar UTF-8 brez BOM, v vrstnem redu znakov modela |
UseAngleClassifier | True | Ko je onemogočen, klasifikacijski model ni zahtevan in se ne inicializira |
RightToLeft | False | Zaznana okvirja znotraj horizontalnih vrstic razvrsti od desne proti levi; omogoča ga arabska prednastavitev |
Threads | 1 | Število niti CPU za ONNX od 1 do 64, omejeno na število logičnih procesorjev |
MaxPixels | 16777216 | Omejitev vhodnih pikslov, od 1 do 67.108.864 |
TimeoutMilliseconds | 60000 | Sodelovalni 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 imenik | Jeziki | Pogosto sprejeti vzdevki |
|---|---|---|
ch | Poenostanjena kitajščina in angleščina | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Tradicionalna kitajščina | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Angleščina | en, en-US, en-GB, eng |
latin | francoščina, nemščina, španščina, portugalščina, italijanščina, nizozemščina in turščina | fr, de, es, pt-BR, it, nl, tr |
japan | Japonščina | ja, ja-JP, jpn |
korean | Korejščina | ko, ko-KR, kor |
cyrillic | ruščina, ukrajinščina, bolgarščina in beloruščina | ru, ru-RU, rus, uk, bg, be |
arabic | arabščina, perzijščina in urdujščina | ar, fa, ur, ara, fas, urd |
devanagari | hindijščina, maratščina in nepalščina | hi, 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