如何使用電腦視覺尋找文本

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

介紹

IronOCR 使用 OpenCV 利用计算机视觉来检测图像中存在文本的区域。 這對於包含大量噪音的圖像、文字分佈在許多不同位置的圖像,以及文字扭曲的圖像非常有用。 IronOCR 中使用計算機視覺將確定文本區域的位置,然後使用 Tesseract 嘗試讀取這些區域。

-如何在 C# 中進行車牌 OCR(教程)

-如何從 C# 教程中獲取發票文本

-如何在C#中從截圖中獲取文字OCR

-如何在 C# 中進行字幕光學字符識別(教程)



IronOCR.ComputerVision 透過 NuGet 套件安裝

在IronOCR中執行電腦視覺的OpenCV方法可在常規的IronOCR NuGet套件中看到。

使用這些方法需要在解決方案中安裝 NuGet 的 IronOcr.ComputerVision,如果您尚未安裝,系統將提示您下載。

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

    使用 NuGet 包管理器安裝或在包管理器控制台中粘貼以下內容: 請提供內容以進行翻譯。

PM> Install-Package IronOcr.ComputerVision.Windows 請提供內容以進行翻譯。

這將提供使用我們模型文件所需的組件以使用IronOCR電腦視覺。

功能和 API

本教程後面包括了代碼示例。 以下是目前可用方法的一般概述:

方法解釋
尋找文本區域檢測包含文字元素的區域並指示Tesseract僅在檢測到文字的區域內搜尋文字。
查找多個文本區域檢測包含文字元素的區域,並根據文字區域將頁面劃分為單獨的圖像。
獲取文本區域掃描圖像並返回文本區域列表為 `List`.

尋找文本區域

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 檔案,用於除錯。 We can see where 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 可以處理 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 頁面的列表,每個頁面分別對應一個文本區域:

: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 會返回在頁面中檢測到文字的剪裁區域列表:

: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 可以是一個非常強大的工具。 它幾乎可以完美地模仿人類的閱讀能力。