A rossz szkennelések, telefonszámok, faxok és tömörített képernyőfelvételek gyakran legyőzik az OCR-t. A jó hír: a kis előfeldolgozás hosszú úton halad. Ez az útmutató praktikus, futható lépéseket (a végén a gesztenyeivel összehangolva) a képek tisztítására előtte az OKR-ot és a tune a motorhoz jelentősen jobb eredmények elérése érdekében.
Teljes példa
előfeltételek
- .NET 8 (vagy .Net 6+) SDK
- A NuGet:
Aspose.OCR
- ( az opcionális
Aspose.Total.lic
Ha az értékelési határértékek túllépését tervezi
Hozzon létre egy konzol alkalmazást, és adja hozzá a csomagot:
dotnet new console -n OCRImprovementExample -f net8.0
cd OCRImprovementExample
dotnet add package Aspose.OCR
1. lépés - Alacsony minőségű képek előfeldolgozása
Cél: csökkenti a zajt, normalizálja a kontraszt / fényességet, és (opcionálisan) az OCR előtt felmászni vagy termeszteni.
1.1 Töltse le a képet
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 A zaj eltávolítása (középső szűrő)
Használjon egy ** közepes szűrőt** a só- és paprika zaj és a JPEG művek elnyomására.
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
};
- Mikor kell változtatni: *
- Ha még mindig látod a spektrumokat, emelkedj fel
MedianFilterSize
A „5” - Ha kicsi karakterek eltűnnek, dobja vissza a 3 vagy kapcsolja ki.
1.3 A kontraszt/világosság normalizálása
A szöveg a háttérből kiemelkedik.
var contrastOptions = new ContrastOptions
{
// Positive values increase contrast/brightness; negatives decrease
ContrastAdjustment = 20, // try 10..30
BrightnessAdjustment = 10 // try -10..+15 based on exposure
};
- A szivárgás szabályai: *
- A túlnyomó (tisztított): csökkenti a fényességet (például -10) és tartja a kontraszt mérsékelt.
- Nem kitéve (túl sötét): fokozza a fényességet (például +10) és a kontrasztot (pl. ** +20**).
1.4 Építési csővezeték és előfeldolgozás
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 (Opcionális) Upscale kis szöveg
Ha a szöveg nagyon kicsi (<10px magasság), az OCR-t a kiváló minőségű újratárgyalással fókuszáljuk.
// 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 (Opcionális) Crop a Region of Interest (ROI)
Ha csak egy adagra van szüksége (például fejjel, számlázási összegek), a termés csökkenti a csapadékot és a hiba.
// 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 (Opcionális) Gyors binárisítás (DIY)
Ha a háttérszínek bonyolultak, átalakítsa a szürke és a küszöbérték. (Ezt csak akkor használja, ha az OCR építés hiányzik egy elkötelezett bináris opció; ez egy egyszerű visszaesés.)
// 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. lépés – Állítsa be az OCR beállításokat (opcionális, ha az építésben elérhető)
Néhány Aspose.OCR építi ki a motor szintű beállításokat. Ha a csomagod rendelkezik velük, állítsa be nyelv és oldal elrendezés utasításokat, hogy segítsen a szegmentációban és a felismerésben.
// 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;
- Mikor kell beállítani: *
- ** Keverékes nyelvek:** váltani a megfelelő nyelvre vagy többnyelvű üzemmódra.
- Dense szöveges blokkok:
PageSegmentationMode.Auto
vagy a ** dokumentum** módban. - Formák / táblák: preferálja a Dokumentum szegmentációt; a termelés a régióhoz, amikor lehetséges.
3. lépés – Az OCR és az Evaluation futtatása
Ez a pontos áramlás a héttől: 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);
}
}
}
}
Export szöveg: Írja be a fájl ellenőrzéséhez:
File.WriteAllText("recognized.txt", recognizedText);
Tünet → Fix (Cheat-Sheet API opciókkal)
Symptom | Mit kell megpróbálni | Hogyan kell beállítani (kód) |
---|---|---|
** Speckle zaj / JPEG tárgyak** | Átlagos szűrő (3 → 5) | new FilterOptions { MedianFilter = true, MedianFilterSize = 3 } |
„A sötétség” | Növeli a fényességet (+5..+15) és a kontrasztot (+10.. +25) | new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 } |
„Tisztítva” | Csökkenti a fényességet (-5..-15), mérsékelt kontraszt | BrightnessAdjustment = -10, ContrastAdjustment = 10..20 |
* Nagyon kis szöveg* | Felszín × 1,25–× 1,75 Ezután Az OCR | image = Upscale(image, 1.5); |
*Busz háttér / színes zaj | DIY Binarizáció vagy Crop ROI | var bin = ToBinary(image, 185); vagy image = image.Clone(roi, ...) |
Szerkesztett szkennelés | Deskew (ha ki van téve) vagy re-scan straighter | (Ha az építkezés egy Deskew opciót mutat be, engedélyezze azt; máskülönben növeli és menteni) |
* vegyes nyelvek* | Az OCR nyelv(ek) kifejezetten beállítása | (ha rendelkezésre áll) ocrEngine.Settings.Language = RecognitionLanguages.English; |
* Táblázati tartalom * | Növények a táblázati régió előtt OCR | image.Clone(roi, image.PixelFormat) |
Ha egy ingatlan nem áll rendelkezésre a csomagban, támaszkodjon a fenti ** kép előfeldolgozási** technikákra – ezek API-stabil és hatékony.
Legjobb gyakorlatok
- Kisméretű lépések. Egy paraméter megváltoztatása egyszerre (például
MedianFilterSize
3 → 5) és összehasonlítsa a kimeneteleket. - Szeretjük a ROI-t. A megfelelő területen való csúszás gyakran minden szűrőt megüt.
- ** Kerülje a túlzott feldolgozást.** Túl sok blur/upcaling elpusztíthatja a glif formákat.
- Automatizált baselinek. Tartsa egy kis arany készlet trükkös képeket, és futtatja őket a CI-ben a regressziók észlelése érdekében.
- Save intermediates. Megőrizze az előre feldolgozott képeket a
./debug/
Folyamatok a tuning alatt.
More in this category
- Automatizált AP: Aspose.OCR Számlázás a .NET szöveghez
- Automatizálja az OCR-t az Aspose.OCR használatával a .NET-hez
- Automatikus adatbevétel az Aspose.OCR segítségével a .NET-hez
- Automatikus DMS címkézés az Aspose.OCR használatával a .NET-hez
- Automatikus dokumentumfeldolgozás az Aspose.OCR .NET használatával