Loše skeniranje, snimke telefona, faksovi i komprimirani snimci često poraze OCR. Dobra vijest: malo preprocesiranje ide dugo. Ovaj vodič vam daje praktične, trkajuće korake (u usklađivanju s iglom na kraju) kako bi se očišćile slike prije oCR-a i da se tune za značajno bolje rezultate.

Potpuni primjer

Preduzeća

  • Sljedeći članakNET 8 (ili .NET 6+) SDK
  • Slijedeći : Aspose.OCR
  • (opcionalno je Aspose.Total.lic ako planirate prekoračiti granice ocjenjivanja

Stvorite aplikaciju konzole i dodajte paket:

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

Korak 1 – Preprocesiranje slika niske kvalitete

Cilj: smanjiti buke, normalizirati kontrast / svjetlost, i (opcionalno) upscale ili uzgoj prije OCR.

1.1 Preuzmite sliku

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 Uklanjanje buke (središnji filter)

Koristite ** srednji filter** za suzbijanje buke soli i papira i JPEG materijala.

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

*Kada je potrebno promijeniti: *

  • Ako još uvijek vidite zrcale, podižite MedianFilterSize Slijedeći članak5*
  • Ako male znakove nestaju, vratite se na 3 ili ga isključite.

1.3 Normalizirajte kontrast / svjetlost

Postavite tekst izvan pozadine.

var contrastOptions = new ContrastOptions
{
    // Positive values increase contrast/brightness; negatives decrease
    ContrastAdjustment = 20,   // try 10..30
    BrightnessAdjustment = 10  // try -10..+15 based on exposure
};
  • Odluka o usklađivanju: *
  • Prekomjerno izložen (izmazan): smanjuje svjetlost (na primjer, -10) i održava kontrast umjeren.
  • Neizložen (previše tamno): povećava svjetlost (na primjer, +10) i kontrast (npr. ** +20**).

1.4 Izgradnja cijevi za obradu i preprocesiranje

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 (opcionalno) Upscale mali tekst

Ako je tekst vrlo mali (<10px visina), upscale prije OCR pomoću visokokvalitetnog ponovnog uzorka.

// 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 (opcionalno) Crop a Region of Interest (ROI)

Ako vam je potrebna samo jedna porcija (npr. naslovnica, ukupni iznos računa), uzgoj smanjiti grm i pogrešku.

// 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 (opcionalna) brza binarizacija (DIY)

Ako su boje pozadine složene, pretvorite se u šljunčanu razinu i granicu. (koristite ovo ** samo ako** vaš OCR zgrada nedostaje posvećena opcija binarizacije; to je jednostavan pad.)

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

Korak 2 – Konfigurirajte OCR postavke (opcionalno, ako je dostupno u vašem sastavu)

Neki Aspose.OCR gradovi otkrivaju postavke na razini motora.Ako ih vaš paket ima, postavite ** jezik** i ** raspored stranica** upute kako bi se pomoglo segmentaciji i prepoznavanju.

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

*Kada je potrebno nastaviti: *

    • Mješoviti jezici: * prebacite na odgovarajući jezik ili višejezični način.
  • Danske tekstne blokove: PageSegmentationMode.Auto ili *Dokumentni način.
  • Obrazci/tablji: Preferirate Dokument segmentaciju; uzgajati u regiji kad god je to moguće.

Korak 3 – Provedite OCR & Evaluate

Ovo je točan tok iz žetve: preproces → prepoznati → tiskanje.

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

Izvozni tekst: napisati na datoteku za inspekciju:

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

Simptom → Fix (Cheat-Sheet s API opcijama)

SymptomŠto pokušatiKako nastaviti (koda)
* Svijetli zvuk / JPEG artefakti**Srednji filter (3 → 5)new FilterOptions { MedianFilter = true, MedianFilterSize = 3 }
“Tko je tamno”Povećajte svjetlost (+5..+15) i kontrast (+10.. +25)new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 }
* Izbacivanje *Smanjenje svjetlosti (-5..-15), umjeren kontrastBrightnessAdjustment = -10, ContrastAdjustment = 10..20
* Vrlo mali tekst*Upscale × 1.25 – x 1.75, Tada OCRimage = Upscale(image, 1.5);
Buzni pozadina / boja bukeDIY binarizacija ili crop ROIvar bin = ToBinary(image, 185); ili image = image.Clone(roi, ...)
* Skladišteno skeniranje *Deskew (ako je izložen) ili re-scan straighter(Ako vaša zgrada izloži Deskew opciju, omogućite ga; inače crop & rescan)
* Mješoviti jezici *Izričito postavite OCR jezik(e)(ako je dostupna) ocrEngine.Settings.Language = RecognitionLanguages.English;
• Tabularni sadržaj*Korištenje bilja u tablicu prije OCR-aimage.Clone(roi, image.PixelFormat)

Ako imovina nije dostupna u vašem paketu, oslanjajte se na gore navedene tehnike preprocesiranja slike – oni su API-stabilni i učinkoviti.

Najbolje prakse

  • Tweak u malim koracima. Promijenite jedan parametar u jednom trenutku (npr. MedianFilterSize 3 → 5) i usporediti izlaze.
  • Preferirajte ROI. Krupanje samo na odgovarajuću površinu često udari bilo koji filter.
  • ** Izbjegavajte prekomjernu obradu.** Previše blur/upcaling može uništiti glifove oblike.
  • Automatične bazele. Držite mali skup zlatnih slika i pokrenite ih u CI-u kako biste otkrili regresije.
  • Save intermediates. Sačuvajte unaprijed obrađene slike na ./debug/ Knjiga tijekom tuninga.

More in this category