C#'da PDF'yi OCR Yapma: Taralı Belgelerden Metin Çıkarmak
.NET geliştiricileri için Taranmış PDF belgeleri sürekli bir zorluk sunar: Metin yalnızca görüntüler olarak vardır, bu da arama yapmayı, kopyalamayı veya programatik olarak işlemeyi imkansız hale getirir. Optik Karakter Tanıma (OCR), taranmış görüntüleri düzenlenebilir ve aranabilir verilere dönüştürerek, kağıt belgeleri, kamera ile yakalanmış görüntüleri veya herhangi bir resim tabanlı PDF dosyasını makine tarafından okunabilir metne dönüştürerek bu sorunu çözer. Hedef, kağıt arşivlerinin dijitalleştirilmesi, veri çıkarımının otomatikleştirilmesi veya belge işleme boru hatları oluşturmak olsun, C# üzerinde PDF dosyalarında OCR gerçekleştirme yeteneği kritik bir özelliktir.
IronOCR, Tesseract 5 motorunu temel alan ve doğruluk geliştirmeleri içeren bir .NET OCR kütüphanesidir. Bu, geliştiricilerin kısa kod satırlarıyla herhangi bir PDF belgesinden — taranmış veya taranmamış — metin çıkarmasına olanak tanır. Bu makale, temel iş akışları gösterir: temel PDF OCR, sayfa-seçmeli işleme, bölge-hedefli çıkarım ve zorlu taramalar için görüntü ön işleme.
C# ile Bir PDF'de OCR Nasıl Gerçekleştirilir?
.NET'te PDF metin çıkarımı için en hızlı yol, IronOCR'u NuGet üzerinden yükleyerek başlar. Proje dizininizde bir terminal açın ve çalıştırın:
dotnet add package IronOcr
Paket kurulduktan sonra, işleme şu üst düzey ifade programı taranmış bir PDF'yi okur ve çıkarılan metni basar:
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");
// Run recognition
OcrResult result = ocr.Read(input);
// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");
// Run recognition
OcrResult result = ocr.Read(input);
// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load the PDF and perform OCR
Using input As New OcrInput()
input.LoadPdf("scanned-report.pdf")
' Run recognition
Dim result As OcrResult = ocr.Read(input)
' Access the extracted text
Dim text As String = result.Text
Console.WriteLine(text)
End Using
Tesseract 5'i .NET Core ve .NET Framework hedefleri için .NET yerel optimizasyonları ile saran IronTesseract sınıfı. OcrInput nesnesi, PDF yükleme ve iç sayfa render'ını yönetir. Read çağrıldığında, OCR süreci her sayfayı analiz eder ve tam çıkarılmış metni içeren, ayrıca paragraflar, satırlar, kelimeler ve bunların piksel koordinatları hakkında yapılandırılmış veri içeren bir OcrResult döndürür.
Sonuç, bir metin dosyasına yazılabilir, aşağı akış işleme mantığına aktarılabilir, bir veritabanında depolanabilir veya belge dizinleme hattına beslenebilir. Altta yatan motor hakkında daha fazla okuma için, Tesseract OCR belgelerine ve IronOCR API referansına bakın.
Giriş

Çıktı

