Các quét tồi tệ, chụp điện thoại, fax, và chụp màn hình bị nén thường đánh bại OCR. Tin tốt: một quá trình xử lý nhỏ đi một con đường dài. Hướng dẫn này cung cấp cho bạn các bước ** thực tế, có thể chạy** (được phù hợp với gạch ở cuối) để làm sạch hình ảnh ** trước** OCC và để tune động cơ OCD cho kết quả tốt hơn đáng kể.

Một ví dụ đầy đủ

Nguyên tắc

  • .NET 8 (hoặc .Net 6+) SDK
  • Nói : Aspose.OCR
  • (tùy chọn) Aspose.Total.lic Nếu bạn có kế hoạch vượt quá giới hạn đánh giá

Tạo một ứng dụng console và thêm gói:

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

Bước 1 - Preprocess hình ảnh chất lượng thấp

  • Mục tiêu: * Giảm tiếng ồn, bình thường hóa độ tương phản / sáng, và (tùy chọn) tăng hoặc trồng trước OCR.

1.1 Tải hình ảnh

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 Loại bỏ tiếng ồn (một bộ lọc trung bình)

Sử dụng một bộ lọc ** trung bình** để ngăn chặn tiếng ồn muối và bột và các tác phẩm 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
};
  • Khi nào cần thay đổi: *
  • Nếu bạn vẫn nhìn thấy ánh sáng, hãy nâng lên MedianFilterSize Lời bài hát: 5*
  • Nếu các ký tự nhỏ biến mất, hãy ném trở lại 3 hoặc tắt nó.

1.3 Tự bình thường contrast/brightness

Làm cho văn bản xuất hiện từ nề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
};
  • Quy tắc của thumb: *
  • Hiển thị (tẩy rửa): làm giảm độ sáng (ví dụ, -10) và giữ đối lập trung bình.
  • Không tiếp xúc (không quá tối): tăng độ sáng (ví dụ, +10) và sự tương phản ( ví dụ: ** +20**).

1.4 Xây dựng đường ống chế và quá trình xử lý

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 (tùy chọn) Upscale nhỏ văn bản

Nếu văn bản là ** rất nhỏ** (<10px chiều cao), upscale ** trước** OCR bằng cách sử dụng mẫu lại chất lượng cao.

// 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 (tùy chọn) Crop a Region of Interest (ROI)

Nếu bạn chỉ cần một phần (ví dụ, tiêu đề, tổng hóa đơn), cây trồng để giảm mờ và lỗi.

// 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 (tùy chọn) nhanh nhị phân (DIY)

Nếu màu nền là phức tạp, chuyển sang màu xám và giới hạn. (Hãy sử dụng điều này chỉ nếu xây dựng OCR của bạn thiếu một tùy chọn nhị phân dành riêng; đó là một sự sụp đổ đơn giản.)

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

Bước 2 – Thiết lập Cài đặt OCR (tùy chọn, nếu có sẵn trong xây dựng của bạn)

Một số Aspose.OCR xây dựng tiết lộ các cài đặt cấp động cơ. Nếu gói của bạn có chúng, hãy thiết lập ** ngôn ngữ** và ** bố trí trang** dấu hiệu để giúp phân khúc và nhận dạng.

// 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;
  • Khi nào để thiết lập: *
  • ** Ngôn ngữ hỗn hợp:** chuyển sang chế độ ngôn ngữ thích hợp hoặc nhiều ngoại ngữ.
  • *Thông tin văn bản: * PageSegmentationMode.Auto hoặc Document chế độ.
  • Những hình thức / bảng: thích Document phân loại; trồng cho khu vực bất cứ khi nào có thể.

Bước 3 – Run OCR & Evaluate

Đây là dòng chảy ** chính xác** từ gạch: Preprocess → Recognize → Print.

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

Thông tin xuất khẩu: viết vào một tệp để kiểm tra:

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

Triệu chứng → Fix (Cheat-Sheet với API tùy chọn)

SymptomNhững gì để cố gắngLàm thế nào để thiết lập (code)
* Nhạc chuông / JPEG ArtifactsBộ lọc trung bình (3 → 5)new FilterOptions { MedianFilter = true, MedianFilterSize = 3 }
* Trái Đất *Tăng độ sáng (+5..+15) và tương phản (+10.. +25)new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 }
* Dọn dẹp *Giảm độ sáng (-5..-15), tương phản vừa phảiBrightnessAdjustment = -10, ContrastAdjustment = 10..20
*Thông tin rất nhỏ *Kích thước × 1.25–× 1.75, Sau đó OCRimage = Upscale(image, 1.5);
* Âm thanh / âm thanh màu*DIY binarization hoặc crop ROIvar bin = ToBinary(image, 185); hoặc image = image.Clone(roi, ...)
* Tính năng scan*Deskew (nếu tiếp xúc) hoặc re-scan straighter(Nếu xây dựng của bạn tiết lộ một tùy chọn Deskew, bật nó; khác crop & rescan)
* Ngôn ngữ hỗn hợp *Thiết lập ngôn ngữ OCR(s) rõ ràng(Nếu có sẵn) ocrEngine.Settings.Language = RecognitionLanguages.English;
* Nội dung bảng *Thực vật đến khu vực bảng trước OCRimage.Clone(roi, image.PixelFormat)

Không phải tất cả các xây dựng đều xuất hiện các cài đặt động cơ tương tự**. Nếu một tài sản không có sẵn trong gói của bạn, hãy dựa vào các kỹ thuật trước xử lý hình ảnh** ở trên – chúng là API ổn định và hiệu quả.

Thực hành tốt nhất

  • Tweak trong các bước nhỏ. Thay đổi một thông số cùng một lúc (ví dụ: MedianFilterSize 3 → 5) và so sánh kết quả.
  • Tốt nhất ROI. Thay vào chỉ khu vực có liên quan thường đánh bất kỳ bộ lọc nào.
  • ** Tránh quá trình xử lý.** Lượng quá nhiều mờ/mờ có thể phá hủy các hình dạng glyph.
  • Baseline tự động. Giữ một bộ hình ảnh vàng nhỏ và chạy chúng trong CI để phát hiện trở lại.
  • Save intermediates. Save preprocessed images to a ./debug/ Màn hình trong tuning.

More in this category