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

AlanVarsayılanAnlam
DetectionModelch_PP-OCRv3_det_infer.onnxDB algılama modeli
RecognitionModelch_PP-OCRv3_rec_infer.onnxUyumlu PP-OCRv3 veya PP-OCRv4 CTC tanıma modeli
ClassificationModelch_ppocr_mobile_v2.0_cls_infer.onnxİsteğe bağlı metin yönelimi modeli
CharacterDictionaryppocr_keys_v1.txtModelin karakter sırasındaki, BOM'suz UTF-8 sözlük
UseAngleClassifierTrueDevre dışı bırakıldığında hiçbir sınıflandırma modeli gerekmez ya da başlatılmaz
RightToLeftFalseYatay satırlar içinde algılanan kutuları sağdan sola sıralar; Arapça ön ayarı bunu etkinleştirir
Threads11 ile 64 arası, mantıksal işlemci sayısıyla sınırlanan ONNX CPU iş parçacığı sayısı
MaxPixels167772161 ile 67.108.864 arası girdi pixel sınırı
TimeoutMilliseconds600001 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 diziniDillerKabul edilen yaygın takma adlar
chBasitleştirilmiş Çince ve İngilizcezh, zh-CN, zh-Hans, chi_sim
chinese_chtGeleneksel Çincezh-TW, zh-HK, zh-Hant, chi_tra
enİngilizceen, en-US, en-GB, eng
latinFransızca, Almanca, İspanyolca, Portekizce, İtalyanca, Felemenkçe ve Türkçefr, de, es, pt-BR, it, nl, tr
japanJaponcaja, ja-JP, jpn
koreanKoreceko, ko-KR, kor
cyrillicRusça, Ukraynaca, Bulgarca ve Belarusçaru, ru-RU, rus, uk, bg, be
arabicArapça, Farsça ve Urducaar, fa, ur, ara, fas, urd
devanagariHintçe, Marathi ve Nepalcehi, 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