如何使用IronOCR建構Azure OCR服務

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

Iron Software已經建立了一個OCR(光學字元識別)程式庫,消除了Azure OCR整合的互操作性問題。 在Azure上使用OCR程式庫一直讓開發者感到有些困擾。 解決這個問題及許多其他OCR難題的方案是IronOCR。

IronOCR為Microsoft Azure帶來的功能

IronOCR包含以下功能,用於在Microsoft Azure上建立OCR服務:

  • 將PDF轉換為可搜尋的文件,方便提取文字
  • 透過從圖片中提取文字將圖片轉換為可搜尋的文件
  • 讀取條碼和QR碼
  • 優異的準確性
  • 本地運行,不需要SaaS(Software as a Service,即軟體即服務),這是一種雲端供應商如Microsoft Azure托管各種應用程式並使這些應用程式可供最終使用者使用的軟體發行模式。
  • 極快的速度

讓我們來看看Iron Software的IronOCR這個最佳OCR引擎如何讓開發者更容易提取任何輸入文件中的文字。

讓我們開始我們的Azure OCR服務

要開始範例,我們首先需要安裝IronOCR。

  1. 建立一個新的C#主控台應用程式。
  2. 通過NuGet安裝IronOCR,可以通過輸入:Install-Package IronOcr或者選擇管理NuGet套件並搜尋IronOCR。 如下所示。
  3. 編輯您的Program.cs文件,讓它看起來如下:
  • 我們引入IronOCR命名空間以利用其OCR功能讀取和提取PDF文件內容。
  • 我們建立一個新的IronTesseract物件,以便我們可以從圖片中提取文字。
using IronOcr;
using System;

namespace IronOCR_Ex
{
    class Program
    {
        static void Main(string[] args)
        {
            var ocr = new IronTesseract();
            using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
            {
                var result = ocr.Read(Input); // Read PNG image File
                Console.WriteLine(result.Text); // Output extracted text to console
                Console.ReadLine();
            }
        }
    }
}
using IronOcr;
using System;

namespace IronOCR_Ex
{
    class Program
    {
        static void Main(string[] args)
        {
            var ocr = new IronTesseract();
            using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
            {
                var result = ocr.Read(Input); // Read PNG image File
                Console.WriteLine(result.Text); // Output extracted text to console
                Console.ReadLine();
            }
        }
    }
}
Imports IronOcr
Imports System

Namespace IronOCR_Ex
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim ocr = New IronTesseract()
			Using Input = New OcrInput("..\Images\Purgatory.PNG")
				Dim result = ocr.Read(Input) ' Read PNG image File
				Console.WriteLine(result.Text) ' Output extracted text to console
				Console.ReadLine()
			End Using
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel
  1. 接下來,我們打開一張名為Purgatory.PNG的圖片。 這張圖片是但丁的神曲之一 - 我最喜愛的書之一的一部分。 圖片看起來像下一張圖片。

     使用IronOCR的光學字元閱讀功能提取的文字

圖2 - 使用IronOCR的光學字元閱讀功能提取的文字

  1. 從上述輸入圖片文字提取的輸出結果。

提取的文字

圖3 - 提取的文字

  1. 讓我們對PDF文件進行相同的操作。 PDF文件包含與圖2相同的提取文字。

唯一的不同是我們將使用PDF文件而不是圖片。 輸入以下程式碼:

:path=/static-assets/ocr/content-code-examples/get-started/azure-2.cs
var OCR = new IronTesseract();
using (var input = new OcrInput())
{
    input.Title = "Divine Comedy - Purgatory"; // Give title to input document 
    // Supply optional password and name of document
    input.LoadPdf("..\\Documents\\Purgatorio.pdf", Password: "dante");
    var result = OCR.Read(input); // Read the input file
                
    result.SaveAsSearchablePdf("SearchablePDFDocument.pdf"); 
}
Imports IronTesseract

Dim OCR As New IronTesseract()
Using input As New OcrInput()
    input.Title = "Divine Comedy - Purgatory" ' Give title to input document
    ' Supply optional password and name of document
    input.LoadPdf("..\Documents\Purgatorio.pdf", Password:="dante")
    Dim result = OCR.Read(input) ' Read the input file

    result.SaveAsSearchablePdf("SearchablePDFDocument.pdf")
End Using
$vbLabelText   $csharpLabel

這段程式碼與上個從圖片中提取文字的程式碼幾乎相同。

在這裡我們使用OcrInput方法來讀取當前的PDF文件,在這個案例中為:Purgatorio.pdf。 如果PDF文件中有中間資料,例如標題或密碼,我們也可以輸入。

結果將保存為可搜尋的PDF文件,我們可以在其中搜尋文字。

注意,如果PDF文件過大,可能會拋出異常。

  1. Windows應用程式講得夠多了; 讓我們看看如何在Microsoft Azure上使用OCR。

IronOCR的美好之處在於它在Microservice架構中的Azure Function中與Microsoft Azure非常好地配合使用。 這是一個使用IronOCR的Microsoft Azure Function的快篩例範。本Microsoft Azure Function從圖片中提取文字。

