Kötü taramalar, telefon çekimleri, fakslar ve sıkıştırılmış ekran görüntüleri genellikle OCR’yi yenir.İyi haber: biraz önceden işlenmesi uzun bir yolculuk yapar. Bu rehber size praktik, koşulabilir adımlar veriyor (sonunda gümüşle uyumludur) görüntülerinizi temizlemek için Önce ve **OCR motoru önemli ölçüde daha iyi sonuçlar sağlar.
Tam örnek
Ön koşullar
- NET 8 (veya .NET 6+) SDK
- Nükleer :
Aspose.OCR
- ( seçmeli olarak )
Aspose.Total.lic
Değerlendirme sınırlarını aşmayı planlıyorsanız
Bir konsol uygulaması oluşturun ve paketi ekleyin:
dotnet new console -n OCRImprovementExample -f net8.0
cd OCRImprovementExample
dotnet add package Aspose.OCR
Adım 1 - Düşük Kaliteli Görüntüler
Hedef: gürültüyü azaltmak, kontrast / parlaklığı normalleştirmek ve (seçmeli olarak) OCR’den önce yükseltmek veya toplanmak.
1.1 Görüntü yükleme
using System;
using System.Drawing;
using System.IO;
// Step 1: Load the low-quality image
string imagePath = "low_quality_image.png";
if (!File.Exists(imagePath))
throw new FileNotFoundException(imagePath);
Bitmap image = (Bitmap)Image.FromFile(imagePath);
// Optional: quick sanity check
Console.WriteLine($"Loaded {imagePath} ({image.Width}x{image.Height}px)");
1.2 Gürültü kaldırma (orta filtre)
Tuz ve biber gürültüsünü ve JPEG eserlerini bastırmak için ** orta filtre** kullanın.
using Aspose.Ocr.ImageProcessing;
// Median filter: try odd sizes 3, 5 (larger = stronger, but may blur small text)
var filterOptions = new FilterOptions
{
MedianFilter = true,
MedianFilterSize = 3
};
- Ne zaman değiştireceğim :*
- Eğer hala spektrum görüyorsanız, yukarı çıkın
MedianFilterSize
5’e kadar - Küçük karakterler kaybolursa 3‘a geri atın veya devre dışı bırakın.
1.3 Kontrast / parlaklık normalleştirme
Yazıyı arka plandan çıkartın.
var contrastOptions = new ContrastOptions
{
// Positive values increase contrast/brightness; negatives decrease
ContrastAdjustment = 20, // try 10..30
BrightnessAdjustment = 10 // try -10..+15 based on exposure
};
- Çerçeve kuralları :*
- Daha fazla (düzeltilmiş): parlaklığı azaltır (örneğin, -10) ve kontrastı ılımlı tutar.
- **Açık (çok karanlık): ** parlaklığı arttırır (örneğin, +10) ve kontrastı artırır.
1.4 İnşaat işleme boru hattı ve ön işlem
var processingOptions = new ImageProcessingOptions();
processingOptions.Filters.Add(filterOptions);
processingOptions.Contrast = contrastOptions;
// (Optional) more options can be added here if your build exposes them
// e.g., processingOptions.Sharpen = new SharpenOptions { Strength = 1 };
using (var ocrEngine = new Aspose.Ocr.Api.OcrEngine())
{
Bitmap preprocessed = ocrEngine.PreprocessImage(image, processingOptions);
// Keep this for OCR below
image.Dispose();
image = preprocessed;
}
1.5 (Seçmeli) Upscale küçük metin
Eğer metin çok küçük (<10px yükseklik), yüksek kaliteli yeniden örnekleme kullanarak ** önceden** OCR yükseltin.
// 1.5 Optional: upscale 1.5x to help recognition of tiny text
Bitmap Upscale(Bitmap src, double scale)
{
int w = (int)(src.Width * scale);
int h = (int)(src.Height * scale);
var dest = new Bitmap(w, h);
using (var g = Graphics.FromImage(dest))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(src, 0, 0, w, h);
}
return dest;
}
// Example usage
// image = Upscale(image, 1.5);
1.6 (Seçmeli) Bir Yatırım Bölgesi (ROI)
Sadece bir porsiyon (örneğin, başlık, fatura toplamları) ihtiyacınız varsa, tahıl ve hatayı azaltmak için.
// Crop a rectangle (x,y,width,height)
Rectangle roi = new Rectangle(0, 0, image.Width, Math.Min(400, image.Height)); // top band
Bitmap cropped = image.Clone(roi, image.PixelFormat);
image.Dispose();
image = cropped;
1.7 (Seçmeli) Hızlı İkilileştirme (DIY)
Eğer arka plan renkleri karmaşık ise, gri ölçek ve çerçeveye dönüştürün. (Bu ** yalnızca ** OCR yapısı özel bir binarizasyon seçeneği yoksa kullanın; basit bir düşüş.)
// Simple grayscale + global threshold (0..255); try 170..200
Bitmap ToBinary(Bitmap src, byte threshold = 185)
{
var bw = new Bitmap(src.Width, src.Height);
for (int y = 0; y < src.Height; y++)
for (int x = 0; x < src.Width; x++)
{
var c = src.GetPixel(x, y);
byte gray = (byte)(0.299 * c.R + 0.587 * c.G + 0.114 * c.B);
byte v = gray >= threshold ? (byte)255 : (byte)0;
bw.SetPixel(x, y, Color.FromArgb(v, v, v));
}
return bw;
}
// Example usage
// var bin = ToBinary(image, 190);
// image.Dispose();
// image = bin;
Adım 2 — OCR Ayarları ayarlayın (Seçmeli, yapınızda mevcutsa)
Bazı Aspose.OCR yapıları motor düzeyinde ayarları gösterir. paketinizde bunları varsa, segmentasyon ve tanıma yardımcı olmak için ** dil** ve ** sayfa düzen** ipuçlarını ayarlar.
// Only if your build exposes these settings:
using Aspose.Ocr;
var settingsAvailable = false; // flip true if your API supports it
// Example (may vary by package version):
// ocrEngine.Settings.Language = RecognitionLanguages.English;
// ocrEngine.Settings.PageSegmentationMode = PageSegmentationMode.Auto;
- Ne zaman ayarlayacağım :*
- ** Karışık diller:** uygun dil veya çok dilli moduna geçin.
- Dense metin blokları :
PageSegmentationMode.Auto
veya Dokument modunda - ** Formlar / tablolar:** Dokument segmentasyonu tercih eder; mümkün olduğunca bölgeye toplanır.
Adım 3 - OCR & Değerlendirme
Bu doğru akış: ön işleme → tanıma → yazdırma.
using System;
using System.Drawing;
using Aspose.Ocr;
using Aspose.Ocr.ImageProcessing;
namespace OCRImprovementExample
{
class Program
{
static void Main(string[] args)
{
string imagePath = "low_quality_image.png";
Bitmap image = (Bitmap)Image.FromFile(imagePath);
// Preprocess (median + contrast/brightness)
var filterOptions = new FilterOptions { MedianFilter = true, MedianFilterSize = 3 };
var contrastOptions = new ContrastOptions { ContrastAdjustment = 20, BrightnessAdjustment = 10 };
var processingOptions = new ImageProcessingOptions();
processingOptions.Filters.Add(filterOptions);
processingOptions.Contrast = contrastOptions;
using (Aspose.Ocr.Api.OcrEngine ocrEngine = new Aspose.Ocr.Api.OcrEngine())
{
// Preprocess
Bitmap preprocessedImage = ocrEngine.PreprocessImage(image, processingOptions);
// OCR
string recognizedText = ocrEngine.RecognizeImage(preprocessedImage);
Console.WriteLine("Recognized Text:");
Console.WriteLine(recognizedText);
}
}
}
}
İhracat metni: denetim için bir dosyaya yazın:
File.WriteAllText("recognized.txt", recognizedText);
Simptom → Fix (API seçenekleri ile Cheat-Sheet)
Symptom | Ne denemek için | Nasıl Kurulur (Kodu) |
---|---|---|
Görüntülü gürültü / JPEG eserleri | Ortalama filtre (3 → 5) | new FilterOptions { MedianFilter = true, MedianFilterSize = 3 } |
• Karanlık * | Daha fazla parlaklık (+5..+15) ve kontrast (+10.. +25) | new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 } |
* Çamaşır yıkama * | Düşük parlaklık (-5..-15), ılımlı kontrast | BrightnessAdjustment = -10, ContrastAdjustment = 10..20 |
* Çok küçük bir yazı * | Upscale × 1.25–× 1.75 aralığı Sonra OCR | image = Upscale(image, 1.5); |
Sıcak arka plan / renk gürültüsü | DIY binarizasyonu veya crop ROI | var bin = ToBinary(image, 185); veya image = image.Clone(roi, ...) |
* Sıkıştırılmış tarama * | Düzeltme (eğer maruz kalırsa) veya yeniden tarama | (Eğer yapı bir Deskew seçeneği ortaya çıkarsa, etkinleştirin; aksi takdirde tohum ve kurtarma) |
* Karışık Diller * | OCR dilini (s) açıkça ayarlayın | (Eğer mevcut ise) ocrEngine.Settings.Language = RecognitionLanguages.English; |
* Tablo içeriği * | OCR’den önce tablo bölgesi için bitki | image.Clone(roi, image.PixelFormat) |
Tüm yapılar aynı motor ayarlarını göstermez. paketinizde bir mülk mevcut değilse, yukarıdaki ** görüntü önceden işleme** tekniklerine güvenin – API istikrarlı ve etkili.
En İyi Uygulamalar
- Küçük adımlarda yumuşatın. Bir parametreyi bir anda değiştirin (örneğin,
MedianFilterSize
3 → 5) ve çıkışları karşılaştırın. - ** ROI’yi tercih eder.** Sadece ilgili bölgeye geçmek genellikle herhangi bir filtreyi vurur.
- Aşırı işleme maruz kalmayın. Çok fazla mide bulantısı/kırışıklık glif şekilleri yok edebilir.
- ** Otomatik baselinler.** Küçük bir altın görüntü setini tutun ve regresyonları tespit etmek için CI’de çalıştırın.
- Save intermediates. Önceden işlenmiş görüntüleri kaydedin
./debug/
Tünel sırasında yapılır.