使用IronOCR过滤器指南

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR提供了所需的工具,可读取可能需要以过滤器形式进行一些预处理的图像。您可以从广泛的过滤器中进行选择,这些过滤器可以操作您的图像以使其可处理。

适用于OCR的C# NuGet库

安装使用 NuGet

Install-Package IronOcr
Java PDF JAR

下载 DLL

下载DLL

手动安装到你的项目中

适用于OCR的C# NuGet库

安装使用 NuGet

Install-Package IronOcr
Java PDF JAR

下载 DLL

下载DLL

手动安装到你的项目中

开始在您的项目中使用IronPDF,并立即获取免费试用。

第一步:
green arrow pointer

查看 IronOCRNuget 用于快速安装和部署。它有超过800万次下载,正在使用C#改变OCR。

适用于OCR的C# NuGet库 nuget.org/packages/IronOcr/
Install-Package IronOcr

考虑安装 IronOCR DLL 直接。下载并手动安装到您的项目或GAC表单中: IronOcr.zip

手动安装到你的项目中

下载DLL

OCR 图像过滤器列表

以下图像过滤器可以真正提高性能:

  • 改变图像方向的滤镜

    • 旋转 - 顺时针旋转图像若干度。若要逆时针旋转,请使用负数。

    • Deskew--旋转图像,使其向上正交。这对 OCR 非常有用,因为 Tesseract 对倾斜扫描的容忍度可低至 5 度。
  • Scale - 按比例缩放 OCR 输入页面。
  • 处理图像颜色的滤镜

    • 二值化 - 此图像过滤器可将每个像素变成黑色或白色,没有中间色。可在文本与背景对比度非常低的情况下提高 OCR 性能。

    • ToGrayScale--该图像过滤器将每个像素都变成灰度。不太可能提高 OCR 精确度,但可能会提高速度

    • Invert - 反转每种颜色。例如,白色变成黑色:黑色变成白色。
  • ReplaceColor - 将图像中的一种颜色替换为另一种颜色(具有一定的阈值)。
  • 尝试改善图像对比度的滤镜

    • 对比度 - 自动增加对比度。该滤镜通常能提高低对比度扫描的 OCR 速度和准确性。

    • 放大 - 高级形态学。_Dilation_在图像中的物体边界添加像素。与 "侵蚀 "相反
  • Erode - 高级形态学。删除对象边界上的像素。与扩张相反
  • 减少图像噪点的滤镜

    • 锐化(Sharpen) - 锐化模糊的 OCR 文档,并将 Alpha 通道平铺为白色。

    • 去噪 - 去除数字噪点。该滤镜只能用于预计会产生噪点的地方。

    • DeepCleanBackgroundNoise - 去除严重的背景噪音。只有在已知文档背景噪音极大的情况下才可使用该过滤器,因为该过滤器还可能降低干净文档的 OCR 精确度,而且 CPU 成本非常高。

    • EnhanceResolution - 增强低质量图像的分辨率。由于 OcrInput.MinimumDPIOcrInput.TargetDPI 会自动捕捉并解析低分辨率输入,因此通常不需要使用此过滤器。

过滤器示例和使用方法

在下面的示例中,我们将演示如何在代码中应用过滤器

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-1.cs
using IronOcr;
using System;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("my_image.png");
input.Deskew();

var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("my_image.png")
input.Deskew()

Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

调试过滤器 / 过滤器在做什么?

如果您在程序中读取图像或条形码时遇到困难。有一种方法可以在程序中保存过滤结果的图像。这样您就可以调试并查看每个过滤器的具体操作以及它是如何处理图像的。

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-2.cs
using IronOcr;
using System;

var file = "skewed_image.tiff";
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(file, pageindices);
// Here we apply the filter: Deskew
input.Deskew();

// Save the input with filter(s) applied
input.SaveAsImages("my_deskewed");

// We read, then print the text to the console
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private file = "skewed_image.tiff"
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames(file, pageindices)
' Here we apply the filter: Deskew
input.Deskew()

' Save the input with filter(s) applied
input.SaveAsImages("my_deskewed")

' We read, then print the text to the console
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

过滤器用例

旋转

API文档

过滤器说明

旋转是一种滤镜,用于手动设置图像的已知旋转角度,使其最接近直线。IronOCR 具有运行 "纠偏 "的功能。()但是,这种宽容度非常小,最好用于几乎完全平直的图像。 (15度以内).对于偏离 90 度或上下颠倒的输入图像,我们应该调用 Rotate().

用例代码示例

