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

PoljeZadanoZnačenje
DetectionModelch_PP-OCRv3_det_infer.onnxDB model detekcije
RecognitionModelch_PP-OCRv3_rec_infer.onnxKompatibilan PP-OCRv3 ili PP-OCRv4 CTC model prepoznavanja
ClassificationModelch_ppocr_mobile_v2.0_cls_infer.onnxNeobavezni model orijentacije teksta
CharacterDictionaryppocr_keys_v1.txtUTF-8 rječnik bez BOM-a, u redoslijedu znakova modela
UseAngleClassifierTrueKada je onemogućen, klasifikacijski model nije potreban niti se inicijalizira
RightToLeftFalseReda detektirane okvire s desna na lijevo unutar horizontalnih redaka; omogućuje ga arapski preset
Threads1Broj ONNX CPU niti od 1 do 64, ograničen brojem logičkih procesora
MaxPixels16777216Ograničenje ulaznih piksela, od 1 do 67.108.864
TimeoutMilliseconds60000Suradni 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 profilaJeziciUobičajeni prihvaćeni aliase
chPojednostavljeni kineski i engleskizh, zh-CN, zh-Hans, chi_sim
chinese_chtTradicionalni kineskizh-TW, zh-HK, zh-Hant, chi_tra
enEngleskien, en-US, en-GB, eng
latinFrancuski, njemački, španjolski, portugalski, talijanski, nizozemski i turskifr, de, es, pt-BR, it, nl, tr
japanJapanskija, ja-JP, jpn
koreanKorejskiko, ko-KR, kor
cyrillicRuski, ukrajinski, bugarski i bjeloruskiru, ru-RU, rus, uk, bg, be
arabicArapski, perzijski i urduar, fa, ur, ara, fas, urd
devanagariHindi, marati i nepalskihi, 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