RapidOCR vietinių modelių adapteris
Podėliuotoms procese vykstančioms ONNX išvadoms naudokite RapidOCR savųjų DLL adapterį su HPDFCreateRapidOCRDLLOCREngine ir THPDFRapidOCRDLLOptions
Savasis adapteris pateikia THPDFRapidOCRDLLOptions.ForLanguage paruoštąsias konfigūracijas supaprastintajai ir tradicinei kinų kalboms, anglų, lotynų, japonų, korėjiečių kalboms, kirilicos kalboms, įskaitant rusų, arabų ir devanagari kalboms
HPDFRapidOCRRecognition pateikia Windows proceso adapterį, įgyvendinantį IHPDFOCREngine Delphi, C++Builder ir FPC/Lazarus Win32 bei Win64 sudarymuose
Paruoškite Python su rapidocr ir onnxruntime, pateikiamąja tools/OCR/rapidocr_tsv.py tiltine sąsaja ir suderinamaisiais vietiniais ONNX modeliais; adapteris neįdiegia paketų ir nesisiunčia modelių, žodynų ar šriftų
Python vyksta atskirame paslėptame procese, tad jo architektūra gali skirtis nuo kviečiančiosios programos; jo ONNX Runtime paketas turi atitikti paties Python architektūrą
Gamyklinės perkravos
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;
Originalioji laiko limito perkrava lieka suderinama su esamąja tiltinės sąsajos protokolu ir naudoja tris numatytąsias PP-OCRv4 modelių bylas; sukonstravimo metu ji patikrina vykdomojo failo, scenarijaus ir aplanko kelius, o modelių prieinamumą — darbuotojo procese
Parinkčių perkrava prieš grąžindama adapterį patikrina kiekvieną būtinąjį modelį, papildomąjį žodyną ir vietinį šriftą; trūkstamosios bylos arba netinkamosios parinktys prieš atpažinimą iškelia EArgumentException
Santykinieji modelių, žodyno ir šriftų keliai sprendžiami ModelDirectory atžvilgiu; absoliutūs keliai gali rodyti atskirai paruoštas bylas
Naudokite RapidOCR aptikimo, klasifikavimo ir CTC atpažinimo konvejeriui suderinamus modelius; kito OCR konvejerio modelis gali reikalauti kitokio išankstinio apdorojimo, o vien tai, kad jis naudoja ONNX formatą, dar nepagrindžia jo pasirinkimo
Kalbai būdingas modelių parinkimas
Python proceso adapteris toliau naudoja aiškiuosius THPDFRapidOCROptions kelius; ForLanguage priklauso savųjų DLL parinkčių įrašui ir nėra Python adapterio metodas
Vietiniuosius kalbų modelius ir žodynus paruoškite komanda tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, o visoms devynioms kalbų konfigūracijoms pasirinkite -Language All
Pagalbinė priemonė tikrina užfiksuotąsias SHA256 maišas ir kiekvieną atpažintuvą patalpina kaip <profile>/recognition.onnx su jam atitinkančiu <profile>/dictionary.txt; atpažinimas vykdymo metu lieka autonominis, be automatinių atsisiuntimų
Rusų kalbai naudokite cyrillic/recognition.onnx ir cyrillic/dictionary.txt; supaprastintoji kinų naudoja ch konfigūraciją, o tradicinė — chinese_cht
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'ch_PP-OCRv3_det_infer.onnx';
Models.RecognitionModel := 'cyrillic/recognition.onnx';
Models.CharacterDictionary := 'cyrillic/dictionary.txt';
Models.ClassificationModel := 'ch_ppocr_mobile_v2.0_cls_infer.onnx';
Aukščiau nurodytieji detektoriaus ir klasifikatoriaus pagrindinių bylų vardai atitinka paruošimo priemonės bendruosius modelius; atitinkamąjį atpažinimo modelį ir žodyną pateikite kartu, o puslapiams arba sritims, kurioms reikia kitos raštistos, pasirinkite atskirą variklį
Parinktys ir numatymai
THPDFRapidOCROptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
FontPath: string;
UseAngleClassifier: Boolean;
IntraOpThreads: Integer;
InterOpThreads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCROptions; static;
end;
Įrašą inicijuokite per THPDFRapidOCROptions.Default dar prieš perrašydami laukus
| Laukas | Numatymas | Reikšmė |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Vietinis aptikimo modelis |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Vietinis atpažinimo modelis |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Reikalingas tik įjungus kampų klasifikavimą |
CharacterDictionary | Tuščias | Naudokite atpažinimo modelio įtaisytąsias simbolių metaduomenis; kai modelio jų nėra, pateikite vietinį žodyną |
FontPath | Tuščias | Išsprendžiamas į %WINDIR%\Fonts\arial.ttf RapidOCR rezultatų konteineriui |
UseAngleClassifier | True | Įjungia teksto kampų klasifikavimą; išjungus klasifikavimo modelio nereikia ir jo nesiunčiama |
IntraOpThreads | 1 | ONNX operacijos vidinės gijos, nuo 1 iki 64, ribojamos darbuotojo loginių CPU skaičiumi |
InterOpThreads | 1 | ONNX tarpoperacijos gijos su tomis pačiomis ribomis |
MaxPixels | 16777216 | Įvesties taškų biudžetas, nuo 1 iki 67 108 864 |
TimeoutMilliseconds | 60000 | Bendroji užklausos termino riba, nuo 1 iki 3 600 000 milisekundžių |
Tiltinė sąsaja visiems etapams aiškiai pasirenka ONNX Runtime CPU posistemę ir išjungia automatinius atsisiuntimus; kai įtaisytųjų simbolių metaduomenyse nėra žodyno, reikia paruošto vietinio CharacterDictionary
Pavyzdys su aiškiai parinktais modeliais
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddLocalRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCROptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'PP-OCRv6_det_small.onnx';
Models.RecognitionModel := 'PP-OCRv6_rec_small.onnx';
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Local RapidOCR text layer was not added');
end;
Rezultatai, biudžetai ir atšaukimas
Kiekviena užklausa skolintąjį bitmap serijalizuoja į privatųjį laikinąjį aplanką, paleidžia vietinį Python darbuotoją ir užbaigusi užklausą sutvarko jo proceso rankenas bei laikinąsias bylas
Parinkčių perkrava prieš bitmap serijalizavimą patikrina MaxPixels; darbuotojas taip pat prieš įkeldamas modelius patikrina įvesties matmenis ir gauna užklausos MaxWords bei MaxTextCodeUnits ribas
Tiltinė sąsaja paprašo simbolių koordinačių ir patikrina kiekvieno simbolio geometriją, pasitikėjimą bei teksto dengiamumą, tada išduoda kiekvieną pilną atpažintąją eilutę su jos pirminiais vidiniais tarpais ir skyryba, ribomis pirminio vaizdo taškais bei vidutiniuoju pasitikėjimu intervale nuo 0 iki 1
Kiekviena išduodamoji eilutė užima vieną MaxWords vietą; vidiniai tarpai skaičiuojami į MaxTextCodeUnits, o ištisosios eilutės paskelbimas neleidžia teksto sluoksniui raidžių tarpo laikyti žodžių tarpu
Tarpai išlaikomi iš atpažintuvo eilutės teksto; tekstas, kurį aptikimas išskaido į atskirąsias dėžes, vis dar priklauso nuo erdvinės žodžių tarpo išvados, o išorinės PDF skaitytuvės ištraukos metu gali atkurti arba suglausti pasikartojančiuosius tarpus
Papildomieji simboliai sunaudoja du UTF-16 vienetus; netinkamosios koordinatės, pasitikėjimas, valdymo simboliai arba išsestieji biudžetai sužlugdo atpažinimą ir išvalo daliniuosius rezultatus
Tuščiasis puslapis baigiasi sėkmingai su tuščiuoju žodžių masyvu; savosios pagrindo linijos nepateikiama, tad teksto sluoksnis naudoja esamąją geometrijos atsarginę priemonę
Atšaukimas, laiko limitas ir išvesties dydžiai tikrinami kas 25 milisekundes; Windows užduotis apima darbuotoją ir visus interpretatoriaus vaikinius procesus, o nutraukdama sistema procesų sutvarkymui palaukia dar iki penkių papildomų sekundžių
ApplyLoadedOCRTextLayer sėkmingai atpažinęs visus atrinktuosius puslapius paskelbia atomiškai
TSV išvestis ribojama iki 64 MiB, o diagnostinė išvestis — iki 1 MiB; įvesties ir išvesties biudžetai nenumato kietosios ONNX modelio arba išvadų atminties naudojimo lubos
Modelių inicijavimas kiekvienai užklausai vyksta naujame Python procese ir įskaitomas į terminą
Patikrinimas
Bendrosios Delphi ir FPC adapterių paleistuvės aprėpia modelių išankstinę patikrą, savuosius kelius, papildomąjį klasifikavimą, Unicode, biudžetus, darbuotojo žlugimą, atšaukimą ir laiko limitą; jų papildomieji RapidOCR parametrai įjungia tikrąjį atpažinimą ir paieškamojo PDF abipusių kelionių patikras
Naudokite Tests/Delphi/Run-TesseractRecognitionTests.ps1 arba Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 su -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel ir -RapidOCRRecognitionModel
Apie atvaizdavimo parinktis, Unicode teksto atvaizdavimą PDF, papildomojo turinio grupavimą ir atitikties ribas žr. ieškomuosius OCR teksto sluoksnius