Tesseract OCR Bağdaştırıcıları

HPDFTesseractRecognition; aranabilir OCR metin katmanları için IHPDFOCREngine arayüzünü gerçekleyen isteğe bağlı Windows motorları sunar

Yerel DLL fabrikası

function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
  TessDataDirectory, Language: string): IHPDFOCREngine; overload;
function HPDFCreateTesseractDLLOCREngine(const LibraryPath,
  TessDataDirectory, Language: string;
  const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;

Tesseract 5 uyumlu C API'sini açan mevcut bir Tesseract DLL'i, bir tessdata dizini ve eng, chi_sim ya da chi_sim+eng gibi ASCII bir dil tanımlayıcısı veya bileşimi sağlayın

Kitaplık mimarisi uygulamayla eşleşmelidir: Win32 bir uygulama 32 bitlik DLL yükler, Win64 bir uygulama ise 64 bitlik DLL yükler

Gerekli bağımlılık DLL'lerini seçilen kitaplığın yanında ya da standart Windows loader dizinlerinde tutun; bağdaştırıcı, geçerli dizini veya süreç arama yolunu değiştirmeden açık kitaplık yolunu yükler

Fabrika; döndürmeden önce istenen her .traineddata dosyasını doğrular, kitaplığı yükler ve gereken export'ları çözer. Geçersiz yollar, modeller ve seçenekler, eksik export'lar, mimari uyuşmazlıkları ve kullanılamayan bağımlılıklar istisna fırlatır

Hiçbir OCR çalışma zamanı veya modeli paketle gelmez ve otomatik indirilmez

Her iki fabrika da Delphi ve C++Builder derlemelerinin yanı sıra Windows FPC/Lazarus paketinde de kullanılabilir; HPDFTesseractRecognition'ı kullanmadan önce hedef mimari için Lib/FPC/HotPDFLaz.lpk'yi yeniden derleyin

Yerel FPC bağdaştırıcısı, scanline'lar üzerinden yazılan pixel'ler dahil güncel LCL ham görüntüsünü okur ve Unicode kelimeleri sistem ANSI kod sayfasından bağımsız olarak korur

Seçenekler

THPDFTesseractOptions = record
  PageSegMode: THPDFTesseractPageSegMode;
  EngineMode: THPDFTesseractEngineMode;
  TimeoutMilliseconds: Cardinal;
  MaxPixels: Integer;
  class function Default: THPDFTesseractOptions; static;
end;

Alanları geçersiz kılmadan önce THPDFTesseractOptions.Default'u çağırın; aynı kayıt, yerel DLL fabrikasını veya yerel CLI options overload'unu yapılandırabilir

AlanVarsayılanAnlam
PageSegModetpsAutoYönelim algılaması olmadan otomatik sayfa segmentasyonu
EngineModetemDefaultSeçilen dil modellerinin desteklediği motor kipi
TimeoutMilliseconds600001 ile 3.600.000 milisaniye arası istek son tarihi; DLL iptalle işbirliği yaparken CLI worker'ı timeout'ta sonlandırılır
MaxPixels167772161 ile 67.108.864 pixel arasında yapılandırılabilir girdi pixel bütçesi
THPDFTesseractPageSegMode = (
  tpsOSDOnly, tpsAutoOSD, tpsAutoOnly, tpsAuto, tpsSingleColumn,
  tpsSingleBlockVertical, tpsSingleBlock, tpsSingleLine, tpsSingleWord,
  tpsCircleWord, tpsSingleCharacter, tpsSparseText, tpsSparseTextOSD,
  tpsRawLine);
THPDFTesseractEngineMode = (
  temLegacyOnly, temLSTMOnly, temLegacyAndLSTM, temDefault);

tpsOSDOnly ve tpsAutoOnly kelime tanıması yapmaz ve bağdaştırıcı tarafından reddedilir; tpsAutoOSD ve tpsSparseTextOSD ayrıca osd.traineddata gerektirir

Tek metin satırı için tpsSingleLine'ı, tekdüze bir blok için tpsSingleBlock'u, dağınık metin için tpsSparseText'i kullanın; bu kipler taramanın perspektifini onarmaz ve genel bir düzen garantisi vermez

temLSTMOnly LSTM modelleri gerektirir; eski kipler ise ilgili eski model bileşenlerini gerektirir. Desteklenmeyen bileşimler yerel başlatma sırasında başarısız olur

Aranabilir PDF örneği

PDF'in çoktan yüklenmiş olması ve DLL'in, bağımlılıkların ve dil modellerinin gösterilen konumlarda kurulu olması gerekir

uses SysUtils, HPDFDoc, HPDFTesseractRecognition;

procedure AddNativeOCRText(PDF: THotPDF);
var
  Engine: IHPDFOCREngine;
  NativeOptions: THPDFTesseractOptions;
  LayerOptions: THPDFOCRTextLayerOptions;
  Info: THPDFOCRTextLayerInfo;
begin
  NativeOptions := THPDFTesseractOptions.Default;
  NativeOptions.EngineMode := temLSTMOnly;
  NativeOptions.PageSegMode := tpsAuto;
  Engine := HPDFCreateTesseractDLLOCREngine(
    'C:\OCR\libtesseract-5.dll', 'C:\OCR\tessdata',
    'chi_sim+eng', NativeOptions);
  LayerOptions := THPDFOCRTextLayerOptions.Default;
  if not PDF.ApplyLoadedOCRTextLayer([0], Engine, LayerOptions, Info) then
    raise Exception.Create(string(Info.Diagnostic));
end;

Sonuçlar ve sahiplik

Bağdaştırıcı, ödünç bitmap'i yukarıdan aşağıya gri tonlamalı bir tampona kopyalar, istek DPI'sını iletir ve isteğe özel yerel bir API örneği üzerinden tanır

Kelimeler yerel okuma sırasını, doğrulanmış UTF-8 Unicode metnini, sol üst pixel sınırlarını ve 0-100 aralığından 0-1 aralığına ölçeklenen confidence değerini korur; destek karakterler iki UTF-16 birimi tüketir

Kullanılabilir kelime baseline'ları her iki uç noktasıyla geçirilir; bir baseline kullanılamadığında mevcut metin katmanı geometri yedeği uygulanır

Ağırlıklı olarak dikey bir baseline için yerel bağdaştırıcı, kelime kutusu genişliğini TextHeightPixels olarak kullanır; yatay baseline'lar, ters okuma yönleri dahil kutu yüksekliğini kullanır, böylece dikey bir kelimenin uzunluğu font boyutuna dönüşmez

Bu baskın eksen tahminidir: eksen hizalı bir kelime kutusu ve baseline tek başına rastgele eğim açılarında kesin metin yüksekliğini kurtaramaz

Boş bir sayfa boş kelime dizisiyle başarılı olur; bozuk UTF-8, gömülü kontrol karakterleri, geçersiz geometri veya confidence, tükenen kelime ya da metin bütçeleri, iptal ve tanıma hataları False döndürür, tüm kısmi kelimeleri temizler ve diagnostic'ı doldurur

Her istek; iterator'ünü, ayrılmış yerel string'lerini, monitor'ünü ve API örneğini serbest bırakır; bağdaştırıcının serbest bırakılması kitaplık referansını yükler

Sınırlar ve iptal

Girdi boyutlarının her biri en fazla 32.767 pixel olmalı ve MaxPixels'e uymalıdır; tanınan metin isteğin MaxTextCodeUnits bütçesine ve bağdaştırıcının 1.048.576 UTF-16 birimlik sınırına, kelime sayısı ise MaxWords'e uymalıdır

Bağdaştırıcı; bitmap dönüşümü ve sonuç yinelemesi sırasında iptali ve geçen süreyi denetler ve tanıma sırasında kalan son tarihi ve bir iptal callback'ini taşıyan yerel bir monitor sağlar

Yerel iptal işbirlikidir: Tesseract'ın monitor'ü kelime tanımasını kapsar ve her başlatma veya düzen analizi adımını kesintiye uğratmaz; bu çağrılar, istenen iptal ya da dolmuş son tarih bildirilmeden önce tamamlanabilir

Pixel ve çıktı bütçeleri, yerel kitaplığın model veya tanıma bellek kullanımına katı bir sınır getirmez; uygulama ayrı olarak sonlandırılabilir bir worker gerektiriyorsa süreç bağdaştırıcısını kullanın

ApplyLoadedOCRTextLayer tüm sonuçları doğrular ve seçilen her sayfayı atomik olarak yayınlar; böylece bir bağdaştırıcı hatası yüklenen belgeyi değiştirmez

DLL bağdaştırıcısı geçersiz UTF-8'i reddeder, çözülen kelime metninin boşluklarını kırpar ve sonuçları döndürmeden önce kalan C0, DEL ve C1 kontrol karakterlerini reddeder; böylece bozuk metin, PDF metin katmanı tarafından sessizce atlanmak yerine isteği başarısız kılar

Yerel CLI fabrikası

function HPDFCreateTesseractOCREngine(const ExecutablePath,
  TessDataDirectory, Language: string;
  TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
  TessDataDirectory, Language: string;
  const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;

Options overload'u PageSegMode'u --psm olarak ve EngineMode'u --oem olarak iletir, yapılandırılan timeout'u kullanır ve ödünç bitmap'i kaydetmeden veya worker başlatmadan önce MaxPixels değerini denetler

Mevcut timeout overload'u, yeni bir bağdaştırıcı pixel sınırı dayatmadan otomatik sayfa segmentasyonunu ve çalıştırılabilirin seçtiği engine kipini korur; açık bir girdi sınırı gerektiğinde options overload'unu kullanın

Her iki overload da istenen DPI'yı, TSV çıktısını, kısıtlı devralınan handle'ları, iptal yoklamasını ve hata hâlinde worker sonlandırmasını korur; CLI'nın yerel baseline bilgisi yoktur, TSV çıktısını 64 MiB ile ve diagnostic dosya çıktısını 1 MiB ile sınırlar

Geçersiz segmentasyon kipleri, engine kipleri, timeout'lar ve pixel limitleri, yapılandırılan engine oluşturulurken EArgumentException fırlatır; model kullanılabilirliği (yönelim kipleri için osd.traineddata dahil) ile model/engine uyumluluğu tanıma sırasında çalıştırılabilir tarafından denetlenir

var
  CLIOptions: THPDFTesseractOptions;
  Engine: IHPDFOCREngine;
begin
  CLIOptions := THPDFTesseractOptions.Default;
  CLIOptions.PageSegMode := tpsSingleLine;
  CLIOptions.EngineMode := temLSTMOnly;
  CLIOptions.MaxPixels := 8000000;
  Engine := HPDFCreateTesseractOCREngine(
    'C:\OCR\tesseract.exe', 'C:\OCR\tessdata', 'eng', CLIOptions);
end;

Yalıtılmış bir kelime için tpsSingleWord'ü, dağınık metin için tpsSparseText'i veya tek dikey blok için uygun bir dikey-metin modeliyle tpsSingleBlockVertical'i kullanın; fabrika sayfa kırpma veya model seçimi yapmaz

CLI bağdaştırıcısı UTF-8'i katı biçimde doğrular, tanınan kelimelerin içindeki NUL baytlarını ve C0/C1 kontrol karakterlerini reddeder ve hatalı biçimli çıktı, geçerli bir kelimenin ardından gelirse tüm sonuçları temizler

CLI örneği, render seçenekleri, optional-content gruplaması ve uygunluk sınırları için Aranabilir OCR Metin Katmanları sayfasına bakın