如何在 .NET MAUI 中對 iOS 裝置執行 OCR

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

.NET MAUI(多平台應用程式 UI)是 Xamarin.Forms 框架的演進版本,旨在利用 .NET 建立適用於 Android、iOS、macOS 和 Windows 的跨平台應用程式。 MAUI 旨在簡化建立可在多個平台上運行的原生使用者介面的過程。

IronOcr.iOS 軟體包為 iOS 帶來了 OCR 支援!

IronOCR iOS 套件

IronOcr.iOS 套件透過 .NET 跨平台專案在 iOS 裝置上啟用 OCR 功能。 不需要原版 IronOCR 軟體包。

安裝 IronOcr.iOS 包

<! -- NuGet 函式庫下載指令標籤 ::開始 -->

用於 PDF 的 C# NuGet 庫
### 使用 NuGet 安裝
安裝 IronOcr.iOS 包
(按鈕)

建立一個 .NET MAUI 項目

在"多平台"部分,選擇".NET MAUI 應用程式"並繼續。

建立 .NET MAUI 應用程式項目

包含 IronOCR.iOS 庫

可以透過多種方式新增庫。 最簡單的方法或許是使用 NuGet。

  1. 在 Visual Studio 中,以滑鼠右鍵按一下"依賴項 > NuGet",然後選擇"管理 NuGet 套件..."。
  2. 選擇"瀏覽"選項卡,搜尋"IronOcr.iOS"。
  3. 選擇"IronOcr.iOS"軟體包,然後點選"新增軟體包"。

下載 IronOcr.iOS 包

為防止與其他平台出現問題,請修改csproj文件,使其僅在面向 iOS 平台時包含該軟體套件。 為了做到這一點:

  1. 右鍵點選專案的 *.csproj 文件,然後選擇"編輯專案文件"。
  2. 建立一個新的ItemGroup元素,如下圖所示:

    <ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
        <PackageReference Include="IronOcr.iOS" Version="YOUR_PACKAGE_VERSION" />
    </ItemGroup>
    <ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
        <PackageReference Include="IronOcr.iOS" Version="YOUR_PACKAGE_VERSION" />
    </ItemGroup>
    XML
  3. 將"IronOcr.iOS" PackageReference 移到我們剛剛建立的ItemGroup中。

上述步驟將阻止"IronOcr.iOS"軟體套件在例如Android平台上使用(為此,請改用IronOcr.Android )。

編輯"MainPage.xaml"

編輯 XAML 文件,使其顯示一個按鈕和一個標籤,用於顯示 OCR 結果。 舉例來說

<?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="MAUIIronOCRiOSSample.MainPage">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button
            Text="Import File"
            Clicked="ReadFileOnImport"
            Grid.Row="0"
            HorizontalOptions="Center"
            Margin="20, 20, 20, 10"/>

        <ScrollView
            Grid.Row="1"
            BackgroundColor="LightGray"
            Padding="10"
            Margin="10, 10, 10, 30">
            <Label x:Name="OutputText"/>
        </ScrollView>
    </Grid>

</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="MAUIIronOCRiOSSample.MainPage">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button
            Text="Import File"
            Clicked="ReadFileOnImport"
            Grid.Row="0"
            HorizontalOptions="Center"
            Margin="20, 20, 20, 10"/>

        <ScrollView
            Grid.Row="1"
            BackgroundColor="LightGray"
            Padding="10"
            Margin="10, 10, 10, 30">
            <Label x:Name="OutputText"/>
        </ScrollView>
    </Grid>

</ContentPage>
XML

編輯"MainPage.xaml.cs"

首先實例化IronTesseract物件。 請確保在類別中初始化IronTesseract一次,如下面的程式碼所示。 直接在方法中實例化它效率不高,可能會導致意想不到的錯誤。 然後,使用FilePicker.PickAsync方法選擇一個檔案。從FileResult中開啟一個流進行讀取。 建立一個新的OcrInput對象,並使用該物件載入圖像。 使用 Tesseract 實例對圖像執行 OCR 並傳回文字。 最後,將結果文字顯示在標籤中。

目前該功能僅限於圖像檔案。 該軟體包目前尚不支援PDF文件。 有鑑於此,任何與 PDF 文件相關的配置都應保持停用狀態。

using System;
using IronOcr;
using Microsoft.Maui.Controls;

namespace MAUIIronOCRiOSSample;

public partial class MainPage : ContentPage
{
    // Initialize IronTesseract once in a class
    private IronTesseract ocrTesseract = new IronTesseract();

    public MainPage()
    {
        InitializeComponent();
        // Apply license key
        IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
    }

    private async void ReadFileOnImport(object sender, EventArgs e)
    {
        try
        {
            var options = new PickOptions
            {
                PickerTitle = "Please select a file"
            };

            var result = await FilePicker.PickAsync(options);
            if (result != null)
            {
                using var stream = await result.OpenReadAsync();

                // Instantiate OcrInput
                using var ocrInput = new OcrInput();

                // Load image stream
                ocrInput.LoadImage(stream);

                // Perform OCR
                var ocrResult = ocrTesseract.Read(ocrInput);
                OutputText.Text = ocrResult.Text;
            }
        }
        catch (Exception ex)
        {
            // Handle exceptions
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }
}
using System;
using IronOcr;
using Microsoft.Maui.Controls;

namespace MAUIIronOCRiOSSample;

public partial class MainPage : ContentPage
{
    // Initialize IronTesseract once in a class
    private IronTesseract ocrTesseract = new IronTesseract();

