如何在 .NET MAUI 中在 Android 上執行 OCR
.NET MAUI (跨平台應用程式使用者介面) 是一個Xamarin.Forms框架的進化版,旨在使用.NET創建適用於Android、iOS、macOS和Windows的跨平台應用程式。 .NET MAUI旨在簡化構建可在多個平台上運行的本地用戶界面的過程。
IronOCR.Android package為Android帶來了OCR支持。!!
如何在 .NET MAUI 的 Android 上使用 IronOCR
IronOCR Android 套件
IronOcr.Android 套件 透過 .NET 跨平台專案在 Android 設備上實現OCR功能。不需要使用原生的 IronOCR 套件。
PM > Install-Package IronOcr.Android
安裝與 NuGet
Install-Package IronOCR.Android
建立 .NET MAUI 專案
打開 Visual Studio,點擊「建立新專案」。搜尋 MAUI,選擇 .NET MAUI 應用程式並點擊「下一步」。
包含 IronOCR.Android 库
該庫可以通過多種方式添加。最簡單的方法是使用 NuGet。
- 在 Visual Studio 中,右鍵單擊“Dependencies”,並選擇“Manage NuGet Packages ...”。
- 選擇“Browse”選項卡並搜索“IronOcr.Android”。
- 選擇“IronOcr.Android”包並點擊“Install”。
為了防止與其他平台發生問題,請修改 csproj 檔案,使其只在目標為 Android 平台時才包含該套件。請按如下步驟進行:
右鍵點擊專案並選擇「編輯專案檔案」。
- 新建一個 ItemGroup 元素,如下所示:
<ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
</ItemGroup>
- 將 "IronOcr.Android" 的 PackageReference 移動到我們剛剛創建的 ItemGroup 內。
上述步驟將防止 "IronOcr.Android" 套件在例如 iOS 平台上使用。 (為此,安裝 IronOcr.iOS 代替).
編輯 "MainActivity.cs"
- 通過導航至 Platforms -> Android 打開 "MainActivity.cs" 文件。
- 添加
MainActivity
方法並調用Initialize
方法。
namespace MAUIIronOCRAndroidSample
{
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize
ConfigChanges.Orientation
ConfigChanges.UiMode
ConfigChanges.ScreenLayout
ConfigChanges.SmallestScreenSize
ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
public MainActivity()
{
IronTesseract.Initialize(this);
}
}
}
namespace MAUIIronOCRAndroidSample
{
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize
ConfigChanges.Orientation
ConfigChanges.UiMode
ConfigChanges.ScreenLayout
ConfigChanges.SmallestScreenSize
ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
public MainActivity()
{
IronTesseract.Initialize(this);
}
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
修改 "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="MAUIIronOCRAndroidSample.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 MAUIIronOCRAndroidSample;
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 MAUIIronOCRAndroidSample;
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 MAUIIronOCRAndroidSample
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
最後,在 .csproj 文件中,確保您僅為 Android 構建專案。因為我們添加的包僅適用於 Android,為所有平台構建專案將會失敗。
運行專案
這將向您展示如何運行專案並執行OCR。
下載 .NET MAUI App 專案
您可以下載本指南的完整代碼。它是一個壓縮文件,可以在 Visual Studio 中作為 .NET MAUI App 專案打開。
在 Avalonia 中使用 IronOcr.Android
與 MAUI 相似,可以在 Avalonia 專案中使用 IronOcr.Android,設置方式如上所述。
如果您想在 iOS 上執行 OCR,請瀏覽以下文章以了解更多資訊:"如何在 .NET MAUI 中在 iOS 上執行 OCR請提供您想要翻譯的內容。