PDF'den Belirli Sayfalar Nasıl Okunur?
Bir uzun belgenin her sayfası işlenmesi, yalnızca belirli sayfaların ilgi çekici içerik taşıması durumunda zaman ve bellek israfıdır. IronOCR, sıfır tabanlı sayfa indekslerini LoadPdf'e geçirerek belirli sayfaları hedeflemenize olanak tanır:
using IronOcr;
using System.Collections.Generic;
var ocr = new IronTesseract();
// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };
using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using System.Collections.Generic;
var ocr = new IronTesseract();
// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };
using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System.Collections.Generic
Dim ocr As New IronTesseract()
' Specify pages to process (zero-based: 0 = first page)
Dim targetPages As New List(Of Integer) From {0, 2, 4}
Using input As New OcrInput()
input.LoadPdf("lengthy-document.pdf", pageIndices:=targetPages)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Seçici sayfa yükleme hem işleme süresini hem de bellek tüketimini azaltır, bu da yalnızca birkaç sayfanın gerekli verileri içeren çok yüz sayfalık arşivlerle çalışırken önemlidir. Sıfır bazlı dizin alışkanlığı, standart .NET koleksiyonlarına uyar: sayfa dizini 0, belgenin ilk sayfasıdır.
İlgili sayfaların önceden bilinmediği belgeler için hızlı bir tam belge geçişi önce düşük DPI ile gerçekleştirilebilir, sonra sadece bu sayfalar üzerinde tam ayarlarla yeniden çalıştırılır.
Sayfa düzeyi kontrol hakkında daha fazla bilgi için IronOCR sayfa seçimi dokümanını okuyun.
Belirli Bir Sayfanın Belirli Bir Bölgesinden Veri Nasıl Çıkarılır?
Fatura işleme, form dijitalleştirme ve yapılandırılmış belge ayrıştırma işlemleri genellikle tüm sayfayı taramak yerine belirli bir alandan metin çıkarmayı gerektirir. IronOCR, her sayfanın hangi kısımlarının analiz edileceğini belirten bir Rectangle dizisini kabul eden ContentAreas parametresi aracılığıyla bölge hedefli OCR'yi destekler:
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
new Rectangle(130, 290, 250, 50) // Invoice number field
};
using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
new Rectangle(130, 290, 250, 50) // Invoice number field
};
using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
' Define the scan region: X, Y, Width, Height (all in pixels from top-left)
Dim invoiceFields As Rectangle() = {
New Rectangle(130, 290, 250, 50) ' Invoice number field
}
Using input As New OcrInput()
input.LoadPdf("invoice.pdf", contentAreas:=invoiceFields)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Rectangle yapıcı dört tam sayı parametresi alır: X koordinatı, Y koordinatı, genişlik ve yükseklik -- bunların tümü render edilmiş sayfanın sol üst köşesinden piksel olarak ölçülür. Tam bir sayfa yerine küçük bir hedefleme, hem OCR süresini hem de motorun çevresindeki gürültüyü veya alakasız metin alanlarını almasını azaltır.
Toplu fatura işleme iş akışları için, bölge çıkarma ile result.Pages üzerinde yinelemeyi birleştirerek, yüzlerce belge boyunca aynı alan konumundan yapılandırılmış veriler çekebilirsiniz. Her sayfa sonucu, içerik alanı için tanınan metni bağımsız olarak ortaya koyar.
IronOCR içerik alanları örneği, çoklu bölge senaryoları için ek yapılandırma seçenekleri sunar.
Giriş

Çıktı

