Adapter RapidOCR z lokalnimi modeli

Za predpomnjeno sklepanje ONNX znotraj procesa uporabite nativni adapter RapidOCR DLL s HPDFCreateRapidOCRDLLOCREngine in THPDFRapidOCRDLLOptions

Nativni adapter ponuja prednastavitve THPDFRapidOCRDLLOptions.ForLanguage za poenostanjeno in tradicionalno kitajščino, angleščino, latinske jezike, japonščino, korejščino, cirilične jezike vključno z ruščino, arabske jezike in jezike devanagari

HPDFRapidOCRRecognition ponuja procesni adapter za Windows, ki v gradnjah Delphi, C++Builder ter FPC/Lazarus Win32 in Win64 implementira IHPDFOCREngine

Namestite Python s paketoma rapidocr in onnxruntime, priloženim mostom tools/OCR/rapidocr_tsv.py ter združljivimi lokalnimi modeli ONNX; adapter ne namešča paketov in ne prenaša modelov, slovarjev ali pisav

Python teče v ločenem skritem procesu, zato je lahko njegova arhitektura drugačna od arhitekture klicajoče aplikacije; njegov paket ONNX Runtime se mora ujemati z lastno arhitekturo Pythona

Preobremenitve tovarne

function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;

Izvirna preobremenitev s časovno omejitvijo ostane združljiva z obstoječim protokolom mostu in uporablja tri privzeta imena datotek modelov PP-OCRv4; ob gradnji adapterja preveri poti izvedljive datoteke, skripte in imenika, razpoložljivost modelov pa preveri delavec

Preobremenitev z možnostmi preveri vsak zahtevani model, neobvezen slovar in lokalno pisavo, preden vrne adapter; manjkajoče datoteke ali neveljavne možnosti sprožijo EArgumentException, preden se prepoznavanje začne

Relativne poti modelov, slovarjev in pisav se razrešijo glede na ModelDirectory; absolutne poti lahko kažejo na ločeno pripravljene datoteke

Uporabite modele, združljive s cevovodom RapidOCR za zaznavanje, klasifikacijo in CTC prepoznavanje; model iz drugega cevovoda OCR lahko zahteva drugačno predobdelavo in ga ni mogoče izbrati samo zato, ker uporablja format ONNX

Izbor modelov po jeziku

Procesni adapter Python še naprej uporablja izrecne poti THPDFRapidOCROptions; ForLanguage pripada zapisu možnosti nativnega DLL in ni metoda adapterja Python

Lokalne jezikovne modele in slovarje pripravite z tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic ali izberite -Language All za vseh devet jezikovnih profilov

Pomočnik preveri pripete zgoščene vrednosti SHA256 in vsak prepoznavalnik postavi na <profile>/recognition.onnx z ujemajočo datoteko <profile>/dictionary.txt; prepoznavanje med izvajanjem ostaja brez povezave, brez samodejnih prenosov

Za ruščino uporabite cyrillic/recognition.onnx in cyrillic/dictionary.txt; poenostanjena kitajščina uporablja profil ch, tradicionalna kitajščina pa 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';

Zgornji korenski imeni datotek zaznavalnika in klasifikatorja ustrezata deljenima modeloma pomočnika za pripravo; ujemajoč model prepoznavanja in slovar podajte skupaj, za strani ali območja, ki potrebujejo drug pisni sistem, pa izberite ločen pogon

Možnosti in privzete vrednosti

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;

Zapis inicializirajte s THPDFRapidOCROptions.Default, preden povozite polja

