Adapter nativne RapidOCR DLL datoteke
HPDFRapidOCRRecognition izlaže IHPDFOCREngine unutar procesa, podržan HotPDFRapidOCR.dll-om, s istim javnim API-jem u Delphi, C++Builder i Windows FPC/Lazarus Win32 i Win64 izvedbama
DLL izvodi CPU ONNX inferenciju izravno nad snimkama memorije i zadržava inicijalizirane modele dok se sučelje motora ne otpusti; izvedbeno raspoređivanje čini odgovarajuća nativna DLL datoteka te kompatibilni lokalni modeli i rječnik
Postojeći Python procesni adapter ostaje dostupan sa svojim izvornim tvorničkim preopterećenjima
Tvornica 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;
Opcije inicijalizirajte s THPDFRapidOCRDLLOptions.Default; zadane vrijednosti koriste sljedeće lokalne datoteke
| Polje | Zadano | 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 | Neobavezni model orijentacije teksta |
CharacterDictionary | ppocr_keys_v1.txt | UTF-8 rječnik bez BOM-a, u redoslijedu znakova modela |
UseAngleClassifier | True | Kada je onemogućen, klasifikacijski model nije potreban niti se inicijalizira |
RightToLeft | False | Reda detektirane okvire s desna na lijevo unutar horizontalnih redaka; omoguć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 | Suradni rok prepoznavanja, od 1 do 3.600.000 milisekundi |
Relativni nazivi datoteka razrješuju se prema ModelDirectory-u; apsolutne putanje mogu odabrati zasebno osigurane datoteke
Tvornica prije inicijalizacije modela provjerava dostupnost datoteka, opcije, potrebne izvoze i verziju ABI-ja; nevažeća konfiguracija podiže EArgumentException, a neuspjesi učitavanja modela podižu EInvalidOperation s nativnom dijagnostikom
Inicijalizacija modela odvija se u tvornici i izvan roka prepoznavanja; brojevi klasa rječnika moraju odgovarati modelu prepoznavanja, a sami identični brojevi klasa ne dokazuju da su redoslijed znakova ili predobrada kompatibilni
Priloženi cjevovod koristi DB detekciju s maksimalnom detekcijskom stranom od 1.024 piksela i 50 piksela bijelog odmaka; prepoznavatelj prihvaća kompatibilne NCHW modele s fiksnom ulaznom visinom 32 ili 48, a za dinamičku visinu koristi 48
Prepoznavanje čuva omjer slika za modele dinamičke širine i normalizira dopunjene ulaze s minimalnom širinom 320; model fiksne širine ograničava širinu promijenjenog izrezka, što može sažeti dugački redak teksta
Klasifikacija kuta čuva omjer slika izrezka unutar širine svog modelnog ulaza a neiskorištene piksele popunja normaliziranim nulama; izrezak se okreće za 180 stupnjeva samo kada ocjena naglavlja prema dolje prelazi 0.9, čime slabe predikcije smjera ne okrenu kratak tekst
Rječnik mora odgovarati redoslijedu znakova modela i broju izlaznih klasa; prihvaćaju se CRLF završeci redaka rječnika, ali UTF-8 BOM se odbija
Kada model ugrađuje metapodatke znakova, tvornica provjerava i svaki unos rječnika i njegov redoslijed; sama veličina rječnika nije dovoljna
Kineski, ruski i uobičajeni jezici
THPDFRapidOCRDLLOptions.ForLanguage odabire model prepoznavanja i odgovarajući rječnik ispod lokalnog direktorija modela uz zadržavanje zajedničkih zadanih vrijednosti detektora, klasifikatora, niti, piksela i vremenskog ograničenja
Metoda prihvaća aliase jezika neosjetljive na velika i mala slova, mijenja podvlake u crtice i odrezuje okolni bijeli prostor; prazna ili nepodržana oznaka podiže EArgumentException prije učitavanja modela
| Direktorij profila | Jezici | Uobičajeni prihvaćeni aliase |
|---|---|---|
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, njemački, španjolski, portugalski, talijanski, nizozemski 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 bjeloruski | ru, ru-RU, rus, uk, bg, be |
arabic | Arapski, perzijski 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; nazivi profila prihvaćaju se izravno, a prepoznati regionalni aliase izričito su definirani umjesto da se izvode iz proizvoljnog prefiksa
Odabrane skupove modela instalirajte prije raspoređivanja pomoćnikom za osiguranje sa zaključanim SHA256 sažecima
& 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 neobavezni klasifikator, pa tada postavite UseAngleClassifier := False pri stvaranju motora
Pomoćnik provjerava zaključane SHA256 sažetke i instalira zajednički višejezični detektor i klasifikator pod korijenskim nazivima datoteka koje koristi Default; prepoznavanje radi offline i nikad ne preuzima nedostajuće modele automatski
Jezik motora odaberite za svaku stranicu ili regiju; jedan motor ne otkriva jezik automatski niti kombinira zasebne prepoznavatelje za različita pisma
Zaključani paketi koriste kompatibilne PP-OCRv3 i PP-OCRv4 modele; točnost prepoznavanja ovisi o modelu, fontu, rezoluciji i izrezku, a latinski model može pobrkati naglaske poput ñ čak i na čistom ulazu
Noviji PP-OCRv5 modeli mogu zahtijevati noviji ONNX Runtime od statičkih knjižnica kojima se DLL gradi; nepodržani format modela obara inicijalizaciju s dijagnostikom
Modeli detekcije moraju prihvatiti jedan float32 slikovni tenzor i proizvesti float32 kartu vjerojatnosti oblika [1, 1, H, W] na razlučivosti promijenjenog ulaza; nekompatibilni tipovi, dimenzije, nefinitne vrijednosti ili vjerojatnosti izvan [0, 1] za više od četiri float32 strojna epsilona propadaju s dijagnostikom prije upotrebe rezultata detekcije
Sićušne pogreške zaokruživanja sigmoide unutar te tolerancije stežu se na [0, 1] prije pragovanja i ocjenjivanja kontura, tako da valjani modeli mogu zadržati svoje uobičajeno ponašanje detekcije
Kineski primjer
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 sučelje motora kroz zahtjeve da biste ponovno koristili njegove modele; koristite DLL koji odgovara arhitekturi aplikacije koja ga poziva te njegove ovisnosti dostavite pored njega ili u standardnim direktorijima Windows učitavača
Ruski primjer
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 odabiru isti cyrillic model prepoznavanja i rječnik
Rezultati i životni vijek
Adapter kopira trenutni bitmap u neovisnu snimku BGR od vrha prema dnu; prije alokacije provjerava dimenzije i pikselni proračun i ne mijenja posuđeni bitmap
Nativni cjevovod ispušta jedan rezultat po prepoznatom retku teksta, s pikselnim granicama izvorne slike i srednjom pouzdanošću znakova; svaki redak troši jedan MaxWords slot, a nativna osnovna linija nije dostavljena
Detektirani okviri slijede redoslijed čitanja horizontalnih redaka, od lijeva na desno prema zadanim postavkama i od desna na lijevo kada je RightToLeft omogućen; arapski preset omogućuje tu opciju
Klasifikacija kuta ispravlja pojedinačne izrezke teksta; ne određuje orijentaciju cijele stranice niti odvojene detektirane okvire okrenute naglavačke preuređuje u logički redoslijed čitanja
Prepoznati tekst ostaje u logičkom Unicode redoslijedu modela; adapter automatski ne obraće arapske nizove niti primjenjuje dvosmjerno oblikovanje
Adapter validira UTF-8, Unicode kontrolne znakove, granice, pouzdanost i ograničenje MaxTextCodeUnits zahtjeva, s čvrstim stropom teksta od 1.048.576 UTF-16 jedinica; dopunski znakovi troše dvije jedinice
Prazna stranica uspijeva s praznim poljem rezultata; neuspjeh briše djelomične rezultate, a objava pretraživog PDF-a zadržava postojeće ponašanje atomske transakcije stranica
Pozivi na istom motoru serializiraju se; čekanje brave motora provjerava otkazivanje i rok prepoznavanja svakih 25 milisekundi
Nativni callbackovi provjeravaju otkazivanje i rokove prije i poslije detekcije, klasifikacije i svakog prepoznatog retka; pojedinačni ONNX inferencijski poziv ne može se nasilno prekinuti, pa se otkazivanje može vratiti tek nakon što trenutna faza završi
Ulazna i tekstualna ograničenja vežu alokacije adaptera i prihvaćeni izlaz, ali ne nameću čvrsti strop memoriji modela, detekcije, izrezka ni inferencije
Gradnja i ABI
Native/RapidOCR sadrži C++ most, kompatibilan modelni prepoznavatelj, verzioniran C zaglavlje, definiciju izvoza i CMake projekt; osigurajte kompatibilne CPU mrežne izvorne kodove koji izlažu DbNet, AngleNet i OcrUtils, uz odgovarajuće knjižnice ONNX Runtime i OpenCV
Koristite Windows MSVC s C++17, Windows SDK i CMake 3.20 ili noviji; zadana gradnja koristi statički release CRT, koji mora odgovarati osiguranim knjižnicama
& 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 sadržavati OnnxRuntimeConfig.cmake, a OpenCVDirectory mora ukazivati na konfiguraciju knjižnica specifičnu za arhitekturu; za 32-bitni DLL odaberite Win32 i odgovarajuće x86 knjižnice
Pomoćnik gradnje zapisuje Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll; -BuildDirectory, -OutputDirectory i -Generator mogu nadjačati smještaj gradnje i Visual Studio generator
Most sadrži C++ iznimke i izlaže ABI verziju 1 kroz HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize i HPDFRapidOCRDestroy; svi koriste cdecl, 32-bitne statusne vrijednosti i izričite UTF-8 duljine u bajtovima
ABI verzija 1 definira i neobavezni izvoz HPDFRapidOCRSetReadingDirection; adapter ga zahtijeva samo kada je RightToLeft omogućen, pa postojeće DLL datoteke i dalje mogu opsluživati zahtjeve s lijeva na desno
Callbackovi posuđuju svoj tekst samo tijekom trajanja poziva; adapter kopira validirani tekst prije povratka, a destruktor motora uništava modele prije istovara DLL datoteke
Validacija
Uz Python paket onnx i nativnu gradnju s BUILD_TESTING-om, pokrenite python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe da biste provjerili valjan prazan izlaz, nevažeće rangove tenzora, kanale i tipove, neusklađene prostorne dimenzije te nevažeće vjerojatnosti kroz DLL ABI; više putanja pokretača može validirati obje arhitekture u jednom pozivu
Dodajte -RapidOCRLanguageModelDirectory i jedan ili oba parametra nativne DLL knjižnice Delphi ili FPC pokretaču adaptera da validirate sve instalirane presetove uz kineske, ruske, japanske, korejske, uobičajene latinske, arapske i hindiske uzorke; ruski i tradicionalni kineski prolaze i spremanje pretraživog PDF-a, ponovno učitavanje, izdvajanje teksta i usporedbu piksela
Delphi i FPC pokretači adaptera testiraju trajan životni vijek modela, BGR raspored redaka, Unicode i dopunske znakove, ABI provjere, nevažeće rezultate, proračune, suradno otkazivanje, serializirano čekanje na bravu i čišćenje
Dostavite -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library i -RapidOCRNativeModelDirectory u Tests/Delphi/Run-TesseractRecognitionTests.ps1 ili Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 za validaciju sa stvarnim modelima, prazne stranice, rukovanje oštećenim modelima, englesko i kinesko prepoznavanje te povratne putove pretraživog PDF-a s nepromijenjenim pikselima renderiranja
Vidi Searchable OCR Text Layers za renderiranje stranica, Unicode mapiranje PDF teksta, grupiranje neobaveznog sadržaja i ograničenja usklađenosti