.NET MAUI OCR Using IronOCR

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

簡介

微軟發佈了 .NET MAUI(多平台應用程式 UI),這是一個使用 .NET Framework 構建跨平台應用程式的框架。 它允許您撰寫在 Android、iOS 和 Windows 上執行的代碼,使用相同的代碼庫,節省您的時間、資源和精力。 .NET MAUI 是開源的。 您可以在GitHub上獲取 .NET MAUI 專案的源代碼及示例。

在這個操作指南中,我們將學習如何使用 IronOCR 庫在 .NET MAUI 上創建一個 OCR 處理器應用程式,並附帶示例。

class="hsg-featured-snippet">

如何在 .NET MAUI 中進行 OCR

  1. 下載 C# 庫以在 .NET MAUI 中執行 OCR
  2. 配置 MAUI 專案的前端
  3. 使用FilePicker 類傳遞圖片的完整路徑
  4. 調用 Read 方法對圖片進行 OCR
  5. 通過訪問 Text 屬性來獲取提取的文字並顯示它

IronOCR: .NET OCR 庫

IronOCR 是一個 .NET OCR NuGet 庫,允許開發者輕鬆地將光學字元辨識(OCR)功能集成到他們的專案中。 使用 IronOCR,PDF 文件可以被掃描並轉換為可搜尋和可編輯的文字/數據,且不會有任何數據質量的損失。 這使得用戶可以輕鬆地從 PDF 文件中找到所需的信息,並在必要時進行更改或校正。

IronOCR 是任何平台上最先進的 Tesseract 二進制構建。 它提供了更快的速度、準確性及一個原生 DLL/API 支援所有版本的 Tesseract(從 Tesseract 3 到 Tesseract 5)只需一次簡易安裝/下載。

IronOCR 的語言支持廣泛,提供給用戶 125 種國際語言。 默認狀態下,工具/DLL 中安裝了英語語言。 不過,您可以通過 NuGet 安裝或下載 DLL 來輕鬆添加更多語言。

與 Tesseract 的對比

IronOCR 是專為 C# 開發者設計的,與 .NET 應用程式無縫集成。 而 Tesseract 是一個通用的 OCR 庫,需要開發者撰寫自定義包裹類才能在 C# 中使用。 另外,IronOCR 比其他庫提供了更高的準確性和速度,這要歸功於其創新性的人工智慧演算法。

IronOCR 附帶了詳盡的文檔和技術支持,即使是新手開發者也能輕易上手。

IronOCR 的準確性遠高於 Tesseract。 事實上,它的準確率超過 99%,而 Tesseract 的準確率僅在 70.2% 到 92.9% 之間。 有關 IronOCR 和 Tesseract 比較的更多信息和支持,請在這個YouTube 影片中觀看。

創建 OCR MAUI 應用程式的步驟

按照以下步驟,使用 IronOCR 在 .NET MAUI 框架中創建一個 OCR 應用程式。

先決條件

在 .NET MAUI 中創建 OCR 應用程式的前置條件如下:

  1. Visual Studio 2022(最新版本)
  2. .NET 6 或 7
  3. Visual Studio 中安裝的 MAUI 包
  4. 在 Visual Studio 中運行的 .NET MAUI 專案

安裝IronOCR

第一步是使用 NuGet Package Manager Console 安裝 IronOCR 庫。 通過右鍵點擊解決方案管理器,打開 NuGet Package Manager Console,並執行以下指令來安裝 IronOCR 庫:

Install-Package IronOcr

前端設計

我們將在本節設計應用程式的前端。 打開MainPage.xaml文件。

class="content-img-align-center"> .NET MAUI OCR 教程使用 IronOCR - 圖 1: MainPage.xaml

MainPage.xaml

我們指定了一個按鈕,將幫助我們選擇用於 OCR 的圖片或 PDF 文件。 按鈕的Clicked屬性被設置為執行我們在下一節定義的IOCR函數。

<Button
    x:Name="OCR"
    Text="Click to OCR"
    Clicked="IOCR"
    HorizontalOptions="Center" />
<Button
    x:Name="OCR"
    Text="Click to OCR"
    Clicked="IOCR"
    HorizontalOptions="Center" />
XML

在這裡,我們創建了一個名為OCRImageImage元素。 此圖像框將顯示所選的文件。

<Image
    x:Name="OCRImage"
    SemanticProperties.Description="Selected Image"
    HeightRequest="300"
    HorizontalOptions="Center" />
<Image
    x:Name="OCRImage"
    SemanticProperties.Description="Selected Image"
    HeightRequest="300"
    HorizontalOptions="Center" />
XML

接下來,我們創建一個Editor控件。 它將用於顯示從圖像或 PDF 文件中提取的文本。

<Editor
    x:Name="outputText"
    HorizontalOptions="Center"
    WidthRequest="600"
    HeightRequest="300" />
<Editor
    x:Name="outputText"
    HorizontalOptions="Center"
    WidthRequest="600"
    HeightRequest="300" />
