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)

SymptomNe denemek içinNasıl Kurulur (Kodu)
Görüntülü gürültü / JPEG eserleriOrtalama 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ı kontrastBrightnessAdjustment = -10, ContrastAdjustment = 10..20
* Çok küçük bir yazı *Upscale × 1.25–× 1.75 aralığı Sonra OCRimage = Upscale(image, 1.5);
Sıcak arka plan / renk gürültüsüDIY binarizasyonu veya crop ROIvar 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 bitkiimage.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.

More in this category