public static class OCRFunction
{
    public static HttpClient hcClient = new HttpClient();

    [FunctionName("IronOCRFunction_EX")]
    public static async Task<IActionResult> Run([HttpTrigger] HttpRequest hrRequest, ExecutionContext ecContext)
    {
        var URI = hrRequest.Query["image"];
        var saStream = await hcClient.GetStreamAsync(URI);

        var ocr = new IronTesseract();
        using (var inputOCR = new OcrInput(saStream))
        {
            var outputOCR = ocr.Read(inputOCR);
            return new OkObjectResult(outputOCR.Text);
        }
    }
} 
public static class OCRFunction
{
    public static HttpClient hcClient = new HttpClient();

    [FunctionName("IronOCRFunction_EX")]
    public static async Task<IActionResult> Run([HttpTrigger] HttpRequest hrRequest, ExecutionContext ecContext)
    {
        var URI = hrRequest.Query["image"];
        var saStream = await hcClient.GetStreamAsync(URI);

        var ocr = new IronTesseract();
        using (var inputOCR = new OcrInput(saStream))
        {
            var outputOCR = ocr.Read(inputOCR);
            return new OkObjectResult(outputOCR.Text);
        }
    }
} 
Public Module OCRFunction
	Public hcClient As New HttpClient()

	<FunctionName("IronOCRFunction_EX")>
	Public Async Function Run(<HttpTrigger> ByVal hrRequest As HttpRequest, ByVal ecContext As ExecutionContext) As Task(Of IActionResult)
		Dim URI = hrRequest.Query("image")
		Dim saStream = Await hcClient.GetStreamAsync(URI)

		Dim ocr = New IronTesseract()
		Using inputOCR = New OcrInput(saStream)
			Dim outputOCR = ocr.Read(inputOCR)
			Return New OkObjectResult(outputOCR.Text)
		End Using
	End Function
End Module
$vbLabelText   $csharpLabel

這將函式接收到的圖片直接餵入OCR引擎,輸出提取的文字。

根據Microsoft,這是對Microsoft Azure的一個快速回顧:

Microsoft Azure Microservices是一種構建應用程式的架構方法,每個核心功能或服務均獨立構建和部署。 微服務架構是分散的和鬆耦合的,因此單個組件的故障不會破壞整個應用程式。獨立組件共同工作並通過定義良好的API合約進行通信。 構建微服務應用程式以滿足快速變化的業務需求並更快速地將新功能推向市場.

IronOCR與.NET或Microsoft Azure的其他功能還包括以下內容:

  • 能夠在幾乎任何文件、圖片或PDF上執行OCR。
  • 處理OCR輸入的速度極快
  • 優異的準確性
  • 讀取條碼和QR碼
  • 本地運行,不需要SaaS
  • 可以將PDF和圖片轉換為可搜尋的文件
  • 微軟認知服務的Azure OCR的絕佳替代方案

提高OCR性能的圖像篩選器

  • OcrInput.Rotate - 順時針旋轉圖像若干度數。逆時針旋轉可以使用負數。
  • OcrInput.Binarize() - 這個圖像篩選器將每個像素變成黑色或白色,沒有中間色。 這提高了OCR性能。
  • OcrInput.ToGrayScale() - 這個圖像篩選器將每個像素變成灰階。 這提高了OCR速度。
  • OcrInput.Contrast() - 自動增加對比度。 此篩選器在低對比度掃描中提高OCR速度和準確性。
  • OcrInput.DeNoise() - 去除數位噪點。這個篩選器應該僅在輸入文件預期有噪點時使用。
  • OcrInput.Invert() - 反轉每個顏色。
  • OcrInput.Dilate() - 擴張會在圖像中任何物件的邊界新增像素。
  • OcrInput.Erode() - 腐蝕會在物件邊界移除像素。
  • OcrInput.Deskew() - 旋轉圖像,以便它正確向上和正交。 這對於OCR非常有用,因為Tesseract對傾斜掃描的容忍度可能低至5度。
  • OcrInput.DeepCleanBackgroundNoise() - 去除重背景噪音。
  • OcrInput.EnhanceResolution - 增強低品質圖像的解析度。

速度性能

以下是一個範例:

:path=/static-assets/ocr/content-code-examples/get-started/azure-4.cs
var OCR = new IronTesseract();
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
OCR.Language = OcrLanguage.EnglishFast;
using (var Input = new OcrInput())
{
    Input.LoadImage("..\\Images\\Purgatory.PNG");
    var Result = OCR.Read(Input);
    Console.WriteLine(Result.Text);
}
Imports IronOcr

Dim OCR As New IronTesseract()
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly
OCR.Language = OcrLanguage.EnglishFast

Using Input As New OcrInput()
    Input.LoadImage("..\Images\Purgatory.PNG")
    Dim Result = OCR.Read(Input)
    Console.WriteLine(Result.Text)
End Using
$vbLabelText   $csharpLabel

價格和授權選項

基本上有三個付費授權等級,都基於一次性購買終身授權原則。

