Adapter lokalnih RapidOCR modela

Za predmemoriranu ONNX inferenciju unutar procesa koristite adapter nativne RapidOCR DLL datoteke s HPDFCreateRapidOCRDLLOCREngine-om i THPDFRapidOCRDLLOptions-om

Nativni adapter nudi presetove THPDFRapidOCRDLLOptions.ForLanguage za pojednostavljeni i tradicionalni kineski, engleski, latinske jezike, japanski, korejski, ćirilične jezike uključujući ruski, arapske jezike i devanagari jezike

HPDFRapidOCRRecognition pruža Windows procesni adapter koji implementira IHPDFOCREngine u Delphi, C++Builder i FPC/Lazarus Win32 i Win64 izvedbama

Osigurajte Python s paketima rapidocr i onnxruntime, priloženim mostom tools/OCR/rapidocr_tsv.py i kompatibilnim lokalnim ONNX modelima; adapter ne instalira pakete niti preuzima modele, rječnike ili fontove

Python radi u zasebnom skrivenom procesu, pa njegova arhitektura može odstupati od arhitekture aplikacije koja ga poziva; njegov ONNX Runtime paket mora odgovarati arhitekturi vlastitog Pythona

Tvornička preopterećenja

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

Izvorno preopterećenje s vremenskim ograničenjem ostaje kompatibilno s postojećim protokolom mosta i koristi tri zadana naziva datoteka PP-OCRv4 modela; pri konstrukciji provjerava putanje izvršne datoteke, skripte i direktorija, a dostupnost modela provjerava u radniku

Preopterećenje s opcijama prije vraćanja adaptera provjerava svaki potreban model, neobavezni rječnik i lokalni font; nedostajuće datoteke ili nevažeće opcije podižu EArgumentException prije početka prepoznavanja

Relativne putanje modela, rječnika i fontova razrješuju se prema ModelDirectory-u; apsolutne putanje mogu ukazivati na zasebno osigurane datoteke

Koristite modele kompatibilne s RapidOCR-ovim cjevovodom detekcije, klasifikacije i CTC prepoznavanja; model iz drugog OCR cjevovoda može zahtijevati drugačiju predobradu i ne može se odabrati samo zato što koristi ONNX format

Odabir modela specifičan za jezik

Python procesni adapter i dalje koristi eksplicitne putanje iz THPDFRapidOCROptions-a; ForLanguage pripada zapisu opcija nativne DLL datoteke i nije metoda Python adaptera

Lokalne jezične modele i rječnike osigurajte s tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ili odaberite -Language All za svih devet jezičnih profila

Pomoćnik provjerava zaključane SHA256 sažetke i smješta svaki prepoznavatelj u <profile>/recognition.onnx s pripadajućom <profile>/dictionary.txt datotekom; prepoznavanje tijekom izvođenja ostaje offline bez automatskih preuzimanja

Za ruski koristite cyrillic/recognition.onnx i cyrillic/dictionary.txt; pojednostavljeni kineski koristi ch profil, a tradicionalni kineski 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';

Korijenski nazivi datoteka detektora i klasifikatora odozgo odgovaraju dijeljenim modelima pomoćnika za osiguranje; dostavite odgovarajući model prepoznavanja i rječnik zajedno te odaberite zasebni motor za stranice ili regije kojima treba drugo pismo

Opcije i zadane vrijednosti

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 inicijalizirajte s THPDFRapidOCROptions.Default prije nadjačavanja polja

