如何在 .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 功能。 不需要vanilla IronOCR包。
PM > Install-Package IronOcr.iOS
安裝與 NuGet
Install-Package IronOcr.iOS
建立一個 .NET MAUI 專案
在多平台部分中,選擇 .NET MAUI 應用程式,然後繼續。
包含 IronOCR.iOS 函式庫
此程式庫可以通過多種方式添加。 或許使用 NuGet 是最簡單的方法。
在 Visual Studio 中,右鍵單擊“依賴項 > NuGet”,然後選擇“管理 NuGet 套件...”。
選擇「瀏覽」標籤並搜索「IronOcr.iOS」。
選擇“IronOcr.iOS”套件並點擊“添加套件”。
若要避免在其他平台上出現問題,請修改 csproj 檔案以僅在針對 iOS 平台時包含該套件。 為了做到這點:
在您的專案中右鍵點擊 *.csproj 檔案並選擇「編輯專案檔案」。
- 建立一個新的 ItemGroup 元素,如下:
<ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
</ItemGroup>
將“IronOcr.iOS” PackageReference 移至我們剛剛建立的 ItemGroup 內。
上述步驟將防止在例如 Android 平台上使用“IronOcr.iOS”套件。(為此,安裝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 應用程式專案
您可以下載本指南的完整代碼。它以壓縮檔的形式提供,您可以在Visual Studio中作為.NET MAUI應用程序項目打開。
使用 IronOcr.iOS 在 Avalonia
在 Avalonia 中設置 IronOcr.iOS 與 MAUI 相似,但有一個關鍵的不同:除了最新的 .NET SDK 版本,您還需要.NET SDK 8.0.101安裝後即可成功運行 IronOcr.iOS。 之後,IronOcr.iOS 可以在 Avalonia 項目中使用,設置方式與上述相同。
如果您想在 Android 上執行 OCR,請前往以下文章了解更多信息:「如何在 .NET MAUI 中在 Android 上執行 OCR請提供您想要翻譯的內容。