Špatné skenování, telefonní snímky, faxy a komprimované screenshoty často porazí OCR. Dobrá zpráva: malá předběžná zpracování jde dlouhou cestou. Tento průvodce vám poskytuje praktické, běžící kroky (v souladu s hřebenem na konci) k vyčistění obrázků **před **OCR a k tune motoru oCR pro výrazně lepší výsledky.

Kompletní příklad

Předpoklady

  • • .NET 8 (nebo 6+) SDK
  • V tomto případě: Aspose.OCR
  • Opční ) Aspose.Total.lic Pokud plánujete překročit hodnotící limity

Vytvořte aplikaci konzole a přidejte balíček:

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

Krok 1 - Preproces nízkokvalitních snímků

**Cílem je snížit hluk, normalizovat kontrast / jasnost a (opcionálně) zvýšit nebo pěstovat před OCR.

1.1 Nahrávejte obrázek

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 Odstraňování hluku (střední filtr)

Použijte prostřední filtr k potlačení hluku soli a papíru a JPEG artefaktů.

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

Kdy se mění: *

  • Pokud vidíte zrcadla, zvedněte MedianFilterSize Připravte se na *5.
  • Pokud zmizí drobné znaky, přejděte zpět na 3 nebo je vypněte.

1.3 Normalizace kontrastu / jasnosti

Vytvořte text z pozadí.

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

** Pravidla tumu :**

  • Overexposed (vyprázdněný): snižuje jasnost (např. -10) a udržuje kontrast mírný.
  • Nedostupné (přehnaně tmavé): zvýšení jasu (např. +10) a kontrastu (npr. +20*).

1.4 Stavba zpracovatelské potrubí a předproces

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 (volitelné) Upscale malý text

Pokud je text velmi malý (<10px výška), upscale před OCR pomocí vysoce kvalitního resamplingu.

// 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 (volitelné) Zelenina v oblasti zájmu (ROI)

Pokud potřebujete pouze jednu porci (např. titulky, celkové faktury), pěstujte, abyste snížili klouby a chyby.

// 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 (volitelná) Rychlá binaryzace (DIY)

Pokud jsou barvy pozadí složité, konvertujte na šedé a hranici. (používejte to pouze v případě, že vaše OCR stavby chybí speciální binární možnost; je to jednoduchý padák.)

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

Krok 2 – Nastavení OCR (volitelné, pokud je k dispozici ve vaší sestavě)

Některé ASPOSE.OCR budovy vystavují nastavení na úrovni motoru. Pokud je váš balíček má, nastavte jazyk a stránkový rozvrh tipy, které pomohou segmentaci a rozpoznávání.

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

*Kdy je potřeba nastavit: *

  • Mixed languages: přejděte na příslušný jazyk nebo vícejazyčný režim.
  • Dánské textové bloky: PageSegmentationMode.Auto nebo režim dokumentů.
  • Formy / tabulky: preferuje *Dokumentní segmentaci; pěstování do regionu kdykoli je to možné.

Krok 3 – Spustit OCR & Hodnocení

Toto je přesný tok z hmoty: předproces → rozpoznat → tisk.

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

Export text: napsat do souboru pro kontrolu:

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

Symptom → Fix (Cheat-Sheet s možností API)

SymptomCo se pokusitJak nastavit (kód)
** Zvukový hluk / JPEG artefakty**Střední filtr (3 → 5)new FilterOptions { MedianFilter = true, MedianFilterSize = 3 }
„Toto je tma“Zvýšení jasu (+5..+15) a kontrastu (+10.. +25)new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 }
* Vyprázdněné *Snížení jasu (-5..-15), mírný kontrastBrightnessAdjustment = -10, ContrastAdjustment = 10..20
* velmi malý text *Upscale × 1,25–× 1,75 Poté OCRimage = Upscale(image, 1.5);
Busy pozadí / barevný hlukDIY binaryzace nebo crop ROIvar bin = ToBinary(image, 185); nebo image = image.Clone(roi, ...)
* Zkreslené skenování *Deskew (pokud je vystaven) nebo re-scan straighter(Jestliže vaše stavba vystavuje možnost Deskew, aktivujte ji; jiný crop & rescan)
* Smíšené jazyky *nastavení OCR jazyka(s) výslovně(pokud je k dispozici) ocrEngine.Settings.Language = RecognitionLanguages.English;
* Tabulový obsah *Zelenina do tabulkové oblasti před OCRimage.Clone(roi, image.PixelFormat)

Nejsou všechny stavby vystavovány stejným motorovým nastavením. Pokud není ve vašem balíčku k dispozici žádná vlastnost, spolehněte se na výše uvedené techniky preprocesování obrazu – jsou API stabilní a efektivní.

Nejlepší postupy

  • Tweak v malých krocích. Změňte jeden parametr najednou (např. MedianFilterSize 3 → 5) a porovnejte výstupy.
  • Nejlépe ROI. Krupování pouze do příslušné oblasti často zasahuje do jakéhokoli filtru.
  • ** Vyhýbejte se nadměrnému zpracování.** Příliš mnoho blur/upcaling může zničit glyphové tvary.
  • Automatické bazeliny. Udržujte malý zlatý soubor trickových snímků a spustíte je v CI, abyste detekovali regrese.
  • Save intermediates. Uložit předprocesované obrázky do ./debug/ V průběhu tuningu.

More in this category