这是一个调用旋转纠正图像颠倒的示例:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-3.cs
using IronOcr;
using System;

var image = "screenshot.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);

// Rotate 180 degrees because image is upside-down
input.Rotate(180);

// Read image into variable: result
var result = ocr.Read(input);

// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "screenshot.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Rotate 180 degrees because image is upside-down
input.Rotate(180)

' Read image into variable: result
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
VB   C#

在 "输入.旋转 "之前(180)` 在 "输入.旋转 "之后(180)`

--

Deskew

API文档

过滤器说明

使用 Hough 变换尝试在一定误差范围内拉直图像。这对不完全平直的图像非常重要,因为有时倾斜的文档可能会导致误读。

*注意:如果应用了过滤器,此方法返回一个布尔值为 true;如果由于无法检测图像方向而应用失败,则返回 false。如果页面没有内容,无法确定方向,则此方法将失败。

用例代码示例

这是一个调用 Deskew 来纠正倾斜图像的示例:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-4.cs
using IronOcr;
using System;

var image = @"paragraph_skewed.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);

// Apply deskew with 15 degree snap
bool didDeskew = input.Deskew(15);
if (didDeskew)
{
    // Read image into variable: result
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
else
{
    Console.WriteLine("Deskew not applied because Image Orientation could not be determined.");
}
Imports IronOcr
Imports System

Private image = "paragraph_skewed.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply deskew with 15 degree snap
Dim didDeskew As Boolean = input.Deskew(15)
If didDeskew Then
	' Read image into variable: result
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
Else
	Console.WriteLine("Deskew not applied because Image Orientation could not be determined.")
End If
VB   C#

在 "德斯克 "之前()` 在 "Deskew "之后()`

--

规模

API文档

过滤器说明

缩放是一个有用的图像处理滤镜,它可以帮助使用已有像素调整图像大小。当扫描不到条形码(因为图像只有几十个像素宽,每个条形码只有一个像素),或者文本太小且没有抗锯齿时,就可以使用该滤镜。

*注意:如果您的条形码无法被找到,则应考虑使用 "1000px x 1000px "的条形码尺寸来读取条形码。

用例代码示例

这是一个调用 Scale 放大条形码中条形之间的间隙以便扫描的示例:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-5.cs
using IronOcr;
using System;

var image = @"small_barcode.png";
var ocr = new IronTesseract();

// Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);

// Apply scale
input.Scale(400); // 400% is 4 times larger

// Read image into variable: result
var result = ocr.Read(input);

// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "small_barcode.png"
Private ocr = New IronTesseract()

' Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = True

Dim input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply scale
input.Scale(400) ' 400% is 4 times larger

' Read image into variable: result
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
VB   C#

在 "刻度 "之前()` Scale()

--

二值化

API文档

过滤器说明

二值化滤波器会将图像中的所有像素分为黑色或白色,这取决于一种自适应算法,该算法会评估图像和它认为是背景的颜色。当图像中有很多颜色,但文字却很突出时,二值化滤镜就会去除所有颜色,将背景分离成纯白色,而它识别出的文字则会被染成全黑,以方便阅读。

用例代码示例

这是一个调用 Binarize 来对齐彩色文本并去除背景色和噪点的示例:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-6.cs
using IronOcr;
using System;

var image = @"no-binarize.jpg";
var ocr = new IronTesseract();

using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);

// Apply Binarize
input.Binarize();

// Read image into variable: result
var result = ocr.Read(input);

// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "no-binarize.jpg"
Private ocr = New IronTesseract()

Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply Binarize
input.Binarize()

' Read image into variable: result
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
VB   C#

在 "二值化 "之前()` 在 "二进制化 "之后()`

--

反转

API文档

过滤器说明

当读取的图像是白底黑字时,IronOCR 的读取效果最佳。在应用一系列滤镜时,重要的是在读取之前尽量达到这种效果。反转是一个简单的滤镜,可以反转图像上的所有颜色。白色变成黑色,黑色变成白色,两者之间的所有颜色都会翻转。

用例代码示例

这是一个调用 Invert 将黑底白字转换为白底黑字的示例:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-7.cs
using IronOcr;
using System;

var image = @"before-invert.png";
var ocr = new IronTesseract();

using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);

// Apply Invert
input.Invert(true);

// Read image into variable: result
var result = ocr.Read(input);

// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "before-invert.png"
Private ocr = New IronTesseract()

Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply Invert
input.Invert(True)

' Read image into variable: result
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
VB   C#

之前 之后

--