沒錯,這些可以免費用於開發目的。

更多資訊

  • 其他資源可以在以下連結中找到:資源
  • API參考資料可以在這裡找到:API參考資料
  • IronOCR產品的支援可以在這裡找到:支援
  • 聯繫Iron Software:聯繫資訊

IronOCR在Azure和其他系統上運行OCR的.NET應用程式功能

  • IronOCR支持125種國際語言。 每種語言都有Fast、Standard和Best三種品質。 可用的部分語言包包括:
  • 保加利亞語
  • 亞美尼亞語
  • 克羅埃西亞語
  • 非洲語
  • 丹麥語
  • 捷克語
  • 菲律賓語
  • 芬蘭語
  • 法語
  • 德語
  • 還有許多其他語言包可供選擇,請點擊以下連結查看。 IronOCR語言包
  • 在.NET中開箱即用
  • 支持Xamarin
  • 支持Mono
  • 支持Microsoft Azure
  • 支援Microsoft Azure上的Docker
  • 支援PDF文件
  • 支援多幀Tiff
  • 支援所有主要圖像格式
  • 支持的.NET框架如下:
    • .NET Framework 4.5及更高版本
    • .NET Standard 2
    • .NET Core 2
    • .NET Core 3
    • .NET Core 5
  • 您不需要安裝Tesseract(支持Unicode和超過100種語言的開源OCR引擎)才能運行IronOCR。
    • 在準確性方面超過Tesseract。
    • 在速度方面超過Tesseract。
  • 修正文件或文件的低品質掃描。
  • 修正文件或文件的低品質傾斜掃描。

什麼是光學字元識別(OCR)?

根據維基百科:光學字元識別是一種將圖片中的打字或印刷文字轉換為機器編碼文字的電子或機械轉換技術,無論是來自掃描文件、文件照片、場景照片還是疊加在圖片上的字幕文字。 OCR是光學字元識別的縮寫。 光學字元識別基本上有四種型別:

  • OCR - 光學字元識別,針對來自於輸入文件的打字文字,一次一個字元或字形(符號集中的基本符號,例如不同字體中的' a')。
  • OWR - 光學文字識別,針對來自於輸入文件的打字文字,一次一個單字。
  • ICR - 智能字元識別,針對印刷文字如印刷字體(沒有連接到其他字母的字元)和草寫,一次一個字元或字形。
  • IWR - 智能文字識別,針對草寫文字。

常見問題

如何在Azure上的C#應用程式中整合OCR能力?

您可以通過建立新的控制台應用程式並通過NuGet安裝IronOCR,在Azure上的C#應用程式中整合OCR能力。使用命令Install-Package IronOcr或在NuGet套件管理員中搜尋IronOCR。

使用IronOCR比Azure的原生OCR服務有什麼優勢?

IronOCR相比Azure的原生OCR服務提供了多重優勢,包括提高的準確性、更快的處理速度以及無需SaaS即可本地運行。它還支持廣泛的語言範圍,並提供圖像過濾器以增強OCR性能。

如何設立Microsoft Azure Function以進行OCR文字提取?

要設立Microsoft Azure Function進行OCR文字提取,您可以使用IronOCR建立一個功能來從圖像中提取文字。這是微服務架構的一部分,使您可以無縫整合OCR能力到您的Azure應用程式中。

IronOCR可以處理多語言的OCR處理嗎?

是的,IronOCR支持125種國際語言,每種語言都有快速、標準和最佳質量,使其適用於全球應用。

IronOCR提供了哪些圖像處理選項來提高OCR準確性?

IronOCR提供了多種圖像處理選項,例如旋轉、二值化、灰度轉換、對比度、降噪、反轉、膨脹、侵蝕、校正傾斜、深度清除背景噪音以及增強解析度,以提高OCR結果的準確性和可靠性。

IronOCR是否與不同的.NET框架相容以便在Azure上部署?

是的,IronOCR與.NET Framework 4.5及更高版本、.NET Standard 2、.NET Core 2、.NET Core 3和.NET Core 5相容。它還支持Xamarin、Mono,並且可以在Microsoft Azure上使用Docker進行部署。

在Azure上運行IronOCR是否需要任何其他軟體?

在Azure上運行IronOCR無需任何額外的軟體。它獨立運行,提供比Tesseract更高的準確性和速度,且無需安裝Tesseract。

IronOCR有哪些授權選項?

IronOCR提供三個基於一次性購買的付費授權層級的終身授權模式。這些授權對於開發目的免費,提供了項目擴展的靈活性。

如何使用IronOCR將圖像和PDF轉換為可搜索的文件?

IronOCR允許您通過其OCR能力將圖像和PDF轉換為可搜索的文件,提取和識別文字,使其易於搜索和索引。

使用IronOCR讀取條形碼和QR碼的過程是什麼?

IronOCR可以通過使用其內建功能掃描和提取這些碼中的資料來讀取條形碼和QR碼,促進它們與Azure上的C#應用程式的整合。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 6,151,372 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖像轉變為可搜尋文字。