XML

這裡是完整的 XAML 使用者界面標記。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="IronOCR_MAUI_Test.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">
            <Button
                x:Name="OCR"
                Text="Click to OCR"
                Clicked="IOCR"
                HorizontalOptions="Center" />
            <Image
                x:Name="OCRImage"
                SemanticProperties.Description="Selected Image"
                HeightRequest="300"
                HorizontalOptions="Center" />

            <Editor
                x:Name="outputText"
                HorizontalOptions="Center"
                WidthRequest="600"
                HeightRequest="300" />
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="IronOCR_MAUI_Test.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">
            <Button
                x:Name="OCR"
                Text="Click to OCR"
                Clicked="IOCR"
                HorizontalOptions="Center" />
            <Image
                x:Name="OCRImage"
                SemanticProperties.Description="Selected Image"
                HeightRequest="300"
                HorizontalOptions="Center" />

            <Editor
                x:Name="outputText"
                HorizontalOptions="Center"
                WidthRequest="600"
                HeightRequest="300" />
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>
XML

現在,是時候編寫 OCR 功能的代碼了。

使用 IronOCR 的 OCR 代碼

打開MainPage.xaml.cs類文件並撰寫以下函數:

class="content-img-align-center"> .NET MAUI OCR 教程使用 IronOCR - 圖 2: MainPage.xaml.cs

MainPage.xaml.cs

private async void IOCR(object sender, EventArgs e)
{
    // Prompt user to select an image using FilePicker
    var images = await FilePicker.Default.PickAsync(new PickOptions
    {
        PickerTitle = "Pick image",
        FileTypes = FilePickerFileType.Images
    });

    // Get the full path of the selected image
    var path = images.FullPath.ToString();

    // Display the selected image in the Image control
    OCRImage.Source = path;

    // Create an IronTesseract object to perform OCR
    var ocr = new IronTesseract();

    // Perform OCR and extract text from the selected image
    using (var input = new OcrInput())
    {
        input.AddImage(path); // Add image to the OCR input
        OcrResult result = ocr.Read(input); // Perform OCR
        string text = result.Text; // Extract text

        // Display extracted text in the Editor control
        outputText.Text = text; 
    }
}
private async void IOCR(object sender, EventArgs e)
{
    // Prompt user to select an image using FilePicker
    var images = await FilePicker.Default.PickAsync(new PickOptions
    {
        PickerTitle = "Pick image",
        FileTypes = FilePickerFileType.Images
    });

    // Get the full path of the selected image
    var path = images.FullPath.ToString();

    // Display the selected image in the Image control
    OCRImage.Source = path;

    // Create an IronTesseract object to perform OCR
    var ocr = new IronTesseract();

    // Perform OCR and extract text from the selected image
    using (var input = new OcrInput())
    {
        input.AddImage(path); // Add image to the OCR input
        OcrResult result = ocr.Read(input); // Perform OCR
        string text = result.Text; // Extract text

        // Display extracted text in the Editor control
        outputText.Text = text; 
    }
}
Private Async Sub IOCR(ByVal sender As Object, ByVal e As EventArgs)
	' Prompt user to select an image using FilePicker
	Dim images = Await FilePicker.Default.PickAsync(New PickOptions With {
		.PickerTitle = "Pick image",
		.FileTypes = FilePickerFileType.Images
	})

	' Get the full path of the selected image
	Dim path = images.FullPath.ToString()

	' Display the selected image in the Image control
	OCRImage.Source = path

	' Create an IronTesseract object to perform OCR
	Dim ocr = New IronTesseract()

	' Perform OCR and extract text from the selected image
	Using input = New OcrInput()
		input.AddImage(path) ' Add image to the OCR input
		Dim result As OcrResult = ocr.Read(input) ' Perform OCR
		Dim text As String = result.Text ' Extract text

		' Display extracted text in the Editor control
		outputText.Text = text
	End Using
End Sub
$vbLabelText   $csharpLabel

讓我們剖析上述代碼:

  • 代碼使用FilePicker讓用戶選擇來自設備的圖像文件。文件選擇器被配置為僅允許圖像。
var images = await FilePicker.Default.PickAsync(new PickOptions
{
    PickerTitle = "Pick image",
    FileTypes = FilePickerFileType.Images
});
var path = images.FullPath.ToString();
var images = await FilePicker.Default.PickAsync(new PickOptions
{
    PickerTitle = "Pick image",
    FileTypes = FilePickerFileType.Images
});
var path = images.FullPath.ToString();
Dim images = Await FilePicker.Default.PickAsync(New PickOptions With {
	.PickerTitle = "Pick image",
	.FileTypes = FilePickerFileType.Images
})
Dim path = images.FullPath.ToString()
$vbLabelText   $csharpLabel
  • Image控制項設置為使用其文件路徑顯示所選圖像。