Taranmış Belgelerde OCR Doğruluğu Nasıl Artırılır?
Gerçek dünyada taranmış belgeler sıklıkla kalite sorunlarıyla gelir: eğrilmiş sayfalar, düşük çözünürlük veya tarama donanımı veya yazılımı tarafından getirilen dijital gürültü. IronOCR, bu sorunları tanıma motoru çalışmadan önce düzelten bir dizi görüntü ön işleme filtresi içerir:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);
// Apply image correction filters
input.Deskew(); // Automatically straighten rotated pages
input.DeNoise(); // Remove scanning artifacts and speckles
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);
// Apply image correction filters
input.Deskew(); // Automatically straighten rotated pages
input.DeNoise(); // Remove scanning artifacts and speckles
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr = New IronTesseract()
Using input = New OcrInput()
' Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi:=300)
' Apply image correction filters
input.Deskew() ' Automatically straighten rotated pages
input.DeNoise() ' Remove scanning artifacts and speckles
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
dpi parametresi, tanıma çalıştırılmadan önce PDF sayfalarının hangi çözünürlükte render edileceğini kontrol eder. Daha yüksek değerler — 200 ila 300 DPI — küçük veya yoğun metin içeren belgeler için doğruluğu artırır, işleme sırasında biraz daha fazla bellek maliyetiyle beraber gelir. Deskew yöntem sayfa dönüşünü otomatik olarak algılar ve düzeltir. DeNoise, karakter tanıma adımını karıştırabilecek lekeleri ve artefaktları kaldırır.
Daha agresif görüntü düzeltme gerektiren belgeler için IronOCR ayrıca kontrast güçlendirme, binarizasyon (sayfaların siyah-beyaz dönüştürülmesi) ve ölçek ayarları sağlar. Birden çok filtreyi ardışık olarak birleştirmek, aksi takdirde anlaşılmaz çıkış üretmeyecek olan taramalardan kullanılabilir metin elde edebilir. Mevcut ön işleme operasyonlarının tam listesini görmek için IronOCR görüntü filtreleri referansını inceleyin.
Şifre Korunmalı ve Çok Formatlı Belgeler Nasıl Ele Alınır?
IronOCR sadece standart PDF dosyaları ile sınırlı değildir. Kütüphane, belge işleme iş akışlarında sıklıkla ortaya çıkan bir dizi giriş senaryosunu ele alır.
Şifre korumalı PDF'ler, giriş oluşturma sırasında kimlik bilgilerini geçirerek desteklenir:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("protected.pdf", password:="secret123")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Görüntü formatları -- PNG, JPEG, TIFF, BMP, GIF ve çok sayfalı TIFF -- uygun LoadImage veya LoadImageFrames yöntemleriyle yüklenir. Girdi formatı ne olursa olsun aynı ön işleme filtreleri ve bölge hedefleme seçenekleri geçerlidir.
Çok dilli belgeler, IronOCR'un dil paketi sistemi aracılığıyla ele alınır. Kütüphane varsayılan olarak İngilizce ile gelir ve Latin, Kiril, CJK, Arapça ve diğer alfabeleri kapsayan 125'ten fazla ek dil paketi destekler. Read'ü çağırmadan önce ek dilleri yükleyin:
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
Aynı sayfada birden fazla dil karışımını içeren belgeler için MultiLanguage modu mevcuttur. Bu, başlıklar, satır kalemleri ve adreslerin farklı dillerde görünebileceği uluslararası ortamlarda fatura işleme için özellikle değerlidir.
Windows, Linux, macOS ve Azure ve Docker konteynerleri dahil olmak üzere bulut ortamlarında dağıtım çalışır.
Taranmış Belgelerden Aranabilir PDF'ler Nasıl Oluşturulur?
Metni dizelere çıkarmanın ötesinde, IronOCR, aranabilir PDF çıkışı üretebilir — orijinal taranmış görüntünün görsel katman olarak korunduğu bir PDF ve bir görünmez metin katmanı, arama ve kopyalama işlemleri için gömülüdür. Bu, profesyonel belge tarayıcıları tarafından üretilen standart formattır.
IronOCR aranabilir PDF özelliği bir OcrResult kabul eder ve yeni bir PDF dosyası yazar:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");
OcrResult result = ocr.Read(input);
// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");
OcrResult result = ocr.Read(input);
// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("scanned-archive.pdf")
Dim result As OcrResult = ocr.Read(input)
' Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf")
End Using
Çıktı dosyası her hangi bir PDF okuyucuda açılabilir. Metin seçimi, arama ve kopyalama işlemleri gömülü metin katmanı üzerinde çalışır, orijinal tarama görünümü korunurken. Bu format, uyumluluk arşivleri, yasal belge depoları ve kurumsal içerik yönetim sistemleri için yaygın olarak gereklidir.
Ek çıktı formatları için, OcrResult nesnesi ayrıca sayfa başına güvenilirlik puanları, kelime düzeyinde sınırlayıcı kutular ve yapılandırılmış paragraf verilerini -- tümü ilerideki sınıflandırma veya indeksleme görevleri için faydalıdır -- ortaya çıkarır.
Barkodlar ve QR Kodları Metinle Birlikte Nasıl Okunur?
Belge işleme iş akışları genellikle aynı belgeden insan tarafından okunabilir metin ve makine tarafından okunabilir kodları çıkarmak gerektirir. IronOCR, aynı OCR geçişi sırasında barkodları ve QR kodlarını algılar ve çözer, ayrı bir kütüphane gerektirmez.
İşleme başlamadan önce IronTesseract örneğinde barkod okuma etkinleştirin:
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");
OcrResult result = ocr.Read(input);
// Access recognized text
Console.WriteLine(result.Text);
// Access barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");
OcrResult result = ocr.Read(input);
// Access recognized text
Console.WriteLine(result.Text);
// Access barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadPdf("shipment-labels.pdf")
Dim result As OcrResult = ocr.Read(input)
' Access recognized text
Console.WriteLine(result.Text)
' Access barcode data
For Each barcode In result.Barcodes
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}")
Next
End Using
Bu, özellikle sevkiyat etiketi işlemede, envanter yönetiminde ve barkodların ve basılı metinlerin birlikte bulunduğu taranmış belgelerde herhangi bir iş akışında kullanışlıdır. IronOCR barkod okuma kılavuzu, Code 128, QR kodları, Data Matrix ve PDF417 dahil olmak üzere desteklenen formatları kapsar.
IronOCR Giriş Türleri Arasındaki Fark Nedir?
IronOCR, farklı senaryolar için uygun olan iki ana PDF dosyası yükleme yaklaşımı sunar:
| Yaklaşım | Sınıf | En İyi İçin | Açıklamalar |
|---|---|---|---|
| Genel giriş | OcrInput.LoadPdf() |
Çoğu kullanım durumu | Tüm ön işleme filtrelerini, sayfa seçimini, içerik alanlarını destekler |
| PDF'ye özgü | OcrPdfInput |
Basit senaryolar | Kolaylık sağlayan sarıcı; daha az yapılandırma seçeneği |
| Görüntü dosyaları | OcrInput.LoadImage() |
PNG, JPEG, TIFF, BMP | PDF girişi ile aynı ön işleme ve bölge hedefleme |
| Çok sayfalı TIFF | OcrInput.LoadImageFrames() |
Faks arşivleri, tarayıcı çıktısı | Her çerçeveyi ayrı bir sayfa olarak işler |
Çoğu üretim senaryosu için, OcrInput.LoadPdf() tam ön işleme ve yapılandırma API'sini açığa çıkardığı için önerilen yaklaşımdır. OcrPdfInput, varsayılan ayarların yeterli olduğu durumlar veya hızlı prototipleme için iyi çalışır.
Sonraki Adımlarınız Neler?
Yukarıdaki kod örnekleri, PDF OCR için C# içindeki temel IronOCR iş akışlarını kapsar. İşte bir sonraki adımı atmak için kısa bir kontrol listesi:
- Paket kurulumunu yapın:
dotnet add package IronOcrveya NuGet üzerinde IronOCR arayın - Temel örneği çalıştırın: Tam boru hattı mantığını oluşturmak veya text çıkarmasını doğrulamak için bir örnek PDF'den metin çıkarımını onaylayın
- Ön işlemeyi uygulayın: Taratılmış belgelerle çalışıyorsanız,
DeskewveDeNoiseçağrılarını ekleyin ve temsilci örneklerle test edin - Ek Özellikleri Keşfet: Arama yapılabilir PDF çıktısı, barkod okuma, çok-dil desteği, ve yapılandırılmış veri çıktısı
- Dağıtım kılavuzunu gözden geçirin: Azure, Docker ve Linux dağıtım makaleleri ortamdan bağımsız yapılandırmaları kapsar
- Ücretsiz denemeyi deneyin: Lisanslama taahhüdünde bulunmadan önce tam özellik setini test etmek için ücretsiz deneme başlatın
- Bir lisans edinin: IronOCR lisanslama seçenekleri, bireysel geliştiriciler üzerinden kurumsal dağıtımlara kadar kapsar, telif ücretsiz yeniden dağıtım ile
Belirli kullanım durumları hakkında sorular için, IronOCR nasıl-kütüphanesi, onlarca senaryoyu kapsayan adım adım makaleler sağlar. Tam API yüzeyi, IronOCR API referansında belgelidir.
Sıkça Sorulan Sorular
Bir PDF'yi C# ile OCR yapmak için gereken en az kod nedir?
IronOCR kullanarak, minimum kod: Bir IronTesseract örneği oluşturmak, bir OcrInput oluşturmak, dosya yolu ile input.LoadPdf çağrısı yapmak ve ardından ocr.Read(input) çağrısını yapmak. Sonuç.Text özelliği, çıkarılan metni döndürür.
.NET projesine IronOCR nasıl kurulur?
Terminalde 'dotnet add package IronOcr' çalıştırın veya Visual Studio içindeki NuGet Package Manager'da IronOcr'u arayın.
IronOCR yalnızca belirli PDF sayfalarını işleyebilir mi?
Evet. LoadPdf'in pageIndices parametresine sıfırdan başlayan sayfa indekslerinden oluşan bir List
Taralı bir PDF'in belirli bir bölgesinden metni nasıl çıkarırsınız?
LoadPdf'in contentAreas parametresine Rectangle nesnelerinden oluşan bir dizi verin. Her dikdörtgen, sayfanın sol üst köşesinden piksel cinsinden X konumunu, Y konumunu, genişliği ve yüksekliği belirtir.
IronOCR, taranan belgeler için hangi ön işleme filtrelerini sağlar?
IronOCR, Deskew (sayfa rotasyonunu düzeltir), DeNoise (tarama kusurlarını kaldırır), kontrast iyileştirme, binarizasyon ve ölçek ayarlama sağlar. Bunlar, düşük kaliteli taramalarda doğruluğu artırmak için zincirlenebilir.
IronOCR, parola korumalı PDF dosyalarını destekliyor mu?
Evet. Şifre dizesini LoadPdf fonksiyonunun password parametresine iletin. Kütüphane, sayfaları OCR için işlerken belgeyi şifre çözme işlemi yapar.
IronOCR, aranabilir PDF çıktısı oluşturabilir mi?
Evet. ocr.Read(input) çağrısından sonra, result.SaveAsSearchablePdf'i çıktı dosya yolu ile çağırın. Ortaya çıkan PDF, arama ve kopyalama işlemleri için gömülü görünmez bir metin katmanı ile görsel katman olarak orijinal taramayı korur.
IronOCR hangi dilleri destekliyor?
IronOCR, Latin, Kiril, CJK, Arapça ve diğer yazı sistemlerini kapsayan 125'ten fazla dil paketi destekler. Read çağrısından önce IronTesseract örneğinde Dil özelliğini ayarlayın.
IronOCR, PDF belgelerinden barkod ve QR kodlarını okuyabilir mi?
Evet. Read çağrısından önce ocr.Configuration.ReadBarCodes değerini true olarak ayarlayın. OcrResult.Barcodes koleksiyonu, tüm tespit edilen kodlar için çözümlenmiş değerleri ve format türlerini içerir.
IronOCR, Linux üzerinde ve Docker konteynerlerinde çalışır mı?
Evet. IronOCR, Windows, Linux, macOS ve Azure ile Docker konteynerlerini içeren bulut ortamlarına dağıtımı destekler. IronSoftware dokümantasyonu, ortamlarına özgü kurulum kılavuzları içerir.