    public MainPage()
    {
        InitializeComponent();
        // Apply license key
        IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
    }

    private async void ReadFileOnImport(object sender, EventArgs e)
    {
        try
        {
            var options = new PickOptions
            {
                PickerTitle = "Please select a file"
            };

            var result = await FilePicker.PickAsync(options);
            if (result != null)
            {
                using var stream = await result.OpenReadAsync();

                // Instantiate OcrInput
                using var ocrInput = new OcrInput();

                // Load image stream
                ocrInput.LoadImage(stream);

                // Perform OCR
                var ocrResult = ocrTesseract.Read(ocrInput);
                OutputText.Text = ocrResult.Text;
            }
        }
        catch (Exception ex)
        {
            // Handle exceptions
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }
}
Imports System
Imports IronOcr
Imports Microsoft.Maui.Controls

Namespace MAUIIronOCRiOSSample

	Partial Public Class MainPage
		Inherits ContentPage

		' Initialize IronTesseract once in a class
		Private ocrTesseract As New IronTesseract()

		Public Sub New()
			InitializeComponent()
			' Apply license key
			IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
		End Sub

		Private Async Sub ReadFileOnImport(ByVal sender As Object, ByVal e As EventArgs)
			Try
				Dim options = New PickOptions With {.PickerTitle = "Please select a file"}

				Dim result = Await FilePicker.PickAsync(options)
				If result IsNot Nothing Then
					Dim stream = Await result.OpenReadAsync()

					' Instantiate OcrInput
					Dim ocrInput As New OcrInput()

					' Load image stream
					ocrInput.LoadImage(stream)

					' Perform OCR
					Dim ocrResult = ocrTesseract.Read(ocrInput)
					OutputText.Text = ocrResult.Text
				End If
			Catch ex As Exception
				' Handle exceptions
				System.Diagnostics.Debug.WriteLine(ex)
			End Try
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

最後,將建置目標切換到 iOS 模擬器並運行專案。

運行專案

這將向您展示如何運行專案並執行 OCR。

Execute .NET MAUI App project

下載 .NET MAUI 應用程式項目

您可以下載本指南的完整程式碼。它以壓縮檔案的形式提供,您可以在 Visual Studio 中將其作為 .NET MAUI 應用程式專案開啟。

點擊此處下載項目。

在 Avalonia 中使用 IronOcr.iOS

在 Avalonia 中設定 IronOcr.iOS 與 MAUI 類似,但有一個關鍵區別:除了最新的 .NET SDK 版本之外,還需要安裝.NET SDK 8.0.101才能成功運行 IronOcr.iOS。 之後,IronOcr.iOS 可以在 Avalonia 專案中使用,設定方式與上述相同。

如果您想在 Android 上執行 OCR,請參閱以下文章以了解更多資訊:"如何在 .NET MAUI 中對 Android 執行 OCR "

常見問題解答

如何將 OCR 功能整合到 .NET MAUI 的 iOS 應用程式中?

您可以使用 IronOCR.iOS 套件將 OCR 功能整合到 .NET MAUI 的 iOS 應用程式中。通過 Visual Studio 使用 NuGet 安裝,然後修改您的項目檔以有條件地為 iOS 平台包含該套件。使用 IronTesseract 處理圖像並提取文字。

我可以使用 IronOCR.iOS 套件處理 PDF 文件嗎?

不,IronOCR.iOS 套件目前僅限於處理圖像文件,且不支援 PDF 文件。請確保在您的專案中禁用任何與 PDF 相關的配置。

設置 .NET MAUI iOS 應用程序的 OCR 包含哪些步驟?

設置 .NET MAUI iOS 應用程序的 OCR 涉及通過 NuGet 下載 IronOcr.iOS 套件,修改您的項目文件以有條件地為 iOS 包含該套件,以及編輯您的 MainPage.xaml 和 MainPage.xaml.cs 文件以創建用戶界面和處理 OCR。

在 Avalonia 專案中使用 IronOCR 需要哪些額外要求?

在 Avalonia 專案中使用 IronOCR 時,您需要確保您擁有最新的 .NET SDK 版本和 .NET SDK 8.0.101。此設置類似於 MAUI,但需要這額外的 SDK。

如何在 .NET MAUI 專案中使用 IronOCR 執行圖像的 OCR?

在 .NET MAUI 專案中,使用 IronTesseract 對圖像執行 OCR。使用 FilePicker.PickAsync 選擇圖像文件,將其載入 OcrInput 對象,然後使用 IronTesseract 讀取圖像並提取文字。

是否有使用 .NET MAUI 在 iOS 上實現 OCR 的範例專案?

是的,您可以從 Iron Software 網站下載使用 IronOCR.iOS 的 .NET MAUI 範例專案。該範例專案可作為壓縮文件下載,您可在 Visual Studio 中打開以加快開發進程。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

準備好開始了嗎?
Nuget 下載 5,384,824 | 版本: 2026.2 剛剛發布