اسکن های ضعیف، عکس های تلفن، فکس ها و تصاویر صفحه نمایش فشرده اغلب OCR را شکست می دهند.خبر خوب: یک پیش پردازش کوچک راه طولانی را طی می کند.این راهنمای به شما گام های عملی و قابل اجرا را می دهد (در پایان با خروپف مطابقت دارد) برای تمیز کردن تصاویر ** قبل از **OCR و برای **نمایش ** موتور O CR برای نتایج به طور قابل توجهی بهتر.

نمونه کامل

پیش شرط

  • نرم افزار .NET 8 (یا .Net 6+)
  • نوکیا : Aspose.OCR
  • ( انتخابی ) Aspose.Total.lic اگر قصد دارید از محدودیت های ارزیابی فراتر بروید

یک برنامه کنسول ایجاد کنید و بسته را اضافه کنید:

dotnet new console -n OCRImprovementExample -f net8.0
cd OCRImprovementExample
dotnet add package Aspose.OCR

مرحله 1 - پیش پردازش تصاویر با کیفیت پایین

**هدف: ** کاهش سر و صدا، به طور معمول کنتراست / روشنایی، و (به صورت اختیاری) بالا و یا کاشت قبل از OCR.

1.1 تصویر را بارگذاری کنید

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 حذف سر و صدا (فیلتر متوسط)

از یک فیلتر ** متوسط** برای سرکوب صدا نمک و فلفل و آثار JPEG استفاده کنید.

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
};

تغییر زمانی :

  • اگر در حال تماشای آینه هستید، بالا بروید. MedianFilterSize تا * 5 * .
  • اگر کاراکترهای کوچک ناپدید شوند، به 3 برگردید یا آن را خاموش کنید.

1.3 استاندارد کنتراست / روشنایی

متن را از پس زمینه خارج کنید.

var contrastOptions = new ContrastOptions
{
    // Positive values increase contrast/brightness; negatives decrease
    ContrastAdjustment = 20,   // try 10..30
    BrightnessAdjustment = 10  // try -10..+15 based on exposure
};

** قواعد تامبو :**

  • ** بیش از حد (تمیز):** درخشش را کاهش می دهد (به عنوان مثال، -10) و کنتراست را به طور متوسط حفظ می کند.
  • ** عدم قرار گرفتن در معرض (بیش از حد تاریک): ** افزایش درخشش (به عنوان مثال، +10) و کنتراست (برای مثال +20*).

1.4 ساخت خط لوله و پیش پردازش

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 (اختیاری) Upscale متن کوچک

اگر متن بسیار کوچک (<10px ارتفاع) است، با استفاده از نمونه برداری با کیفیت بالا، **قبل از ** OCR را بالا ببرید.

// 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 (اختیاری) کاشت یک منطقه منافع (ROI)

اگر شما فقط نیاز به یک وعده (به عنوان مثال، عنوان، کل صورتحساب)، محصول برای کاهش خراش و خطا.

// 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 (اختیاری) سریع دوگانه سازی (DIY)

اگر رنگ های پس زمینه پیچیده هستند، آن را به مقیاس خاکستری و محدوده تبدیل کنید. (استفاده از این ** فقط اگر ** ساختار OCR شما یک گزینه دوگانه اختصاص داده نشده است؛ این یک سقوط ساده است.)

// 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;

مرحله 2 – تنظیم تنظیمات OCR (اختیاری، اگر در ساخت شما در دسترس باشد)

برخی از Aspose.OCR ساختمان ها تنظیمات سطح موتور را نشان می دهد.اگر بسته شما آنها را دارد، تنظیم ** زبان** و ** طرح صفحه** راهنمایی برای کمک به تقسیم بندی و تشخیص.

// 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;
  • چه زمانی باید تنظیم شود: *
  • ** زبان های مخلوط:** به حالت زبان یا چند زبانه مناسب تغییر دهید.
  • تصویری از بلوک های متن : PageSegmentationMode.Auto و یا در حالت ** اسناد**.
  • ** فرم ها / جدول ها: ** ترجیح می دهم ** اسناد** تقسیم؛ هر زمان که ممکن است به منطقه کاشته شود.

مرحله 3 – اجرا OCR & ارزیابی

این است ** جریان دقیق** از گندم: پیش پردازش → تشخیص → چاپ.

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);
            }
        }
    }
}

نص صادرات: به یک فایل برای بازرسی بنویسید:

File.WriteAllText("recognized.txt", recognizedText);

علائم → Fix (Cheat-Sheet با گزینه های API)

Symptomچه چیزی را امتحان کنیدچگونگی تنظیم (کد)
نمایش صدا / اسناد JPEGفیلتر متوسط (3 → 5)new FilterOptions { MedianFilter = true, MedianFilterSize = 3 }
* تاریک است *روشنایی را افزایش دهید (+5+15) و کنتراست (+10+25)new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 }
تغییرمسیرکاهش درخشش (۵.۱۵)، کنتراست متوسطBrightnessAdjustment = -10, ContrastAdjustment = 10..20
* متن بسیار کوچک *در مقیاس 1.25×1.75 پس از آن OCRimage = Upscale(image, 1.5);
*خاکستری / رنگ سر و صداDIY دوگانه سازی یا Crop ROIvar bin = ToBinary(image, 185); یا image = image.Clone(roi, ...)
* اسکریپت اسکن*دکوراسیون (در صورت قرار گرفتن در معرض) یا اسکن مجدد(اگر ساختمان شما یک گزینه Deskew را نشان می دهد، آن را فعال کنید؛ در غیر این صورت کاشت و نجات)
* زبان های مخلوط *تنظیم زبان OCR(s) به صراحت(اگر در دسترس باشد) ocrEngine.Settings.Language = RecognitionLanguages.English;
* محتوای تبلت *زراعت در منطقه جدول قبل از OCRimage.Clone(roi, image.PixelFormat)

اگر یک دارایی در بسته شما در دسترس نیست، بر روی تکنیک های پیش پردازش تصویر بالا تکیه کنید – آنها API پایدار و موثر هستند.

بهترین شیوه‌ها

  • نمایش در مراحل کوچک. تغییر یک پارامتر در یک زمان (به عنوان مثال، MedianFilterSize 3 → 5) و مقایسه خروجی.
  • ** ROI را ترجیح می دهم.** کاشتن به منطقه مربوطه اغلب هر فیلتر را ضربه می زند.
  • از فرآیند بیش از حد اجتناب کنید. زیاد خروپف می تواند اشکال گلیف را نابود کند.
  • بازل های اتوماتیک. یک مجموعه کوچک طلایی از تصاویر خنده دار نگه دارید و آنها را در CI اجرا کنید تا بازخورد را تشخیص دهید.
  • Save intermediates. ذخیره تصاویر پیش پردازش شده به یک ./debug/ فاکتورها در هنگام تنگ کردن

More in this category