OCRImage.Source = path;
OCRImage.Source = path;
OCRImage.Source = path
$vbLabelText   $csharpLabel
  • 創建了一個IronTesseract對象來執行 OCR。 所選圖像被添加到一個OcrInput對象中。 調用Read方法來從圖像中提取文本,提取的文字將顯示在Editor控件中。
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    input.AddImage(path);
    OcrResult result = ocr.Read(input);
    string text = result.Text;
    outputText.Text = text; 
}
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    input.AddImage(path);
    OcrResult result = ocr.Read(input);
    string text = result.Text;
    outputText.Text = text; 
}
Dim ocr = New IronTesseract()
Using input = New OcrInput()
	input.AddImage(path)
	Dim result As OcrResult = ocr.Read(input)
	Dim text As String = result.Text
	outputText.Text = text
End Using
$vbLabelText   $csharpLabel

輸出

運行項目後,下圖所示的使用者界面將顯示。當您點擊按鈕時,會提示您從任意位置選擇圖像/PDF。

class="content-img-align-center"> .NET MAUI OCR 教程使用 IronOCR - 圖 3: OCR 輸出

OCR 輸出

在選擇圖像後,IronOCR 處理該圖像並在 Editor 控件中顯示識別出的字詞。 您可以從 Editor 控件中複製文字。

class="content-img-align-center"> .NET MAUI OCR 教程使用 IronOCR - 圖 4: OCR 圖像

OCR 圖像

從結果來看,IronOCR 在處理帶有圖案的複雜圖像時表現出色,呈現出精確的結果。 IronOCR 能夠使用其預訓練模型檢測到細微的細節並選擇出所需的準確字母。

<{i:(在啟用調試的發佈模式下運行項目可能會導致問題。 在這種情況下,您可以按照下面鏈接中所示,將項目發佈為一個未打包的 .NET MAUI 應用程式,以確保應用程式正常工作。)}>

結論

For further reading, refer to this tutorial which provides additional information about how to use IronOCR to read text from images.

IronOCR 可免費用於開發用途。 您可以以非常低的價格購買它,起價僅從$799開始。 在這裡查看定價計劃。

常見問題解答

.NET MAUI 在應用程式開發中用於什麼用途?

.NET MAUI(多平台應用程式使用者介面)用於使用單一程式碼庫建立跨平台應用程序,使開發人員能夠面向 Android、iOS 和 Windows 平台。

開發者如何在.NET MAUI應用程式中執行OCR?

開發者可以透過整合 IronOCR(一個 .NET OCR 函式庫)在 .NET MAUI 應用程式中執行 OCR 功能。 IronOCR 可以將圖像和 PDF 文件轉換為可搜尋和可編輯的文字。

在 .NET MAUI 專案中設定 IronOCR 的步驟是什麼?

若要在 .NET MAUI 專案中設定 IronOCR,請透過 NuGet 安裝 IronOCR 函式庫,在 Visual Studio 中設定前端,並實作必要的 C# 程式碼以使用 IronTesseract 物件執行 OCR。

IronOCR在處理文字時準確率如何?

IronOCR 在處理文字時準確率高達 99% 以上,憑藉其先進的 AI 演算法,比其他 OCR 解決方案(如 Tesseract)更可靠。

IronOCR 可以處理多種語言嗎?

是的,IronOCR 支援 125 種國際語言,預設安裝英語。您可以透過 NuGet 或下載特定語言的 DLL 檔案來新增其他語言。

如何在.NET MAUI應用程式中選擇用於OCR的圖像檔案?

在 .NET MAUI 應用程式中,您可以使用FilePicker類別選擇要進行 OCR 的映像文件,該類別允許使用者從裝置中選擇映像以提取文字。

編輯器控制在顯示 OCR 結果中扮演什麼角色?

.NET MAUI 應用程式中的 Editor 控制項用於顯示從 IronOCR 處理的圖像中提取的文本,為使用者提供查看 OCR 結果的介面。

使用 IronOCR 進行開發是否會產生費用?

IronOCR 可免費用於開髮用途。但用於生產環境則需購買許可證,許可證價格極具競爭力。

為什麼 IronOCR 是 C# 開發人員的首選?

IronOCR 是 C# 開發人員的首選,因為它與 .NET 應用程式無縫集成,具有高精度、高速度和多語言支援等優點,使其優於許多其他 OCR 庫。

開發者如何增強其 .NET MAUI OCR 應用的功能?

開發人員可以透過探索 IronOCR 提供的其他資源來增強其 .NET MAUI OCR 應用程序,利用其全面的文件和支援來實現高級功能。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'name'

Filename: sections/author_component.php

Line Number: 70

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 70
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/get-started/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Getstarted.php
Line: 25
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

">

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'title'

Filename: sections/author_component.php

Line Number: 84

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 84
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/get-started/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Getstarted.php
Line: 25
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'comment'

Filename: sections/author_component.php

Line Number: 85

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 85
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/get-started/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Getstarted.php
Line: 25
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once