PoljeZadanoZnačenje
DetectionModelch_PP-OCRv4_det_mobile.onnxLokalni model detekcije
RecognitionModelch_PP-OCRv4_rec_mobile.onnxLokalni model prepoznavanja
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxPotreban samo kada je omogućena klasifikacija kutova
CharacterDictionaryPraznoKoristi ugrađene metapodatke znakova modela prepoznavanja; dostavite lokalni rječnik kada model nema te metapodatke
FontPathPraznoRazrješuje se na %WINDIR%\Fonts\arial.ttf za RapidOCR-ov spremnik rezultata
UseAngleClassifierTrueOmogućuje klasifikaciju kuta teksta; kada je onemogućena, klasifikacijski model nije potreban niti se prosljeđuje
IntraOpThreads1ONNX niti unutar operacije, od 1 do 64, ograničene na broj logičkih CPU-a radnika
InterOpThreads1ONNX niti između operacija s istim ograničenjima
MaxPixels16777216Proračun ulaznih piksela, od 1 do 67.108.864
TimeoutMilliseconds60000Rok cijelog zahtjeva, od 1 do 3.600.000 milisekundi

Most eksplicitno bira ONNX Runtime CPU pozadinski sustav za sve faze i onemogućuje automatska preuzimanja; nedostajući ugrađeni rječnik znakova zahtijeva osigurani lokalni CharacterDictionary

Primjer s eksplicitno odabranim modelima

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 i otkazivanje

Svaki zahtjev serializira posuđeni bitmap u privatni privremeni direktorij, pokreće lokalnog Python radnika te po završetku zahtjeva čisti ručke procesa i privremene datoteke

Preopterećenje s opcijama provjerava MaxPixels prije serializacije bitmape; radnik također provjerava dimenzije ulaza prije učitavanja modela i prima ograničenja MaxWords i MaxTextCodeUnits zahtjeva

Most zatraži koordinate znakova i validira geometriju, pouzdanost i pokrivenost tekstom svakog znaka, a zatim ispušta svaki kompletan prepoznati redak s njegovim izvornim unutarnjim razmacima i interpunkcijom, ograđujućim granicama u pikselima izvorne slike i srednjom pouzdanošću u rasponu od 0 do 1

Svaki ispušteni redak troši jedan MaxWords slot; unutarnji razmaci računaju se u MaxTextCodeUnits, a objava cijelog retka sprječava tekstualni sloj da razmak između slova pomiješa s razmakom između riječi

Razmaci se čuvaju iz teksta retka prepoznavatelja; tekst koji detekcija podijeli u zasebne okvire i dalje ovisi o prostornom zaključivanju praznina između riječi, a vanjski PDF čitači mogu tijekom izdvajanja rekonstruirati ili sažeti ponovljene razmake

Dopunski znakovi troše dvije UTF-16 jedinice; nevažeće koordinate, pouzdanost, kontrolni znakovi ili iscrpljeni proračuni obaraju prepoznavanje i brišu djelomične rezultate

Prazna stranica uspijeva s praznim poljem riječi; nativna osnovna linija nije dostavljena, pa tekstualni sloj koristi svoju postojeću geometrijsku pričuvu

Otkazivanje, vremensko ograničenje i veličine izlaza provjeravaju se svakih 25 milisekundi; Windows posao obuhvaća radnika i sve podređene procese tumača, a terminacija čeka dodatnih najviše pet sekundi za čišćenje procesa

ApplyLoadedOCRTextLayer atomski objavljuje sve odabrane stranice nakon uspješnog prepoznavanja

TSV izlaz ograničen je na 64 MiB, a dijagnostički izlaz na 1 MiB; ulazni i izlazni proračuni ne nameću čvrsti strop potrošnji memorije ONNX modela ni inferencije

Inicijalizacija modela odvija se u novom Python procesu za svaki zahtjev i uračunata je u rok

Validacija

Zajednički Delphi i FPC pokretači adaptera pokrivaju preflight modela, prilagođene putanje, neobaveznu klasifikaciju, Unicode, proračune, pad radnika, otkazivanje i vremensko ograničenje; njihovi neobavezni RapidOCR parametri omogućuju stvarno prepoznavanje i provjere povratnog puta pretraživog PDF-a

Koristite Tests/Delphi/Run-TesseractRecognitionTests.ps1 ili Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 s -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel i -RapidOCRRecognitionModel

Vidi Searchable OCR Text Layers za opcije renderiranja, Unicode mapiranje PDF teksta, grupiranje neobaveznog sadržaja i granice usklađenosti