RapidOCR Yerel DLL Bağdaştırıcısı
HPDFRapidOCRRecognition; HotPDFRapidOCR.dll tarafından desteklenen işlem içi bir IHPDFOCREngine arayüzü açar ve Delphi, C++Builder ile Windows FPC/Lazarus Win32 ve Win64 derlemelerinde aynı herkese açık API'yi sunar
DLL, CPU ONNX çıkarımını doğrudan bellek anlık görüntüleri üzerinde gerçekleştirir ve başlatılmış modelleri engine arayüzü serbest bırakılana dek tutar; çalışma zamanı dağıtımı, eşleşen yerel DLL ile uyumlu yerel modellerden ve sözlükten oluşur
Mevcut Python süreç bağdaştırıcısı, özgün fabrika overload'larıyla kullanılabilir kalır
Fabrika ve seçenekler
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;
Seçenekleri THPDFRapidOCRDLLOptions.Default ile başlatın; varsayılanlar şu yerel dosyaları kullanır
| Alan | Varsayılan | Anlam |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | DB algılama modeli |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | Uyumlu PP-OCRv3 veya PP-OCRv4 CTC tanıma modeli |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | İsteğe bağlı metin yönelimi modeli |
CharacterDictionary | ppocr_keys_v1.txt | Modelin karakter sırasındaki, BOM'suz UTF-8 sözlük |
UseAngleClassifier | True | Devre dışı bırakıldığında hiçbir sınıflandırma modeli gerekmez ya da başlatılmaz |
RightToLeft | False | Yatay satırlar içinde algılanan kutuları sağdan sola sıralar; Arapça ön ayarı bunu etkinleştirir |
Threads | 1 | 1 ile 64 arası, mantıksal işlemci sayısıyla sınırlanan ONNX CPU iş parçacığı sayısı |
MaxPixels | 16777216 | 1 ile 67.108.864 arası girdi pixel sınırı |
TimeoutMilliseconds | 60000 | 1 ile 3.600.000 milisaniye arası işbirlikçi tanıma son tarihi |
Göreli dosya adları ModelDirectory'ye göre çözümlenir; mutlak yollar ayrıca hazırlanmış dosyaları seçebilir
Fabrika, modelleri başlatmadan önce dosya kullanılabilirliğini, seçenekleri, gereken export'ları ve ABI sürümünü denetler; geçersiz yapılandırma EArgumentException, model yükleme hataları ise yerel bir diagnostic ile EInvalidOperation fırlatır
Model başlatma fabrikada gerçekleşir ve tanıma son tarihinin dışındadır; sözlük sınıf sayıları tanıma modeliyle eşleşmelidir ve yalnızca aynı sınıf sayıları, karakter sırasının veya ön işlemenin uyumlu olduğunu kanıtlamaz
Verilen hat; 1.024 pixel üst sınırlı algılama kenarı ve 50 pixel beyaz dolguyla DB algılama kullanır. Tanıyıcı, girdi yüksekliği 32 veya 48 olarak sabitlenmiş uyumlu NCHW modellerini kabul eder ve değişken yükseklik için 48 kullanır
Tanıma, değişken genişlikli modeller için en-boy oranını korur ve dolgulu girdileri en az 320 genişlikle normalleştirir; sabit genişlikli bir model, yeniden boyutlanan kırpma genişliğini sınırlar ve uzun bir metin satırını sıkıştırabilir
Açı sınıflandırması, kırpma en-boy oranını model girdi genişliği içinde korur ve kullanılmayan pixel'leri normalleştirilmiş sıfırlarla doldurur; bir kırpma yalnızca ters skor 0,9'u aştığında 180 derece döndürülür, böylece zayıf yönelim tahminleri kısa metinleri çeviremez
Sözlük, modelin karakter sırasıyla ve çıktı sınıf sayısıyla eşleşmelidir; CRLF sözlük satır sonları kabul edilir, UTF-8 BOM ise reddedilir
Model karakter üst verisini gömdüğünde fabrika her sözlük girdisini ve sırasını da doğrular; yalnızca sözlük boyutu yeterli değildir
Çince, Rusça ve yaygın diller
THPDFRapidOCRDLLOptions.ForLanguage; paylaşılan algılayıcı, sınıflandırıcı, iş parçacığı, pixel ve timeout varsayılanlarını korurken yerel model dizini altından bir tanıma modeli ve eşleşen sözlük seçer
Metot büyük/küçük harfe duyarsız dil takma adlarını kabul eder, alt çizgileri tireye çevirir ve çevresindeki boşlukları kırpır; boş veya desteklenmeyen bir etiket, modeller yüklenmeden EArgumentException fırlatır
| Profil dizini | Diller | Kabul edilen yaygın takma adlar |
|---|---|---|
ch | Basitleştirilmiş Çince ve İngilizce | zh, zh-CN, zh-Hans, chi_sim |
chinese_cht | Geleneksel Çince | zh-TW, zh-HK, zh-Hant, chi_tra |
en | İngilizce | en, en-US, en-GB, eng |
latin | Fransızca, Almanca, İspanyolca, Portekizce, İtalyanca, Felemenkçe ve Türkçe | fr, de, es, pt-BR, it, nl, tr |
japan | Japonca | ja, ja-JP, jpn |
korean | Korece | ko, ko-KR, kor |
cyrillic | Rusça, Ukraynaca, Bulgarca ve Belarusça | ru, ru-RU, rus, uk, bg, be |
arabic | Arapça, Farsça ve Urduca | ar, fa, ur, ara, fas, urd |
devanagari | Hintçe, Marathi ve Nepalce | hi, mr, ne, hin, mar, nep |
Her profil <profile>/recognition.onnx ve <profile>/dictionary.txt kullanır; profil adları doğrudan kabul edilir ve tanınan bölgesel takma adlar rastgele bir önekten çıkarılmak yerine açıkça tanımlanır
Seçilen model kümelerini dağıtımdan önce SHA256 sabitlenmiş hazırlama yardımcısıyla kurun
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
-Language All dokuz profilin tamamını kurar; -SkipClassifier isteğe bağlı sınıflandırıcıyı atlar, bu durumda bir motor oluştururken UseAngleClassifier := False ayarlayın
Yardımcı, sabitlenmiş SHA256 hash'lerini doğrular ve Default tarafından kullanılan kök dosya adları altında paylaşılan çok dilli bir algılayıcı ile sınıflandırıcı kurar; tanıma çevrimdışı çalışır ve eksik modelleri asla otomatik indirmez
Motorun dilini her sayfa veya bölge için seçin; tek bir motor dili otomatik algılamaz ve farklı yazı sistemleri için ayrı tanıyıcıları birleştirmez
Sabitlenmiş paketler uyumlu PP-OCRv3 ve PP-OCRv4 modellerini kullanır; tanıma doğruluğu modele, fonte, çözünürlüğe ve kırpmana bağlıdır ve Latin modeli temiz girdide bile ñ gibi aksanları karıştırabilir
Daha yeni PP-OCRv5 modelleri, DLL'i derlemek için kullanılan statik kitaplıklardan daha yeni bir ONNX Runtime gerektirebilir; desteklenmeyen bir model biçimi başlatmayı bir diagnostic ile başarısız kılar
Algılama modelleri, yeniden boyutlandırılan girdi çözünürlüğünde [1, 1, H, W] biçiminde tek bir float32 image tensor'ı kabul etmeli ve float32 bir olasılık haritası üretmelidir; uyumsuz türler, boyutlar, sonlu olmayan değerler veya [0, 1] aralığını dört float32 makine epsilonundan fazla aşan olasılıklar, algılama sonuçları kullanılmadan önce diagnostic ile başarısız olur
Bu tolerans içindeki küçük sigmoid yuvarlama hataları, geçerli modeller normal algılama davranışlarını koruyabilsin diye eşikleme ve kontur skorlamasından önce [0, 1] aralığına sıkıştırılır
Çince örneği
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;
Modellerini yeniden kullanmak için engine arayüzünü istekler boyunca saklayın; çağıran uygulamanın mimarisiyle eşleşen bir DLL kullanın ve bağımlılıklarını yanına ya da standart Windows loader dizinlerine koyun
Rusça örneği
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 ve rus aynı cyrillic tanıma modelini ve sözlüğünü seçer
Sonuçlar ve ömür
Bağdaştırıcı, güncel bitmap'i bağımsız bir yukarıdan aşağıya BGR anlık görüntüsüne kopyalar; ayırmadan önce boyutları ve pixel bütçesini denetler ve ödünç bitmap'i değiştirmez
Yerel hat, tanınan her metin satırı için özgün görüntü pixel sınırları ve ortalama karakter confidence değeriyle bir sonuç üretir; her satır bir MaxWords kotası tüketir ve yerel baseline sağlanmaz
Algılanan kutular yatay satır okuma sırasını izler; varsayılan olarak soldan sağa, RightToLeft etkinken sağdan sola. Arapça ön ayarı bu seçeneği etkinleştirir
Açı sınıflandırması tek tek metin kırpışlarını düzeltir; tüm sayfanın yönelimini belirlemez ve ters duran bir sayfanın ayrı algılama kutularını mantıksal okuma sırasına yeniden sıralamaz
Tanınan metin modelin mantıksal Unicode sırasında kalır; bağdaştırıcı Arapça dizeleri otomatik ters çevirmez veya iki yönlü shaping uygulamaz
Bağdaştırıcı UTF-8'i, Unicode kontrol karakterlerini, sınırları, confidence değerini ve isteğin MaxTextCodeUnits sınırını doğrular; 1.048.576 UTF-16 birimlik katı metin üst sınırı vardır ve destek karakterler iki birim tüketir
Boş bir sayfa boş sonuç dizisiyle başarılı olur; bir hata kısmi sonuçları temizler ve aranabilir PDF yayınlama, mevcut atomik sayfa işlemi davranışını korur
Aynı engine üzerindeki çağrılar serileştirilir; engine kilidini bekleme, iptali ve tanıma son tarihini 25 milisaniyede bir denetler
Yerel callback'ler; algılama, sınıflandırma ve tanınan her satırdan önce ve sonra iptali ile son tarihleri denetler. Tek bir ONNX çıkarım çağrısı zorla kesintiye uğratılamaz, bu yüzden iptal güncel aşama bittikten sonra dönebilir
Girdi ve metin sınırları bağdaştırıcı ayırmalarını ve kabul edilen çıktıyı sınırlar; ama model, algılama, kırpma veya çıkarım belleğine katı bir üst sınır getirmez
Derleme ve ABI
Native/RapidOCR; C++ köprüsünü, uyumlu model tanıyıcısını, sürümlü C başlığını, export tanımını ve CMake projesini içerir. DbNet, AngleNet ve OcrUtils açan uyumlu CPU ağ kaynaklarını ve eşleşen ONNX Runtime ile OpenCV kitaplıklarını hazırlayın
C++17 ile Windows MSVC, bir Windows SDK ve CMake 3.20 veya üstünü kullanın; varsayılan derleme, hazırlanan kitaplıklarla eşleşmesi gereken statik release CRT kullanır
& 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 bir OnnxRuntimeConfig.cmake içermeli, OpenCVDirectory ise mimariye özgü kitaplık yapılandırmasını işaret etmelidir; 32 bitlik bir DLL için Win32'yi ve eşleşen x86 kitaplıklarını seçin
Derleme yardımcısı Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll yoluna yazar; -BuildDirectory, -OutputDirectory ve -Generator, derleme konumunu ve Visual Studio üreteci geçersiz kılabilir
Köprü C++ istisnalarını kapsar ve ABI sürüm 1'i HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize ve HPDFRapidOCRDestroy üzerinden açar; tümü cdecl, 32 bitlik durum değerleri ve açık UTF-8 bayt uzunlukları kullanır
ABI sürüm 1 ayrıca isteğe bağlı HPDFRapidOCRSetReadingDirection export'unu tanımlar; bağdaştırıcı buna yalnızca RightToLeft etkinken ihtiyaç duyar, böylece mevcut DLL'ler soldan sağa isteklere hizmet vermeye devam edebilir
Callback'ler metinlerini yalnızca çağrı süresince ödünç alır; bağdaştırıcı doğrulanmış metni döndürmeden önce kopyalar ve engine yıkıcısı, DLL'i yüklemeden önce modelleri yok eder
Doğrulama
Python onnx paketi ve native bir BUILD_TESTING derlemesiyle, geçerli boş çıktıyı, geçersiz tensor rank'lerini, kanal ve türleri, uyuşmayan uzamsal boyutları ve geçersiz olasılıkları DLL ABI'sı üzerinden denetlemek için python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe komutunu çalıştırın; birden çok runner yolu tek çağrıda her iki mimariyi doğrulayabilir
Delphi veya FPC bağdaştırıcı koşucusuna -RapidOCRLanguageModelDirectory ile bir ya da her iki yerel DLL kitaplık parametresini ekleyin; böylece Çince, Rusça, Japonca, Korece, yaygın Latin dilleri, Arapça ve Hintçe örneklerle kurulu tüm ön ayarlar doğrulanır. Rusça ve Geleneksel Çince ayrıca aranabilir PDF kaydetme, yeniden yükleme, metin çıkarma ve pixel karşılaştırmasından geçer
Delphi ve FPC bağdaştırıcı koşucuları; kalıcı model ömrünü, BGR satır düzenini, Unicode ve destek karakterleri, ABI denetimlerini, geçersiz sonuçları, bütçeleri, işbirlikçi iptali, serileştirilmiş kilit beklemesini ve temizliği sınar
Gerçek model doğrulaması, boş sayfalar, hasarlı model işlemesi, İngilizce ve Çince tanıma ve pixel'leri değişmeden kalan aranabilir PDF gidiş-dönüşleri için Tests/Delphi/Run-TesseractRecognitionTests.ps1 veya Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 betiklerine -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library ve -RapidOCRNativeModelDirectory sağlayın
Sayfa render'ı, Unicode PDF metin eşlemesi, optional-content gruplaması ve uygunluk kısıtları için Aranabilir OCR Metin Katmanları sayfasına bakın