如何在 .NET MAUI 中对 Android 执行 OCR
.NET MAUI (多平台应用程序用户界面) .NET MAUI 是 Xamarin.Forms 框架的进化版,旨在使用 .NET 为 Android、iOS、macOS 和 Windows 创建跨平台应用程序。.NET MAUI 旨在简化构建可在多个平台上运行的本地用户界面的过程。
IronOcr.Android软件包**为Android带来了OCR支持!!
如何在 .NET MAUI 中的安卓系统上使用 IronOCR
IronOCR 安卓软件包
IronOcr.Android软件包**可通过.NET跨平台项目在Android设备上实现OCR功能。无需使用 IronOCR 软件包。
PM > Install-Package IronOcr.Android
安装使用 NuGet
安装软件包 IronOcr.Android
创建一个 .NET MAUI 项目
打开 Visual Studio,点击 "创建新项目"。搜索 MAUI,选择 .NET MAUI App,然后点击 "下一步"。
加入 IronOCR.Android 库
可以通过多种方式添加该库。最简单的可能是使用 NuGet。
1.在 Visual Studio 中,右键单击 "依赖项",然后选择 "管理 NuGet 包..."。
2.选择 "浏览 "选项卡并搜索 "IronOcr.Android"。
3.选择 "IronOcr.Android "软件包并点击 "安装"。
为防止其他平台出现问题,请修改 csproj 文件,使其仅在针对 Android 平台时包含软件包。为此,请
1.右键单击项目,选择 "编辑项目文件"。
2.创建一个新的 ItemGroup 元素:
<ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
</ItemGroup>
3.将 "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 在类中被初始化一次,如下面的代码所示。在方法中初始化 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 应用程序项目
您可以下载本指南的完整代码。它是一个压缩文件,您可以在 Visual Studio 中将其作为 .NET MAUI App 项目打开。
在 Avalonia 中使用 IronOcr.Android
与 MAUI 类似,IronOcr.Android 也可以在 Avalonia 项目中使用,设置与上述相同。
如果您想在 iOS 上执行 OCR,请浏览以下文章了解更多信息:"如何用 .NET MAUI 在 iOS 上执行 OCR"