Aranabilir OCR Metin Katmanları
HotPDF, uygulamanın sağladığı bir OCR engine için seçili yüklenmiş sayfaları render edebilir ve tanınan her kelimeyle hizalı, aranabilir görünmez Unicode metnini atomik olarak ekleyebilir
SearchableOCR konsol demosu çalıştırılabilir bir iş akışı sunar: --create-sample ile üç sayfalık yalnızca-görüntü örnek dosyası üretin, yerleşik OCR, RapidOCR veya Tesseract DLL/CLI tanımasını seçin, sayfaları belirleyin, güven ve kaynak limitlerini yapılandırın ve dönüşüm istatistikleriyle aranabilir bir kopya kaydedin
Motor entegrasyonu
Uygulamanın erişebildiği herhangi bir senkron OCR provider ile IHPDFOCREngine arayüzünü gerçekleştirin
Engine; ödünç verilmiş bir TBitmap, istenen DPI, normalleştirilmiş sayfa döndürmesi, media-box koordinatları, kalan kelime ve UTF-16 bütçeleri ile etkili cancellation token'ı THPDFOCRRequest üzerinden alır
Kelime kutuları ve opsiyonel baseline'lar sol üst bitmap pixel koordinatlarını kullanır; engine, Recognize döndükten sonra ödünç alınan bitmap'i saklamamalı veya serbest bırakmamalıdır
İsteğe bağlı yerel motorlar
Sürüm 2.754.0; Windows üzerinde IHPDFOCREngine döndüren açık Tesseract ve RapidOCR fabrikaları ekler. Motorsuz aşırı yükleme hâlen var olan yerleşik motoru seçer
Seçilen motoru, bağdaştırıcısını oluşturmadan önce yerel olarak kurun ve hazırlayın, ardından bu bağdaştırıcıyı ApplyLoadedOCRTextLayer'in motor aşırı yüklemesine geçirin. Çalıştırılabilirler, Python paketleri ve OCR modelleri isteğe bağlı harici bağımlılıklardır ve HotPDF ile paketlenmez
Tesseract
İsteğe bağlı yerel Tesseract DLL bağdaştırıcısı; HPDFCreateTesseractDLLOCREngine ve THPDFTesseractOptions üzerinden yapılandırılabilir sayfa segmentasyonu ve motor kipleri, çok dilli tanıma ve yerel kelime baseline'ları ekler
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Bildirim HPDFTesseractRecognition içindedir; TSV çıktısı verebilen bir Tesseract çalıştırılabiliri ve istenen dil modelini içeren bir veri dizini sağlayın (örneğin chi_sim için chi_sim.traineddata)
Options overload'u, açık sayfa segmentasyonu, tanıma engine kipi, timeout ve girdi pixel limitiyle birlikte THPDFTesseractOptions.Default kabul eder; girdi yerleşimine uymak için tpsSingleLine, tpsSingleWord veya tpsSparseText seçin, bkz. Tesseract OCR Adapters
Bu örnek, çalıştırılabilirin ve verinin gösterilen yollara çoktan kurulduğunu ve PDF'in yüklenmiş bir THotPDF örneği olduğunu varsayar
uses SysUtils, HPDFDoc, HPDFTesseractRecognition;
procedure AddTesseractText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateTesseractOCREngine(
'C:\OCR\Tesseract\tesseract.exe',
'C:\OCR\Tesseract\tessdata', 'chi_sim', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
RapidOCR
Yerel RapidOCR DLL bağdaştırıcısı; HPDFCreateRapidOCRDLLOCREngine üzerinden kalıcı işlem içi CPU ONNX modelleriyle bellek anlık görüntülerini tanır ve Delphi, C++Builder ile Windows FPC/Lazarus derlemelerinde isteğe bağlı açı sınıflandırması ve işbirlikçi iptal sunar
RapidOCR yerel model bağdaştırıcısı; Delphi, C++Builder ve FPC/Lazarus derlemelerinde açık ONNX model yolları, isteğe bağlı açı sınıflandırması, yerel karakter sözlükleri ve fontlar, CPU iş parçacığı sınırları ve bir girdi pixel bütçesi için bir THPDFRapidOCROptions overload'u da sağlar
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Bildirim HPDFRapidOCRRecognition içindedir; Python'u rapidocr ve onnxruntime ile hazırlayın, verilen tools/OCR/rapidocr_tsv.py köprüsünü ve bu üç yerel modeli sağlayın
ch_PP-OCRv4_det_mobile.onnxch_PP-OCRv4_rec_mobile.onnxch_ppocr_mobile_v2.0_cls_mobile.onnx
Köprü, RapidOCR'ın sonuç kapsayıcısı için ayrıca %WINDIR%\Fonts\arial.ttf gerektirir, otomatik indirmeleri devre dışı bırakır ve çağıran geçersiz kılmadıkça yapılandırılan her çalıştırma havuzu için tek bir ONNX iş parçacığı kullanır; eksik modeller, paketler veya yerel font tanımanın başarısız olmasına yol açar
Mevcut köprü, Basitleştirilmiş Çince model yapılandırmasını kullanır ve tam genişlik ile yarım genişlik ikamesi yapmadan tanınan noktalama işaretlerini korur
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\RapidOCR\models', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
Her iki fabrika da mevcut çalıştırılabilir ve veri yollarını doğrular ve 1 ile 3.600.000 milisaniye arasında, varsayılanı 60.000 olan bir timeout kabul eder; geçersiz yapılandırma EArgumentException fırlatır
Paylaşılan bağdaştırıcı, tırnaklı yollarla ve kısıtlı devralınan handle'larla gizli bir yerel süreç başlatır, iptal, timeout ve çıktı boyutlarını 25 milisaniyede bir yoklar ve geçici dosyaları temizlemeden önce hata hâlinde süreci sonlandırır
TSV çıktısı 64 MiB ile, diagnostic dosya çıktısı 1 MiB ile sınırlıdır ve döndürülen teşhisler 4.096 karakterle kırpılır; tanınan kelimeler ayrıca isteğin kelime ve UTF-16 bütçelerine ve geçerli bitmap sınırlarına uymalıdır
TSV tanıma çıktısı geçerli UTF-8 olmalı ve tanınan kelimelerin içinde NUL baytı veya C0/C1 kontrol karakteri barındırmamalıdır; hatalı biçimli çıktı, hatadan önce geçerli kelimeler olsa bile tanıma isteğinin tamamını başarısız kılar
Bunlar çıktı ve istek sınırlarıdır; harici motorun bellek kullanımına katı bir üst sınır değildir. İptal ve motor hataları, kısmi sayfalar yayımlanmadan metin katmanı durumu üzerinden döner
Tanıma kanıtı ve sınırlar
Yerel RapidOCR 3.8.4 temel çizgisi, beş sabit Çince tarama bölgesi üzerindeki 15 tekrarın tamamını geçti: 300 DPI'da iki net bölge ve 150 DPI'da üç düşük çözünürlüklü baskı bölgesi; mevcut referans transkriptlere karşı en fazla %5 karakter hatası ve en fazla %2 silme oranıyla değerlendirildi
Tüm tekrarlar okuma sırası denetimlerini, toplamda 5.190 kelime veya karakter koordinat denetimini ve 72 DPI'da görünür-piksel eşitliğini geçti; iki net bölge bu referanslara karşı sıfır karakter hatası verdi
İki yapay zekâ görsel incelemesi Çince metinde ve sayılarda hemfikir; ancak rasterdaki bazı noktalama kod noktaları belirsizliğini koruyor ve insan kararı bekleniyor. Noktalama farkları yine de hata sayılır ve bu sonuçlar külliyat kanıtıdır, genel bir doğruluk garantisi değildir
Geometri ve arama metni
HotPDF, çizici sayfa dönüşümünü tersine çevirir; böylece kelime taban çizgileri 0, 90, 180 veya 270 derece döndürülmüş sayfalarda hizalı kalır
Kabul edilen her kelime; 3 Tr metin çizim kipi, uydurulmuş yatay metin ölçeği ve döndürmeye duyarlı bir metin matrisiyle yazılır; böylece sayfa raster'i değişmeden kalır ve seçilebilir içerik sırası korunur
Paylaşılan bir Type 0 Identity-H yazı tipi, Unicode skalerlerine sınırlı belge yerel CID'ler atar ve eksiksiz bir ToUnicode haritası yazar; destek karakterler için UTF-16 surrogate hedeflerini de kapsar
Aynı baseline üzerindeki bitişik Latin ve Kiril kelimeleri, geometrileri kelime boşluğuna işaret ettiğinde açık bir Unicode boşluk alır; bitişik CJK kelimeleri özgün metinlerini boşluk eklenmeden korur
Taranmış bir PDF'in işlenmesi
Demo/Delphi/SearchableOCR/SearchableOCR.dpr konsol örneği; taranmış bir PDF yükler, açık bir yerel dil profiliyle yerel RapidOCR çalıştırır, uygun tüm sayfalarda görünmez Unicode metni yayınlar ve bir görüntüleyici açmadan yeni bir PDF kaydeder
SearchableOCR.exe scan.pdf searchable.pdf --dll C:\HotPDF\Lib\Native\RapidOCR\Win64\HotPDFRapidOCR.dll --models C:\HotPDF\Lib\Native\RapidOCR\Models --language ru --dpi 300
Basitleştirilmiş Çince için --language ch, Geleneksel Çince için --language chinese_cht kullanın; DLL, çalıştırılabilirin mimarisiyle eşleşmeli ve seçilen yerel model paketi kurulu olmalıdır
Örnek, var olan bir çıktı dosyasının üzerine yazmayı reddeder ve işaretli bir HotPDF OCR katmanını güncellerken --replace-ocr kabul eder
Windows FPC JPEG tarama çözümü, LCL biçim dönüşümü çözülen görüntüyü korusun diye tanımadan önce son bitmap pixel biçimine çizer
Mevcut bir OCR katmanını güncelleme
THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer'ı True yapın; böylece tanınan sayfalarda daha önce üretilmiş, işaretli HotPDF OCR stream'leri yeni metinle aynı işlem içinde değiştirilir
Bu, SkipPagesWithText'i yalnızca işaretli sayfalarda atlar ve kaydedip yeniden yükledikten sonra çalışır; THPDFOCRTextLayerInfo.ReplacedPageCount değiştirilen sayfa sayısını bildirir
Tanıma hataları ve kabul edilen kelimesi olmayan sayfalar eski metin katmanını korur; üçüncü taraf OCR ve önceki HotPDF sürümlerinin ürettiği katmanlar dahil işaretsiz stream'ler korunur
Değiştirme, eski OCR içerik stream'lerinin bağını koparır ama başka bir yerde hâlâ referans verilebilecek font kaynaklarını veya optional-content gruplarını kaldırmaz; artımlı kaydetme, önceki revizyonlardan geçersiz kılınmış nesneleri tutabilir
Varsayılan davranış, taranmanın üzerinde sayfa numarası veya başlık olsa bile çıkarılabilir metni olan her sayfayı atlamayı sürdürür; SkipPagesWithText'i kapatmak tüm sayfayı tanır ve var olan yerel metni çoğaltabilir, bu yüzden karma sayfalar uygulamanın seçtiği işlem gerektirir
Sınırlar, iptal ve atomiklik
THPDFOCRTextLayerOptions.Default; 300 DPI tanımayı etkinleştirir, hâlihazırda metin içeren sayfaları atlar ve sayfa sayısını, pikselleri, kelimeleri, UTF-16 birimlerini ve üretilen içerik baytlarını sınırlar
HotPDF her motor sonucunu doğrular ve tek bir copy-on-write grafik işlemine başlamadan önce tüm sayfa içeriğini kurar; böylece motor hataları, geçersiz geometri, tükenen bütçeler, iptal veya işleme hataları yüklenen nesne grafiğini değiştirmeden bırakır
Boş bir sayfa indeksi dizisi tüm yüklenen sayfaları seçer; yinelenen sayfa indeksleri ilk görülme sırasına göre bir kez tanınır
MaxTotalWords, düşük confidence veya geçersiz olduğu için sonradan düşürülen kelimeler dahil alınan tüm kelimeleri sayar ve her sayfa isteği yalnızca kalan hakkı alır
Kelime veya UTF-16 bütçesi tükendiğinde ve uygun başka bir sayfa kaldığında işlem, o sayfayı render etmeden ve tanımadan otlsBudgetExceeded döndürür ve planlanan metin katmanlarının hiçbirini yayınlamaz; mevcut metin için atlanan sayfalar kalan tanıma bütçesi gerektirmez
Optional-content gruplama
Üretilen tüm metni, her sayfanın Resources/Properties sözlüğü üzerinden tek bir adlandırılmış katmana bağlamak için UseOptionalContentGroup ayarlayın
Bu seçenek PDF 1.5 gerektirir ve StrictVersionLock'u izler; varsayılan, en geniş uyumluluk için görünmez metni optional-content grubunun dışında tutar
Uyumluluk notu
Üretilen aranabilir katman bilinçli olarak gömülü olmayan sentetik bir yazı tipi kullanır; çünkü çizim kipi 3 hiçbir zaman glif boyamaz
Bu API tek başına PDF/A uyumlu OCR çıktısı üretmez; bu yüzden bir PDF/A iş akışı, gömülü yazı tipi metin katmanı yolunu kullanmalı ve yayımlamadan önce istenen uyumluluk doğrulamasını çalıştırmalıdır
Birincil API'ler
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progressive Rendering and Cancellation · ExtractLoadedPageText Method