如何用 .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
安装软件包 IronOcr.iOS
创建一个 .NET MAUI 项目
在多平台部分中,选择 .NET MAUI App 并继续。
包括IronOCR.iOS库
可以通过多种方式添加库。 或许使用 NuGet 是最简单的方式。
在 Visual Studio 中,右键单击“依赖项 > NuGet”,然后选择“管理 NuGet 包...”。
选择“浏览”标签并搜索“IronOcr.iOS”。
选择“IronOcr.iOS”包,然后点击“添加包”。
为了防止与其他平台发生问题,在针对 iOS 平台进行目标设置时,修改 csproj 文件以仅包含该包。 为了做到这一点:
右键单击项目的 *.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 应用程序项目
您可以下载本指南的完整代码。它以压缩文件的形式提供,您可以将其作为.NET MAUI App项目在Visual Studio中打开。
使用 IronOcr.iOS 在 Avalonia
设置IronOcr.iOS在Avalonia中的方法与MAUI相似,但有一个关键的区别:除了需要最新的.NET SDK版本外,您还需要.net SDK 8.0.101安装后即可成功运行 IronOcr.iOS。 之后,IronOcr.iOS 可以在 Avalonia 项目中使用,设置方法与上述相同。
如果您想在Android上执行OCR,请导航到以下文章了解更多信息:"如何在 .NET MAUI 中对 Android 执行 OCR"