PoljePrivzetoPomen
DetectionModelch_PP-OCRv4_det_mobile.onnxLokalni model zaznavanja
RecognitionModelch_PP-OCRv4_rec_mobile.onnxLokalni model prepoznavanja
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxZahtevan le, kadar je omogočena klasifikacija kota
CharacterDictionaryPrazenUporabi vgrajene metapodatke znakov modela prepoznavanja; lokalni slovar podajte, kadar modelu ti metapodatki manjkajo
FontPathPrazenRazreši se na %WINDIR%\Fonts\arial.ttf za vsebnik rezultatov RapidOCR
UseAngleClassifierTrueOmogoči klasifikacijo kota besedila; ko je onemogočena, klasifikacijski model ni zahtevan in se ne posreduje
IntraOpThreads1Niti ONNX znotraj operacij, od 1 do 64, omejene na število logičnih procesorjev delavca
InterOpThreads1Niti ONNX med operacijami z enakimi omejitvami
MaxPixels16777216Proračun vhodnih pikslov, od 1 do 67.108.864
TimeoutMilliseconds60000Skupni rok zahteve, od 1 do 3.600.000 milisekund

Most za vse faze izrecno izbere CPU backend ONNX Runtime in onemogoči samodejne prenose; kadar vgrajen slovar znakov manjka, je zahtevan pripravljen lokalni CharacterDictionary

Primer z izrecno izbranimi modeli

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;

Rezultati, proračuni in preklic

Vsaka zahteva serializira izposojeno bitno sliko v zasebni začasni imenik, zažene lokalnega delavca Python in ob zaključku zahteve počisti njegove ročaje procesov ter začasne datoteke

Preobremenitev z možnostmi preveri MaxPixels pred serializacijo bitne slike; delavec preveri tudi vhodne dimenzije, preden naloži modele, in prejme omejitve MaxWords ter MaxTextCodeUnits zahteve

Most zahteva koordinate znakov in preveri geometrijo, zaupanje ter pokritost besedila vsakega znaka, nato pa izda vsako popolno prepoznano vrstico z njenimi izvirnimi notranjimi presledki in ločili, z obdajajočimi mejami v pikslih izvirne slike in s povprečno vrednostjo zaupanja v območju od 0 do 1

Vsaka izdana vrstica porabi eno mesto MaxWords; notranji presledki se štejejo v MaxTextCodeUnits, objava cele vrstice pa preprečuje, da bi besedilna plast zamenjala razmik med črkami z razmikom med besedami

Razmiki se ohranijo iz besedila vrstice prepoznavalnika; besedilo, ki ga zaznavanje razdeli v ločena okvirja, se še naprej zanaša na prostorsko sklepanje o vrzelih med besedami, zunanji bralniki PDF pa lahko med izvlečenjem ponovno sestavijo ali strnejo podvojene presledke

Dopolnilni znaki porabijo dve enoti UTF-16; neveljavne koordinate, zaupanje, krmilni znaki ali izčrpani proračuni spodletijo prepoznavanje in počistijo delne rezultate

Prazna stran uspe s prazno tabelo besed; nativna osnovna črta se ne posreduje, zato besedilna plast uporabi svoj obstoječi geometrijski rezervni način

Preklic, časovna omejitev in velikosti izhoda se preverjajo vsakih 25 milisekund; delavec in morebitni podrejeni procesi tolmača so zaprti v poslu Windows, ob prekinitvi pa se za čiščenje procesov počaka še do pet dodatnih sekund

ApplyLoadedOCRTextLayer objavi vse izbrane strani atomsko, ko prepoznavanje uspe

Izhod TSV je omejen na 64 MiB in diagnostični izhod na 1 MiB; vhodni in izhodni proračuni ne postavljajo stroge zgornje meje porabe pomnilnika modelov ONNX ali sklepanja

Inicializacija modelov poteka v novem procesu Python za vsako zahtevo in je vključena v časovni rok

Preverjanje

Skupna zaganjalnika adapterjev Delphi in FPC pokrivata predhodna preverjanja modelov, poti po meri, neobvezno klasifikacijo, Unicode, proračune, odpoved delavca, preklic in časovno omejitev; njuna neobvezna parametra RapidOCR omogočita resnično prepoznavanje in povratne preizkuse iskalnega PDF

Uporabite Tests/Delphi/Run-TesseractRecognitionTests.ps1 ali Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 s -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel in -RapidOCRRecognitionModel

Glejte Iskalne plasti besedila OCR za možnosti upodabljanja, preslikavo besedila Unicode v PDF, združevanje neobvezne vsebine in omejitve skladnosti