如何在 .NET MAUI 中在 iOS 上執行 OCR
.NET MAUI (跨平台應用程式使用者介面) 是對Xamarin.Forms框架的演進,旨在使用.NET為Android、iOS、macOS和Windows創建跨平台應用程式。MAUI的目標是簡化構建能夠在多個平台上運行的原生用戶界面的過程。
IronOcr.iOS套件為iOS帶來了OCR支持!!
在 .NET MAUI 上如何在 iOS 上使用 IronOCR
IronOCR iOS 套件
IronOcr.iOS 套件 透過 .NET 跨平台專案在 iOS 裝置上啟用OCR功能。 不需要使用原生的IronOCR套件。
PM > Install-Package IronOcr.iOS
安裝與 NuGet
Install-Package IronOcr.iOS
建立 .NET MAUI 專案
在多平台部分,選擇 .NET MAUI App 並繼續。
包含 IronOCR.iOS 函式庫
此函式庫可以用多種方式新增。最簡單的方法可能是使用 NuGet。
在 Visual Studio 內,右鍵點擊 "Dependencies > Nuget" 並選擇 "Manage NuGet Packages ..."
選擇 "Browse" 標籤並搜索 "IronOcr.iOS"
- 選擇 "IronOcr.iOS" 包並點擊 "Add Package"
為了防止與其他平台出現問題,請修改 csproj 檔案以僅在目標為 iOS 平台時包含該套件。要這樣做:
右鍵點擊項目的 *.csproj 檔案,並選擇“編輯項目檔”。
- 創建一個新的 ItemGroup 元素,如下所示:
<ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
</ItemGroup>
- 將 "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>
編輯 "MainPage.xaml.cs"
請先實例化 IronTesseract
對象。確保在類別中初始化 IronTesseract
一次,如以下代碼所示。在方法中直接實例化是不有效的,並且可能導致意外的錯誤。然後,使用 FilePicker.PickAsync
方法選擇文件。從 FileResult 中,打開一個讀取流。創建一個新的 OcrInput
對象,並使用此對象加載圖像。使用 tesseract
實例對圖像進行 OCR,並返回文本。最後,在標籤中顯示結果文本。
當前的實現僅限於圖像文件。該包尚不支持 PDF 文件。有鑑於此,任何與 PDF 文件相關的配置已被默認停用,並應保持停用狀態。
using IronOcr;
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 IronOcr;
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 IronOcr
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
最後,將建置目標切換到 iOS 模擬器並運行該專案。
運行專案
這將向您展示如何運行專案並執行OCR。
下載 .NET MAUI App 專案
您可以下載本指南的完整代碼。它是一個壓縮文件,可以在 Visual Studio 中作為 .NET MAUI App 專案打開。
在 Avalonia 中使用 IronOcr.iOS
在 Avalonia 中設置 IronOcr.iOS 與 MAUI 類似,但有一個關鍵區別:除了最新的 .NET SDK 版本外,您還需要 .NET SDK 8.0.101 安裝以成功執行 IronOCR.iOS。之後,可以在 Avalonia 專案中使用 IronOCR.iOS,其設置方法如上所述。
如果您想在 Android 上執行 OCR,請導航到以下文章以了解更多資訊:如何在 .NET MAUI 中在 Android 上執行 OCR請提供您想要翻譯的內容。