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
| Polje | Podrazumevano | Značenje |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Lokalni model detekcije |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Lokalni model prepoznavanja |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Potreban samo kada je klasifikacija ugla uključena |
CharacterDictionary | Prazno | Koristi ugrađene metapodatke znakova modela prepoznavanja; dostavite lokalni rečnik kada model nema te metapodatke |
FontPath | Prazno | Razrešava se na %WINDIR%\Fonts\arial.ttf za RapidOCR kontejner rezultata |
UseAngleClassifier | True | Uključuje klasifikaciju ugla teksta; kada je isključena, klasifikacioni model se ne zahteva ni ne prosleđuje |
IntraOpThreads | 1 | ONNX niti unutar operacije, od 1 do 64, ograničene na broj logičkih CPU-ova radnog procesa |
InterOpThreads | 1 | ONNX niti između operacija sa istim granicama |
MaxPixels | 16777216 | Budžet ulaznih piksela, od 1 do 67,108,864 |
TimeoutMilliseconds | 60000 | Rok 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