RapidOCR savųjų DLL adapteris
HPDFRapidOCRRecognition atskleidžia HotPDFRapidOCR.dll paremtą procese vykstantį IHPDFOCREngine su ta pačia viešąja API Delphi, C++Builder ir Windows FPC/Lazarus Win32 bei Win64 sudarymuose
DLL CPU ONNX išvadas atlieka tiesiai ant atminties momentinių kopijų ir laiko inicijuotuosius modelius, kol atlaisvinama variklio sąsaja; diegimas vykdymo metu susideda iš atitinkamosios savosios DLL ir suderinamų vietinių modelių bei žodyno
Esamasis Python proceso adapteris lieka prieinamas su savomis pirminėmis gamyklinėmis perkravomis
Gamykla ir parinktys
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;
Parinktis inicijuokite per THPDFRapidOCRDLLOptions.Default; numatymai naudoja šias vietines bylas
| Laukas | Numatymas | Reikšmė |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | DB aptikimo modelis |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Suderinamasis PP-OCRv3 arba PP-OCRv4 CTC atpažinimo modelis |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Papildomasis teksto orientacijos modelis |
CharacterDictionary | ppocr_keys_v1.txt | UTF-8 žodynas be BOM, modelio simbolių tvarka |
UseAngleClassifier | True | Išjungus klasifikavimo modelio nereikia ir jo neinicijuojama |
RightToLeft | False | Aptiktąsias dėžes horizontaliose eilutėse rikiuoja iš dešinės į kairę; įjungia arabų konfigūracija |
Threads | 1 | ONNX CPU gijų skaičius nuo 1 iki 64, ribojamas loginių procesorių skaičiumi |
MaxPixels | 16777216 | Įvesties taškų riba, nuo 1 iki 67 108 864 |
TimeoutMilliseconds | 60000 | Bendradarbiavimu paremtas atpažinimo terminas, nuo 1 iki 3 600 000 milisekundžių |
Santykinieji bylų vardai sprendžiami ModelDirectory atžvilgiu; absoliutūs keliai gali parinkti atskirai paruoštas bylas
Gamykla prieš inicijuodama modelius patikrina bylų prieinamumą, parinktis, būtinas eksporto funkcijas ir ABI versiją; netinkama konfigūracija iškelia EArgumentException, o modelių įkėlimo nesėkmės — EInvalidOperation su savąja diagnostika
Modelių inicijavimas vyksta gamykloje ir yra už atpažinimo termino ribų; žodyno klasių skaičius turi atitikti atpažinimo modelį, o vienodas klasių skaičius savaime dar nereiškia, kad simbolių tvarka arba išankstinis apdorojimas suderinami
Pateikiamasis konvejeris naudoja DB aptikimą su ne didesne kaip 1 024 taškų aptikimo kraštine ir 50 taškų baltąja pagalvėle; atpažintuvas priima suderinamuosius NCHW modelius su fiksuotuoju 32 arba 48 taškų įvesties aukščiu, o dinaminiam aukščiui naudoja 48
Atpažinimas išlaiko kraštinių santykį dinaminio pločio modeliams ir normalizuoja pagalvėle papildytąją įvestį iki mažiausiojo 320 pločio; fiksuotojo pločio modelis riboja pakeistojo dydžio iškarpos plotį, kas gali suspausti ilgą teksto eilutę
Kampų klasifikavimas iškarpos kraštinių santykį išlaiko modelio įvesties pločio ribose, o nenaudojamuosius taškus užpildo normalizuotaisiais nuliais; iškarpa apverčiama 180 laipsnių tik kai apverstosios padėties įvertis viršija 0,9, tad silpnieji krypties spėjimai neapverčia trumpojo teksto
Žodynas turi atitikti modelio simbolių tvarką ir išvesties klasių skaičių; CRLF žodyno eilučių pabaigos priimamos, bet UTF-8 BOM atmetamas
Kai modelis turi įtaisytąsias simbolių metaduomenis, gamykla patikrina ir kiekvieną žodyno įrašą, ir jo tvarką; vien žodyno dydžio nepakanka
Kinų, rusų ir kitos įprastos kalbos
THPDFRapidOCRDLLOptions.ForLanguage po vietiniųjų modelių aplanku parinko atpažinimo modelį ir jam atitinkantįjį žodyną, išlaikydama bendruosius detektoriaus, klasifikatoriaus, gijų, taškų ir laiko limito numatymus
Metodas priima kalbų aliasus nepriklausomai nuo raidžių registro, pabraukimo ženklus keičia brūkšneliais ir nukerpa aplinkinius tarpus; tuščiasis arba nepalaikomasis alias prieš įkeliant modelius iškelia EArgumentException
| Konfigūracijos aplankas | Kalbos | Įprastai priimami aliasai |
|---|---|---|
ch | Supaprastintoji kinų ir anglų | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Tradicinė kinų | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Anglų | en, en-US, en-GB, eng |
latin | Prancūzų, vokiečių, ispanų, portugalų, italų, olandų ir turkų | fr, de, es, pt-BR, it, nl, tr |
japan | Japonų | ja, ja-JP, jpn |
korean | Korėjiečių | ko, ko-KR, kor |
cyrillic | Rusų, ukrainiečių, bulgarų ir baltarusų | ru, ru-RU, rus, uk, bg, be |
arabic | Arabų, persų ir urdu | ar, fa, ur, ara, fas, urd |
devanagari | Hindi, maratų ir nepali | hi, mr, ne, hin, mar, nep |
Kiekviena konfigūracija naudoja <profile>/recognition.onnx ir <profile>/dictionary.txt; konfigūracijų vardai priimami tiesiogiai, o atpažįstamieji regioniniai aliasai apibrėžti aiškiai, o ne išvedami pagal savavalį priešdėlį
Parinktąsias modelių rinkinius prieš diegimą įdiekite SHA256 užfiksuotąja paruošimo priemone
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All įdiegia visas devynias konfigūracijas; -SkipClassifier praleidžia papildomąjį klasifikatorių, tuomet kurdami variklį nustatykite UseAngleClassifier := False
Pagalbinė priemonė tikrina užfiksuotąsias SHA256 maišas ir po Default naudojamaisiais pagrindiniais bylų vardais įdiegia bendrąjį daugiakalbį detektorių ir klasifikatorių; atpažinimas vyksta autonomiškai ir niekada automatiškai nesisiunčia trūkstamųjų modelių
Kiekvienam puslapiui arba sričiai pasirinkite variklio kalbą; vienas variklis kalbos nenustato automatiškai ir nesujungia atskirų atpažintuvų skirtingoms raštistoms
Užfiksuotieji paketai naudoja suderinamuosius PP-OCRv3 ir PP-OCRv4 modelius; atpažinimo tikslumas priklauso nuo modelio, šrifto, raiškos ir iškarpos, o lotynų modelis net ant švarios įvesties gali supainioti tokius diakritinius ženklus kaip ñ
Naujesnieji PP-OCRv5 modeliai gali reikalauti naujesnio ONNX Runtime, nei statinės bibliotekos, kuriomis sudaryta DLL; nepalaikomasis modelio formatas sužlugdo inicijavimą su diagnostika
Aptikimo modeliai turi priimti vieną float32 paveikslėlio tenzorių ir duoti float32 tikimybių žemėlapį, kurio forma [1, 1, H, W] pakeistojoje įvesties raiškoje; nesuderinami tipai, matmenys, baigtinės neesamos reikšmės arba tikimybės už [0, 1] ribų, viršijančios keturis float32 mašinos epsilonus, žlunga su diagnostika dar prieš naudojant aptikimo rezultatus
Mažosios sigmoid suapvalinimo paklaidos tos tolerancijos ribose prieš slenkstėjimą ir kontūrų vertinimą nukerpamos iki [0, 1], kad tinkami modeliai išlaikytų įprastą aptikimo elgseną
Kinų kalbos pavyzdys
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;
Variklio sąsają išlaikykite tarp užklausų, kad galėtumėte pakartotinai naudoti jo modelius; naudokite kviečiančiosios programos architektūrą atitinkančiąją DLL, o jos priklausomybes pateikite šalia jos arba standartiniuose Windows įkėliklio aplankuose
Rusų kalbos pavyzdys
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 ir rus parinko tą patį cyrillic atpažinimo modelį ir žodyną
Rezultatai ir gyvavimo laikas
Adapteris dabartinį bitmap nukopijuoja į nepriklausomąją iš viršaus žemyn einančiąją BGR momentinę kopiją; prieš išskyrimą jis patikrina matmenis ir taškų biudžetą bei nemodifikuoja skolintojo bitmap
Savasis konvejeris išduoda po vieną rezultatą kiekvienai atpažintajai teksto eilutei, su pirminio vaizdo taškų ribomis ir vidutiniuoju simbolių pasitikėjimu; kiekviena eilutė užima vieną MaxWords vietą, o savosios pagrindo linijos nepateikiama
Aptiktosios dėžės seka horizontaliąją eilučių skaitymo tvarką — pagal numatymą iš kairės į dešinę, o įjungus RightToLeft iš dešinės į kairę; šią parinktį įjungia arabų konfigūracija
Kampų klasifikavimas taiso atskirąsias teksto iškarpas; jis nenustato viso puslapio orientacijos ir apversto puslapio atskirąsias aptikimo dėžes į loginę skaitymo tvarką nesurikiuoja
Atpažintasis tekstas lieka modelio logineje Unicode tvarkoje; adapteris automatiškai neapverčia arabų eilučių ir netaiko dvikrypčio formavimo
Adapteris patikrina UTF-8, Unicode valdymo simbolius, ribas, pasitikėjimą ir užklausos MaxTextCodeUnits ribą, o kietoji teksto luba — 1 048 576 UTF-16 vienetų; papildomieji simboliai sunaudoja du vienetus
Tuščiasis puslapis baigiasi sėkmingai su tuščiuoju rezultatų masyvu; nesėkmė išvalo daliniuosius rezultatus, o paieškamojo PDF paskelbimas išlaiko esamąją atominę puslapių transakcijų elgseną
Kviečimai tam pačiam varikliui serijalizujami; laukdama variklio rakto sistema kas 25 milisekundes tikrina atšaukimą ir atpažinimo terminą
Savieji atgaliniai kvietimai atšaukimą ir terminus tikrina prieš aptikimą, klasifikavimą ir kiekvieną atpažintąją eilutę bei po jų; atskiro ONNX išvados kvietimo priverstinai nutraukti negalima, tad atšaukimas gali grįžti tik baigus dabartinįjį etapą
Įvesties ir teksto ribos apriboja adapterio išskyrimus ir priimtąją išvestį, bet nenumato kietosios modelio, aptikimo, iškarpos arba išvadų atminties lubos
Sudarymas ir ABI
Native/RapidOCR turi C++ tiltinę sąsają, suderinamąjį modelių atpažintuvą, versijuotąją C antraštę, eksportų apibrėžtį ir CMake projektą; paruoškite suderinamuosius CPU tinklų šaltinius, atskleidžiančius DbNet, AngleNet ir OcrUtils, taip pat atitinkamąsias ONNX Runtime ir OpenCV bibliotekas
Naudokite Windows MSVC su C++17, Windows SDK ir CMake 3.20 arba naujesniu; numatytasis sudarymas naudoja statinę releasinę CRT, kuri turi atitikti paruoštąsias bibliotekas
& 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 turi turėti OnnxRuntimeConfig.cmake, o OpenCVDirectory turi rodyti architektūrai būdingąją bibliotekų konfigūraciją; 32 bitų DLL pasirinkite Win32 ir atitinkamąsias x86 bibliotekas
Sudarymo pagalbinė priemonė rašo Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; -BuildDirectory, -OutputDirectory ir -Generator gali pakeisti sudarymo vietą ir Visual Studio generatorių
Tiltinė sąsaja sugauna C++ išimtis ir per HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize ir HPDFRapidOCRDestroy atskleidžia ABI 1 versiją; visi jie naudoja cdecl, 32 bitų būsenų reikšmes ir aiškuosius UTF-8 baitų ilgius
ABI 1 versija taip pat apibrėžia papildomąjį HPDFRapidOCRSetReadingDirection eksportą; adapteris jo reikalauja tik įjungus RightToLeft, tad esamosios DLL vis tiek gali aptarnauti iš kairės į dešinę nukreiptus kviečimus
Atgaliniai kvietimai savąjį tekstą skolinas tik kvietimo metu; adapteris patikrintąjį tekstą nukopijuoja prieš grąžindamas, o variklio destruktorius sunaikina modelius dar prieš atlaisvindamas DLL
Patikrinimas
Su Python onnx paketu ir natyviuoju BUILD_TESTING sudarymu paleiskite python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe, per DLL ABI patikrindami tinkamą tuščią išvestį, netinkamus tenzorių rangus, kanalus ir tipus, nesutampinančius erdvinius matmenis ir netinkamas tikimybes; keliais paleistuvės keliais abi architektūros galima patikrinti vienu iškvietimu
Į Delphi arba FPC adapterių paleistuvę pridėkite -RapidOCRLanguageModelDirectory ir vieną arba abu savųjų DLL bibliotekos parametrus, kad patikrintumėte visas įdiegtas konfigūracijas su kinų, rusų, japonų, korėjiečių, įprastųjų lotynų, arabų ir hindi įragais; rusų ir tradicinė kinų papildomai praeina paieškamojo PDF įrašymo, pakartotinio įkėlimo, teksto ištraukos ir taškų lyginimo patikras
Delphi ir FPC adapterių paleistuvės tikrina nuolatinį modelių gyvavimą, BGR eilučių išdėstymą, Unicode ir papildomuosius simbolius, ABI patikras, netinkamuosius rezultatus, biudžetus, bendradarbiavimu paremtą atšaukimą, serijalizuktąjį rakto laukimą ir sutvarkymą
Pateikę -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library ir -RapidOCRNativeModelDirectory Tests/Delphi/Run-TesseractRecognitionTests.ps1 arba Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1, patikrinsite tikruosius modelius, tuščiuosius puslapius, pažeistųjų modelių apdorojimą, anglų ir kinų atpažinimą bei paieškamojo PDF abipuses keliones su nepakitkusiais atvaizduotaisiais taškais
Apie puslapių atvaizdavimą, Unicode teksto atvaizdavimą PDF, papildomojo turinio grupavimą ir atitikties apribojimus žr. ieškomuosius OCR teksto sluoksnius