RapidOCR adapter za lokalne modele

Za keširano ONNX zaključivanje unutar procesa koristite RapidOCR adapter za nativni DLL sa HPDFCreateRapidOCRDLLOCREngine i THPDFRapidOCRDLLOptions

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

HPDFRapidOCRRecognition obezbeđuje Windows procesni adapter koji implementira IHPDFOCREngine u Delphi, C++Builder i FPC/Lazarus Win32 i Win64 buildovima

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

Python se izvršava u odvojenom skrivenom procesu, pa njegova arhitektura može da se razlikuje od arhitekture aplikacije koja ga poziva; njegov ONNX Runtime paket mora da odgovara arhitekturi sopstvenog Python-a

Preopterećenja fabrike

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

Originalno preopterećenje sa tajmautom ostaje kompatibilno sa postojećim protokolom mosta i koristi tri podrazumevana imena PP-OCRv4 modela; pri konstrukciji proverava putanje izvršne datoteke, skripte i direktorijuma, a dostupnost modela proverava u radnom procesu

Preopterećenje sa opcijama proverava svaki traženi model, opcion rečnik i lokalni font pre nego što vrati adapter; nedostajuće datoteke ili nevažeće opcije podižu EArgumentException pre početka prepoznavanja

Relativne putanje modela, rečnika i fontova razrešavaju se u odnosu na ModelDirectory; apsolutne putanje mogu da ukazuju na posebno pripremljene datoteke

Koristite modele kompatibilne sa RapidOCR procesom detekcije, klasifikacije i CTC prepoznavanja; model iz drugog OCR procesa može da zahteva drugačiju predobradu i ne može se izabrati samo zato što koristi ONNX format

Izbor modela po jeziku

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

Pripremite lokalne jezičke modele i rečnike pomoću tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ili izaberite -Language All za svih devet jezičkih profila

Pomoćna skripta proverava zaključane SHA256 heševe i smešta svaki prepoznavač u <profile>/recognition.onnx uz pripadajući <profile>/dictionary.txt; prepoznavanje u toku rada ostaje offline, bez automatskih preuzimanja

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

Korenska imena detektora i klasifikatora iznad odgovaraju zajedničkim modelima pomoćne skripte za pripremu; odgovarajući model prepoznavanja i rečnik dostavljate zajedno, a za stranice ili regione kojima treba drugo pismo izaberite poseban engine

Opcije i podrazumevane 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;

Inicijalizujte zapis sa THPDFRapidOCROptions.Default pre prekrivanja polja

PoljePodrazumevanoZnač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 klasifikacija ugla uključena
CharacterDictionaryPraznoKoristi ugrađene metapodatke znakova modela prepoznavanja; dostavite lokalni rečnik kada model nema te metapodatke
FontPathPraznoRazrešava se na %WINDIR%\Fonts\arial.ttf za RapidOCR kontejner rezultata
UseAngleClassifierTrueUključuje klasifikaciju ugla teksta; kada je isključena, klasifikacioni model se ne zahteva ni ne prosleđuje
IntraOpThreads1ONNX niti unutar operacije, od 1 do 64, ograničene na broj logičkih CPU-ova radnog procesa
InterOpThreads1ONNX niti između operacija sa istim granicama
MaxPixels16777216Budžet ulaznih piksela, od 1 do 67,108,864
TimeoutMilliseconds60000Rok celog zahteva, od 1 do 3,600,000 milisekundi

Most eksplicitno bira ONNX Runtime CPU pozadinski sloj za sve faze i onemogućava automatska preuzimanja; kada ugrađeni rečnik znakova nedostaje, potreban je pripremljen lokalni CharacterDictionary

Primer sa eksplicitno izabranim 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, budžeti i otkazivanje

Svaki zahtev serijalizuje pozajmljeni bitmap u privatni privremeni direktorijum, pokreće lokalni Python radni proces i čišća njegove handlove procesa i privremene datoteke kada se zahtev završi

Preopterećenje sa opcijama proverava MaxPixels pre serijalizacije bitmape; radni proces takođe proverava dimenzije ulaza pre učitavanja modela i prima limite MaxWords i MaxTextCodeUnits iz zahteva

Most traži koordinate znakova i validira geometriju, poverenje i pokrivenost teksta svakog znaka, a zatim emituje svaku kompletnu prepoznatu liniju sa njenim originalnim unutrašnjim razmacima i interpunkcijom, obuhvatajućim granicama u pikselima originalne slike i prosečnim poverenjem u opsegu od 0 do 1

Svaka emitovana linija troši jedan MaxWords slot; unutrašnji razmaci računaju se u MaxTextCodeUnits, a objavljivanje cele linije sprečava tekstualni sloj da razmak između slova pomeša sa razmakom između reči

Razmaci se čuvaju iz teksta linije prepoznavača; tekst koji detekcija podeli u odvojene okvire i dalje zavisi od prostornog zaključivanja praznina između reči, a spoljašnji PDF čitaoci mogu tokom ekstrakcije da rekonstruišu ili sažmu ponovljene razmake

Dopunski znakovi troše dve UTF-16 jedinice; nevažeće koordinate, poverenje, kontrolni znakovi ili iscrpljeni budžeti obaraju prepoznavanje i brišu delimične rezultate

Prazna stranica uspeva sa praznim nizom reči; nativne osnovne linije se ne isporučuju, pa tekstualni sloj koristi svoj postojeći geometrijski rezervni postupak

Otkazivanje, tajmaut i veličine izlaza proveravaju se na svakih 25 milisekundi; Windows job obuhvata radni proces i sve podređene procese interpretera, a prekid čeka još do pet sekundi da se procesi očiste

ApplyLoadedOCRTextLayer atomski objavljuje sve izabrane stranice nakon uspešnog prepoznavanja

TSV izlaz je ograničen na 64 MiB, a dijagnostički izlaz na 1 MiB; ulazni i izlazni budžeti ne nameću čvrstu granicu upotrebi memorije ONNX modela ili zaključivanja

Inicijalizacija modela se dešava u novom Python procesu za svaki zahtev i ulazi u rok zahteva

Validacija

Zajednički Delphi i FPC adapter runner-i pokrivaju preflight modela, prilagođene putanje, opcionu klasifikaciju, Unicode, budžete, neuspeh radnog procesa, otkazivanje i tajmaut; njihovi opciono RapidOCR parametri omogućavaju stvarno prepoznavanje i provere povratnog kruga PDF-a koji se može pretraživati

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

Pogledajte slojeve OCR teksta koji se mogu pretraživati za opcije renderovanja, mapiranje Unicode teksta u PDF, grupisanje opcionog sadržaja i limite usaglašenosti