如何使用计算机视觉查找文本
简介
IronOCR 利用 OpenCV 使用计算机视觉来检测图像中存在文字的区域。这对于包含大量噪点的图像、文本位于多个不同位置的图像以及文本扭曲的图像非常有用。在 IronOCR 中使用计算机视觉可以确定文字区域的位置,然后使用 Tesseract 尝试读取这些区域。
利用计算机视觉使用 OCR 的步骤
通过 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
可选择使用自定义参数调用:
: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
在本示例中,我将使用下图来处理我正在编写的方法,该方法需要裁剪包含文本的区域,但输入图像的文本位置可能会有所不同。在这种情况下,我可以使用 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)
现在这段代码有两个输出,第一个是由 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
可选择使用自定义参数调用:
: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
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()
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();
具体使用案例指南
有了正确的设置和输入文件,OCR 可以成为一个非常强大的工具。它几乎可以完美地模仿人类的阅读能力。