나쁜 스캔, 전화 촬영, 팩스 및 압축 스크린 샷은 종종 OCR를 이길 수 있습니다. 좋은 소식 : 작은 사전 처리는 길을 가고 있습니다.이 가이드는 당신에게 실용적이고 실행 가능한 단계를 제공합니다 (결말에 과 일치) 이미지를 청소하기 위해 OCR 전에 그리고 **더 나은 결과를 위해 오CR 엔진을 만듭니다.

완전한 예제

원칙

  • .NET 8 (또는.NET 6+) SDK
  • 니게트 : Aspose.OCR
  • 옵션 (Optional ) 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*에 해당되는 글 1건
  • 작은 캐릭터가 사라지면 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 & Evaluate 실행

이것은 가스에서 온 정확한 흐름입니다 : 사전 처리 → 인식 → 프린트.

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

증상 → 고정 (API 옵션을 가진 Cheat-Sheet)

Symptom무엇을 시도할 것인가코드를 설정하는 방법 (code)
** 스페클 소음 / JPEG 유물**중간 필터 (3 → 5)new FilterOptions { MedianFilter = true, MedianFilterSize = 3 }
* 어두운 것*밝기를 향상시키기 (+5..+15) 및 대조 (+10.. +25)new ContrastOptions { BrightnessAdjustment = 10, ContrastAdjustment = 20 }
* 깨끗하게 씻어내기*낮은 밝기 (5..-15), 적당한 대조BrightnessAdjustment = -10, ContrastAdjustment = 10..20
* 아주 작은 텍스트*우스케일 × 1.25–× 1.75 그런 다음 오크리image = Upscale(image, 1.5);
** 바쁜 배경 / 색상 소음**DIY 바이너리화 또는 crop ROIvar bin = ToBinary(image, 185); 또는 image = image.Clone(roi, ...)
* 스크린 스캔*데스케우 (상출된 경우) 또는 다시 스캔 스트라이더(당신의 건물이 Deskew 옵션을 표시하는 경우, 그것을 활성화; 다른 crop & rescan)
* 혼합된 언어*OCR 언어(s)를 명시적으로 설정(만약 사용할 수 있다면) ocrEngine.Settings.Language = RecognitionLanguages.English;
* 테이블 콘텐츠*식물은 OCR 전에 테이블 지역에image.Clone(roi, image.PixelFormat)

모든 건물이 동일한 엔진 설정을 노출하는 것은 아닙니다. 패키지에 속성이 없으면 위의 ** 이미지 사전 처리** 기술에 의존하십시오. - API 안정적이고 효율적입니다.

모범 사례

  • 작은 단계로 움직이십시오. 한 번에 하나의 매개 변수를 변경하십시오 (예 : MedianFilterSize 3 → 5) 그리고 결과를 비교합니다.
  • ** ROI를 선호합니다.** 적절한 영역에만 굴리는 것은 종종 어떤 필터도 때립니다.
  • ** 과도한 처리를 피하십시오.** 너무 많은 블루 / 오프 스칼링은 글리프 형태를 파괴 할 수 있습니다.
  • 자동 바젤. 작은 골드 세트를 유지하고 CI에서 실행하여 회복을 감지합니다.
  • Save intermediates. 사전 처리 된 이미지를 저장합니다. ./debug/ 튜닝 기간 동안 폴더.

More in this category