如何使用计算机视觉查找文本

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

简介

IronOCR 利用 OpenCV 使用计算机视觉来检测图像中存在文字的区域。这对于包含大量噪点的图像、文本位于多个不同位置的图像以及文本扭曲的图像非常有用。在 IronOCR 中使用计算机视觉可以确定文字区域的位置,然后使用 Tesseract 尝试读取这些区域。



通过 NuGet 软件包安装 IronOCR.ComputerVision

在 IronOCR 中执行计算机视觉的 OpenCV 方法在常规 IronOCR NuGet 软件包中可见。

使用这些方法需要在解决方案中安装 "IronOcr.ComputerVision "的 NuGet,如果没有安装,系统会提示您下载。

  • Windows: IronOcr.ComputerVision.Windows.
  • Linux:IronOcr.ComputerVision.Linux
  • macOS:IronOcr.ComputerVision.MacOS
  • macOS ARM:IronOcr.ComputerVision.MacOS.ARM

使用 NuGet 软件包管理器进行安装,或在软件包管理器控制台中粘贴以下内容:


PM> 安装软件包 IronOcr.ComputerVision.Windows

这将提供必要的程序集,以便在模型文件中使用 IronOCR 计算机视觉。

功能和应用程序接口

本教程后面还将提供代码示例。以下是当前可用方法的总体概述:

方法说明
查找文本区域检测包含文本元素的区域,并指示 Tesseract 仅在检测到文本的区域内搜索文本。
查找多个文本区域检测包含文本元素的区域,并根据文本区域将页面划分为不同的图像。
获取文本区域扫描图像并以 `List `格式返回文本区域列表`.

FindTextRegion

使用 FindTextRegion 将利用计算机视觉检测 OcrInput 对象每一页上包含文本元素的区域。

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-1.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindTextRegion();
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindTextRegion()
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
VB   C#

可选择使用自定义参数调用:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-2.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindTextRegion(Scale: 2.0, DilationAmount: 20, Binarize: true, Invert: true);
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindTextRegion(Scale:= 2.0, DilationAmount:= 20, Binarize:= True, Invert:= True)
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
VB   C#

在本示例中,我将使用下图来处理我正在编写的方法,该方法需要裁剪包含文本的区域,但输入图像的文本位置可能会有所不同。在这种情况下,我可以使用 FindTextRegion 将扫描范围缩小到计算机视觉已检测到文本的区域。这是一个图像示例:

带文字的图像
:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findtextregion-3.cs
using IronOcr;
using IronSoftware.Drawing;
using System;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("wh-words-sign.jpg");

// Find the text region using Computer Vision
Rectangle textCropArea = input.GetPages().First().FindTextRegion();

// For debugging and demonstration purposes, lets see what region it found:
input.StampCropRectangleAndSaveAs(textCropArea, Color.Red, "image_text_area", AnyBitmap.ImageFormat.Png);

// Looks good, so let us apply this region to hasten the read:
var ocrResult = ocr.Read("wh-words-sign.jpg", textCropArea);
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
Imports System.Linq

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("wh-words-sign.jpg")

' Find the text region using Computer Vision
Dim textCropArea As Rectangle = input.GetPages().First().FindTextRegion()

' For debugging and demonstration purposes, lets see what region it found:
input.StampCropRectangleAndSaveAs(textCropArea, Color.Red, "image_text_area", AnyBitmap.ImageFormat.Png)

' Looks good, so let us apply this region to hasten the read:
Dim ocrResult = ocr.Read("wh-words-sign.jpg", textCropArea)
Console.WriteLine(ocrResult.Text)
VB   C#

现在这段代码有两个输出,第一个是由 StampCropRectangleAndSaveAs 保存的 .png 文件,用于调试。我们可以看到 IronCV (计算机视觉) 以为文字是

突出显示文本区域的图像

看起来不错。现在,第二个输出是文本本身:

IRONSOFTWARE

50,000+

Developers in our active community

10,777,061 19,313
NuGet downloads Support tickets resolved
50%+ 80%+
Engineering Team growth Support Team growth
$25,000+

Raised with #TEAMSEAS to clean our beaches & waterways

FindMultipleTextRegions

使用 FindMultipleTextRegions 获取 OcrInput 对象的所有页面,并利用计算机视觉检测包含文本元素的区域,然后根据文本区域将输入内容划分为不同的图像:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findmultipletextregions-1.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindMultipleTextRegions();
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindMultipleTextRegions()
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
VB   C#

可选择使用自定义参数调用:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findmultipletextregions-2.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("/path/file.png");

input.FindMultipleTextRegions(Scale: 2.0, DilationAmount: -1, Binarize: true, Invert: false);
OcrResult result = ocr.Read(input);
string resultText = result.Text;
Imports IronOcr

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("/path/file.png")

input.FindMultipleTextRegions(Scale:= 2.0, DilationAmount:= -1, Binarize:= True, Invert:= False)
Dim result As OcrResult = ocr.Read(input)
Dim resultText As String = result.Text
VB   C#

FindMultipleTextRegions` 的另一个重载方法接收一个 OCR 页面,并返回一个 OCR 页面列表,其中每个文本区域对应一个 OCR 页面:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-findmultipletextregions-3.cs
using IronOcr;
using System.Collections.Generic;
using System.Linq;

int pageIndex = 0;
using var input = new OcrInput();
input.LoadImage("/path/file.png");

var selectedPage = input.GetPages().ElementAt(pageIndex);
List<OcrInputPage> textRegionsOnPage = selectedPage.FindMultipleTextRegions();
Imports IronOcr
Imports System.Collections.Generic
Imports System.Linq

Private pageIndex As Integer = 0
Private input = New OcrInput()
input.LoadImage("/path/file.png")

Dim selectedPage = input.GetPages().ElementAt(pageIndex)
Dim textRegionsOnPage As List(Of OcrInputPage) = selectedPage.FindMultipleTextRegions()
VB   C#

GetTextRegions

使用 GetTextRegions 会返回页面中检测到文本的裁剪区域列表:

:path=/static-assets/ocr/content-code-examples/how-to/computer-vision-gettextregions.cs
using IronOcr;
using IronSoftware.Drawing;
using System.Collections.Generic;
using System.Linq;

int pageIndex = 0;
using var input = new OcrInput();
input.LoadImage("/path/file.png");

var selectedPage = input.GetPages().ElementAt(pageIndex);
// List<Rectangle> regions = selectedPage.GetTextRegions();
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.Collections.Generic
Imports System.Linq

Private pageIndex As Integer = 0
Private input = New OcrInput()
input.LoadImage("/path/file.png")

Dim selectedPage = input.GetPages().ElementAt(pageIndex)
' List<Rectangle> regions = selectedPage.GetTextRegions();
VB   C#

具体使用案例指南

有了正确的设置和输入文件,OCR 可以成为一个非常强大的工具。它几乎可以完美地模仿人类的阅读能力。