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
| Alan | Varsayılan | Anlam |
|---|---|---|
PageSegMode | tpsAuto | Yönelim algılaması olmadan otomatik sayfa segmentasyonu |
EngineMode | temDefault | Seçilen dil modellerinin desteklediği motor kipi |
TimeoutMilliseconds | 60000 | 1 ile 3.600.000 milisaniye arası istek son tarihi; DLL iptalle işbirliği yaparken CLI worker'ı timeout'ta sonlandırılır |
MaxPixels | 16777216 | 1 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