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

LaukasNumatymasReikšmė
DetectionModelch_PP-OCRv4_det_mobile.onnxVietinis aptikimo modelis
RecognitionModelch_PP-OCRv4_rec_mobile.onnxVietinis atpažinimo modelis
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxReikalingas tik įjungus kampų klasifikavimą
CharacterDictionaryTuščiasNaudokite atpažinimo modelio įtaisytąsias simbolių metaduomenis; kai modelio jų nėra, pateikite vietinį žodyną
FontPathTuščiasIšsprendžiamas į %WINDIR%\Fonts\arial.ttf RapidOCR rezultatų konteineriui
UseAngleClassifierTrueĮjungia teksto kampų klasifikavimą; išjungus klasifikavimo modelio nereikia ir jo nesiunčiama
IntraOpThreads1ONNX operacijos vidinės gijos, nuo 1 iki 64, ribojamos darbuotojo loginių CPU skaičiumi
InterOpThreads1ONNX tarpoperacijos gijos su tomis pačiomis ribomis
MaxPixels16777216Įvesties taškų biudžetas, nuo 1 iki 67 108 864
TimeoutMilliseconds60000Bendroji 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