RapidOCR adapter za nativni DLL
HPDFRapidOCRRecognition izlaže unutarprocesni IHPDFOCREngine podržan HotPDFRapidOCR.dll-om, sa istim javnim API-jem u Delphi, C++Builder i Windows FPC/Lazarus Win32 i Win64 buildovima
DLL izvršava CPU ONNX zaključivanje direktno nad snimcima memorije i zadržava inicijalizovane modele dok se engine interfejs ne otpusti; radno raspoređivanje se sastoji od odgovarajućeg nativnog DLL-a i kompatibilnih lokalnih modela i rečnika
Postojeći Python procesni adapter ostaje dostupan sa svojim originalnim fabričkim preopterećenjima
Fabrika i opcije
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
ModelDirectory: string): IHPDFOCREngine; overload;
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
ModelDirectory: string; const Options: THPDFRapidOCRDLLOptions): IHPDFOCREngine; overload;
THPDFRapidOCRDLLOptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
UseAngleClassifier: Boolean;
RightToLeft: Boolean;
Threads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCRDLLOptions; static;
class function ForLanguage(const Language: string): THPDFRapidOCRDLLOptions; static;
end;
Inicijalizujte opcije sa THPDFRapidOCRDLLOptions.Default; podrazumevane vrednosti koriste sledeće lokalne datoteke
| Polje | Podrazumevano | Značenje |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | DB model detekcije |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Kompatibilan PP-OCRv3 ili PP-OCRv4 CTC model prepoznavanja |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | Opcioni model orijentacije teksta |
CharacterDictionary | ppocr_keys_v1.txt | UTF-8 rečnik bez BOM-a, u redosledu znakova modela |
UseAngleClassifier | True | Kada je isključen, klasifikacioni model se ne zahteva ni ne inicijalizuje |
RightToLeft | False | Ređa otkrivene okvire s desna na levo unutar horizontalnih redova; uključuje ga arapski preset |
Threads | 1 | Broj ONNX CPU niti od 1 do 64, ograničen brojem logičkih procesora |
MaxPixels | 16777216 | Ograničenje ulaznih piksela, od 1 do 67,108,864 |
TimeoutMilliseconds | 60000 | Kooperativni rok prepoznavanja, od 1 do 3,600,000 milisekundi |
Relativna imena datoteka razrešavaju se u odnosu na ModelDirectory; apsolutne putanje mogu da izaberu posebno pripremljene datoteke
Fabrika proverava dostupnost datoteka, opcije, potrebne eksporte i verziju ABI-ja pre inicijalizacije modela; nevažeća konfiguracija podiže EArgumentException, a neuspesi učitavanja modela podižu EInvalidOperation sa nativnom dijagnostikom
Inicijalizacija modela se dešava u fabrici i nalazi se van roka prepoznavanja; brojevi klasa rečnika moraju da odgovaraju modelu prepoznavanja, a sami identični brojevi klasa ne utvrđuju da su redosled znakova ili predobrada kompatibilni
Dostavljeni proces koristi DB detekciju sa maksimalnom stranom detekcije od 1,024 piksela i 50 piksela belog odstupanja; prepoznavač prihvata kompatibilne NCHW modele sa fiksnom visinom ulaza 32 ili 48 i koristi 48 za dinamičku visinu
Prepoznavanje čuva odnos stranica za modele dinamičke širine i normalizuje dopunjene ulaze sa minimalnom širinom 320; model fiksne širine ograničava širinu isečka promenjene veličine, što može da sabije dugu liniju teksta
Klasifikacija ugla čuva odnos stranica isečka unutar širine ulaza svog modela i popunjava neiskorišćene piksele normalizovanim nulama; isečak se rotira za 180 stepeni samo kada ocena naopakog položaja pređe 0.9, čime slabe predikcije smera ne prevrću kratak tekst
Rečnik mora da odgovara redosledu znakova modela i broju izlaznih klasa; CRLF završeci redova u rečniku se prihvataju, ali UTF-8 BOM se odbacuje
Kada model ugrađuje metapodatke znakova, fabrika takođe proverava svaki unos rečnika i njegov redosled; sama veličina rečnika nije dovoljna
Kineski, ruski i uobičajeni jezici
THPDFRapidOCRDLLOptions.ForLanguage bira model prepoznavanja i odgovarajući rečnik ispod lokalnog direktorijuma modela, uz zadržavanje zajedničkih podrazumevanih vrednosti za detektor, klasifikator, niti, piksele i tajmaut
Metod prihvata jezičke alias-e neosetljive na velika i mala slova, menja donje crte u crtice i odseca okolne praznine; prazna ili nepodržana oznaka podiže EArgumentException pre učitavanja modela
| Direktorijum profila | Jezici | Uobičajeni prihvaćeni aliasi |
|---|---|---|
ch | Pojednostavljeni kineski i engleski | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Tradicionalni kineski | zh-TW, zh-HK, zh-Hant, chi_tra |
en | Engleski | en, en-US, en-GB, eng |
latin | Francuski, nemački, španski, portugalski, italijanski, holandski i turski | fr, de, es, pt-BR, it, nl, tr |
japan | Japanski | ja, ja-JP, jpn |
korean | Korejski | ko, ko-KR, kor |
cyrillic | Ruski, ukrajinski, bugarski i beloruski | ru, ru-RU, rus, uk, bg, be |
arabic | Arapski, persijski i urdu | ar, fa, ur, ara, fas, urd |
devanagari | Hindi, marati i nepalski | hi, mr, ne, hin, mar, nep |
Svaki profil koristi <profile>/recognition.onnx i <profile>/dictionary.txt; imena profila se prihvataju direktno, a prepoznati regionalni aliasi su eksplicitno definisani, a ne izvedeni iz proizvoljnog prefiksa
Instalirajte izabrane setove modela pre raspoređivanja pomoću pomoćne skripte sa zaključanim SHA256 heševima
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All instalira svih devet profila; -SkipClassifier izostavlja opcionu klasifikaciju, u kom slučaju postavite UseAngleClassifier := False pri kreiranju engine-a
Pomoćna skripta proverava zaključane SHA256 heševe i instalira zajednički višejezični detektor i klasifikator pod korenskim imenima koja koristi Default; prepoznavanje se izvršava offline i nikada ne preuzima nedostajuće modele automatski
Izaberite jezik engine-a za svaku stranicu ili region; jedan engine ne otkriva jezik automatski niti kombinuje odvojene prepoznavače za različita pisma
Zaključani paketi koriste kompatibilne PP-OCRv3 i PP-OCRv4 modele; tačnost prepoznavanja zavisi od modela, fonta, rezolucije i isečka, a latinični model može da pomeša akcente poput ñ čak i na čistom ulazu
Noviji PP-OCRv5 modeli mogu da zahtevaju noviji ONNX Runtime od statičkih biblioteka korišćenih za gradnju DLL-a; nepodržan format modela ne uspeva pri inicijalizaciji sa dijagnostikom
Modeli detekcije moraju da prihvate jedan float32 tenzor slike i da proizvode float32 mapu verovatnoća oblika [1, 1, H, W] na razrešenoj ulaznoj rezoluciji; nekompatibilni tipovi, dimenzije, nefinitne vrednosti ili verovatnoće van [0, 1] za više od četiri float32 mašinska epsilona padaju s dijagnostikom pre nego što se rezultati detekcije iskoriste
Sitne sigmoid zaokruživačke greške unutar te tolerancije stežu se na [0, 1] pre pragovanja i ocenjivanja kontura tako da validni modeli mogu da zadrže svoje normalno ponašanje detekcije
Primer za kineski
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddNativeRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCRDLLOptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCRDLLOptions.ForLanguage('zh-CN');
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCRDLLOCREngine(
'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Native RapidOCR text layer was not added');
end;
Zadržite interfejs engine-a kroz više zahteva da biste ponovo koristili njegove modele; koristite DLL koji odgovara arhitekturi aplikacije koja poziva, a njegove zavisnosti dostavite pored njega ili u standardnim direktorijumima Windows loader-a
Primer za ruski
procedure AddRussianRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCRDLLOptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCRDLLOptions.ForLanguage('ru-RU');
Engine := HPDFCreateRapidOCRDLLOCREngine(
'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Russian RapidOCR text layer was not added');
end;
ru, ru-RU i rus biraju isti cyrillic model prepoznavanja i rečnik
Rezultati i životni vek
Adapter kopira trenutni bitmap u nezavisni snimak BGR odozgo nadole; proverava dimenzije i budžet piksela pre alokacije i ne menja pozajmljeni bitmap
Nativni proces emituje jedan rezultat po prepoznatoj liniji teksta, sa granicama u pikselima originalne slike i prosečnim poverenjem znakova; svaka linija troši jedan MaxWords slot, a nativne osnovne linije se ne isporučuju
Otkriveni okviri prate redosled čitanja horizontalnih redova, s leva na desno po podrazumevanoj postavci i s desna na levo kada je RightToLeft uključen; arapski preset uključuje ovu opciju
Prepoznati tekst ostaje u logičkom Unicode redosledu modela; adapter ne okreće arapske niske automatski niti primenjuje dvosmerno oblikovanje
Klasifikacija ugla ispravlja pojedinačne isečke teksta; ne određuje orijentaciju cele stranice niti preuređuje odvojene okvire detekcije naopake stranice u logičan redosled čitanja
Adapter validira UTF-8, Unicode kontrolne znakove, granice, poverenje i limit MaxTextCodeUnits iz zahteva, sa čvrstim plafonom teksta od 1,048,576 UTF-16 jedinica; dopunski znakovi troše dve jedinice
Prazna stranica uspeva sa praznim nizom rezultata; neuspeh briše delimične rezultate, a objavljivanje PDF-a koji se može pretraživati zadržava postojeće ponašanje atomske transakcije stranica
Pozivi na istom engine-u se serijalizuju; čekanje na bravu engine-a proverava otkazivanje i rok prepoznavanja na svakih 25 milisekundi
Nativni callback-ovi proveravaju otkazivanje i rokove pre i posle detekcije, klasifikacije i svake prepoznate linije; pojedinačni ONNX poziv zaključivanja ne može se nasilno prekinuti, pa otkazivanje može da se prijavi tek nakon što se tekuća faza završi
Ulazna i tekstualna ograničenja vezuju alokacije adaptera i prihvaćeni izlaz, ali ne nameću čvrstu granicu memoriji modela, detekcije, isečaka ili zaključivanja
Gradnja i ABI
Native/RapidOCR sadrži C++ most, kompatibilan prepoznavač modela, verzionisan C zaglavlje, definiciju eksporta i CMake projekat; pripremite kompatibilne CPU mrežne izvore koji izlažu DbNet, AngleNet i OcrUtils, uz odgovarajuće ONNX Runtime i OpenCV biblioteke
Koristite Windows MSVC sa C++17, Windows SDK i CMake 3.20 ili noviji; podrazumevana gradnja koristi statički release CRT, koji mora da odgovara pripremljenim bibliotekama
& tools/Build-HotPDFRapidOCR.ps1 `
-NativeSourceDirectory C:/OCR/native-sources `
-OnnxRuntimeDirectory C:/OCR/onnxruntime/windows-x64 `
-OpenCVDirectory C:/OCR/opencv/x64/vc16/staticlib `
-Platform Win64
OnnxRuntimeDirectory mora da sadrži OnnxRuntimeConfig.cmake, a OpenCVDirectory mora da ukazuje na konfiguraciju biblioteka specifičnu za arhitekturu; izaberite Win32 i odgovarajuće x86 biblioteke za 32-bitni DLL
Pomoćna skripta za gradnju upisuje Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; -BuildDirectory, -OutputDirectory i -Generator mogu da prekrive mesto gradnje i Visual Studio generator
Most sadrži C++ izuzetke i izlaže ABI verziju 1 kroz HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize i HPDFRapidOCRDestroy; svi koriste cdecl, 32-bitne statusne vrednosti i eksplicitne UTF-8 dužine u bajtovima
ABI verzija 1 takođe definiše opcion eksport HPDFRapidOCRSetReadingDirection; adapter ga zahteva samo kada je RightToLeft uključen, pa postojeći DLL-ovi i dalje mogu da opslužuju zahteve s leva na desno
Callback-ovi pozajmljuju svoj tekst samo tokom trajanja poziva; adapter kopira validirani tekst pre vraćanja, a destruktor engine-a uništava modele pre istovarivanja DLL-a
Validacija
Uz Python onnx paket i nativnu BUILD_TESTING gradnju, pokrenite python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe da proverite ispravan prazan izlaz, neispravne rangove tenzora, kanale i tipove, nepodudarne prostorne dimenzije i neispravne verovatnoće kroz DLL ABI; više putanja runner-a može da validira obe arhitekture u jednom pozivu
Dodajte -RapidOCRLanguageModelDirectory i jedan ili oba parametra nativne DLL biblioteke Delphi ili FPC adapter runner-u da biste validirali sve instalirane preset-e uz kineske, ruske, japanske, korejske, uobičajene latinične, arapske i hindi uzorke; ruski i tradicionalni kineski prolaze i kroz čuvanje, ponovno učitavanje, ekstrakciju teksta i poređenje piksela PDF-a koji se može pretraživati
Delphi i FPC adapter runner-i testiraju trajan životni vek modela, BGR raspored redova, Unicode i dopunske znakove, ABI provere, nevažeće rezultate, budžete, kooperativno otkazivanje, serijalizovano čekanje na bravu i čišćenje
Dostavite -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library i -RapidOCRNativeModelDirectory u Tests/Delphi/Run-TesseractRecognitionTests.ps1 ili Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 za stvarnu validaciju modela, prazne stranice, rukovanje oštećenim modelima, prepoznavanje engleskog i kineskog i povratne krugove PDF-a koji se može pretraživati sa nepromenjenim renderovanim pikselima
Pogledajte slojeve OCR teksta koji se mogu pretraživati za renderovanje stranica, mapiranje Unicode teksta u PDF, grupisanje opcionog sadržaja i uslove usaglašenosti