如何用 .NET MAUI 在 iOS 上执行 OCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

查克尼特·宾

.NET MAUI (多平台应用程序用户界面) MAUI 是 Xamarin.Forms 框架的进化版,旨在使用 .NET 为 Android、iOS、macOS 和 Windows 创建跨平台应用程序。MAUI 旨在简化构建可在多个平台上运行的本地用户界面的过程。

IronOcr.iOS软件包**为iOS带来OCR支持!!

IronOCR iOS 软件包

IronOcr.iOS 软件包可通过 .NET 跨平台项目在 iOS 设备上实现 OCR 功能。无需使用 IronOCR 软件包。

PM > Install-Package IronOcr.iOS
适用于PDF的C# NuGet库

安装使用 NuGet

安装软件包 IronOcr.iOS

创建一个 .NET MAUI 项目

在多平台部分,选择 .NET MAUI App 并继续。

创建 .NET MAUI 应用程序项目

加入 IronOCR.iOS 库

可以通过多种方式添加该库。最简单的可能是使用 NuGet。

1.在 Visual Studio 中,右键单击 "依赖项 > Nuget",然后选择 "管理 NuGet 包..."。

2.选择 "浏览 "选项卡并搜索 "IronOcr.iOS"。

3.选择 "IronOcr.iOS "软件包并点击 "添加软件包"。

下载 IronOcr.iOS 软件包

为防止其他平台出现问题,请修改 csproj 文件,使其仅在针对 iOS 平台时包含软件包。为此,请

1.右键单击项目的 *.csproj 文件,选择 "编辑项目文件"。

2.创建一个新的 ItemGroup 元素:

    <ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
    </ItemGroup>
XML

3.将 "IronOcr.iOS "PackageReference 移到我们刚刚创建的 ItemGroup 中。

上述步骤将防止 "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>
XML

编辑 "MainPage.xaml.cs"

首先实例化 IronTesseract 对象。请确保在类中初始化一次 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
VB   C#

最后,将构建目标切换为 iOS 模拟器并运行项目。

运行项目

这将向您展示如何运行项目和执行 OCR。

执行 .NET MAUI 应用程序项目

下载 .NET MAUI 应用程序项目

您可以下载本指南的完整代码。它是一个压缩文件,您可以在 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"