How to Perform OCR on Android in .NET MAUI

This article was translated from English: Does it need improvement?
Translated
View the article in English
class="container-fluid">
class="row">
class="col-md-2"> Android related to How to Perform OCR on Android in .NET MAUI

.NET MAUI(多平台應用UI)是Xamarin.Forms框架的升級版,旨在使用.NET創建適用於Android、iOS、macOS和Windows的跨平台應用程序。 .NET MAUI旨在簡化構建可在多個平台上運行的原生用戶界面的過程。

IronOcr.Android包為Android帶來OCR支持!!

class="hsg-featured-snippet">

如何在.NET MAUI中使用IronOCR於Android

  1. 下載C#庫以便在Android上執行OCR
  2. 創建.NET MAUI應用程序項目
  3. 編輯XAML文件以顯示激活按鈕和輸出文本
  4. 編輯相應的C#文件以執行OCR
  5. 下載樣本項目以便快速入門

IronOCR Android包

IronOcr.Android包通過.NET跨平台項目在Android設備上實現OCR功能。 不需要使用標準的IronOCR包。

Install-Package IronOcr.Android
class="products-download-section">
data-modal-id="trial-license-after-download">
class="product-image"> C# NuGet Library for PDF
class="product-info">

使用NuGet安裝

class="copy-nuget-row">
Install-Package IronOcr.Android
class="copy-button">
class="nuget-link">nuget.org/packages/IronOcr.Android/

創建.NET MAUI項目

打開 Visual Studio 並點擊 "創建新項目"。 搜索 MAUI,選擇 .NET MAUI 應用程式並點擊 "下一步"。

創建.NET MAUI應用程序項目

包含IronOCR.Android庫

可以通過多種方式添加該庫。 最簡單的可能是使用 NuGet。

  1. 在 Visual Studio 中,右鍵點擊 "Dependencies" 並選擇 "管理 NuGet 套件..."。
  2. 選擇“瀏覽”選項卡並搜索“IronOcr.Android”。
  3. 選擇“IronOcr.Android”包並點擊“安裝”。

下載IronOcr.Android包

為了避免與其他平台的問題,修改 csproj 文件以便僅在針對 Android 平台時包含該套件。 要做到這一點:

  1. 右鍵點擊項目並選擇“編輯項目文件”。
  2. 創建一個新的 ItemGroup 元素,如下所示:

    <ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
    </ItemGroup>
    <ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
    </ItemGroup>
    XML
  3. 將“IronOcr.Android” PackageReference移至我們剛創建的ItemGroup內。

上述步驟將防止“IronOcr.Android”包在例如iOS平台上使用(為此目的,請安裝IronOcr.iOS代替)。

編輯"MainActivity.cs"

  • 通過導航到Platforms -> Android來打開"MainActivity.cs"文件。
  • 添加MainActivity方法並調用Initialize方法。
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
using IronOcr;

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()
        {
            // Initialize IronTesseract for OCR purposes
            IronTesseract.Initialize(this);
        }
    }
}
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
using IronOcr;

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()
        {
            // Initialize IronTesseract for OCR purposes
            IronTesseract.Initialize(this);
        }
    }
}
Imports Android.App
Imports Android.Content.PM
Imports Android.Runtime
Imports Android.OS
Imports IronOcr

Namespace MAUIIronOCRAndroidSample
	<Activity(Theme := "@style/Maui.SplashTheme", MainLauncher := True, ConfigurationChanges := ConfigChanges.ScreenSize Or ConfigChanges.Orientation Or ConfigChanges.UiMode Or ConfigChanges.ScreenLayout Or ConfigChanges.SmallestScreenSize Or ConfigChanges.Density)>
	Public Class MainActivity
		Inherits MauiAppCompatActivity

		Public Sub New()
			' Initialize IronTesseract for OCR purposes
			IronTesseract.Initialize(Me)
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

編輯"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>
<?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>
XML

編輯"MainPage.xaml.cs"

首先,創建一個IronTesseract對象的實例。 確保IronTesseract在類別內被初始化一次,如下代碼所示。 在方法內實例化它可能無效並可能導致意外錯誤。

接下來,使用FilePicker.PickAsync方法選擇文件,然後從FileResult中打開讀取流。 創建一個新的OcrInput對象並將圖像加載到其中。 使用Tesseract實例對圖像執行OCR並檢索文本。 最後,在標籤中顯示結果文本。

using IronOcr;
using Microsoft.Maui.Controls;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;

namespace MAUIIronOCRAndroidSample
{
    public partial class MainPage : ContentPage
    {
        // Initialize IronTesseract once in a class
        private readonly IronTesseract ocrTesseract = new IronTesseract();

        public MainPage()
        {
            InitializeComponent();
            // Apply License key if required
            IronOcr.License.LicenseKey = "IRONOCR.MYLICENSE.KEY.1EF01";
        }

        private async void ReadFileOnImport(object sender, EventArgs e)
        {
            try
            {
                // Configure the file picker
                var options = new PickOptions
                {
                    PickerTitle = "Please select a file"
                };

                // Await user's file selection
                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 for OCR processing
                    ocrInput.AddImage(stream);
                    // Perform OCR
                    var ocrResult = ocrTesseract.Read(ocrInput);
                    // Display extracted text
                    OutputText.Text = ocrResult.Text;
                }
            }
            catch (Exception ex)
            {
                // Log and handle exceptions
                Debug.WriteLine(ex);
            }
        }
    }
}
using IronOcr;
using Microsoft.Maui.Controls;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;

namespace MAUIIronOCRAndroidSample
{
    public partial class MainPage : ContentPage
    {
        // Initialize IronTesseract once in a class
        private readonly IronTesseract ocrTesseract = new IronTesseract();

        public MainPage()
        {
            InitializeComponent();
            // Apply License key if required
            IronOcr.License.LicenseKey = "IRONOCR.MYLICENSE.KEY.1EF01";
        }

        private async void ReadFileOnImport(object sender, EventArgs e)
        {
            try
            {
                // Configure the file picker
                var options = new PickOptions
                {
                    PickerTitle = "Please select a file"
                };

                // Await user's file selection
                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 for OCR processing
                    ocrInput.AddImage(stream);
                    // Perform OCR
                    var ocrResult = ocrTesseract.Read(ocrInput);
                    // Display extracted text
                    OutputText.Text = ocrResult.Text;
                }
            }
            catch (Exception ex)
            {
                // Log and handle exceptions
                Debug.WriteLine(ex);
            }
        }
    }
}
Imports IronOcr
Imports Microsoft.Maui.Controls
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Threading.Tasks

Namespace MAUIIronOCRAndroidSample
	Partial Public Class MainPage
		Inherits ContentPage

		' Initialize IronTesseract once in a class
		Private ReadOnly ocrTesseract As New IronTesseract()

		Public Sub New()
			InitializeComponent()
			' Apply License key if required
			IronOcr.License.LicenseKey = "IRONOCR.MYLICENSE.KEY.1EF01"
		End Sub

		Private Async Sub ReadFileOnImport(ByVal sender As Object, ByVal e As EventArgs)
			Try
				' Configure the file picker
				Dim options = New PickOptions With {.PickerTitle = "Please select a file"}

				' Await user's file selection
				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 for OCR processing
					ocrInput.AddImage(stream)
					' Perform OCR
					Dim ocrResult = ocrTesseract.Read(ocrInput)
					' Display extracted text
					OutputText.Text = ocrResult.Text
				End If
			Catch ex As Exception
				' Log and handle exceptions
				Debug.WriteLine(ex)
			End Try
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

最後,在.csproj文件中,確保您僅為Android構建項目。 由於我們添加的包僅適用於Android,為所有平台構建項目將會失敗。

運行項目

這將展示如何運行項目並執行OCR。

執行.NET MAUI應用程序項目

下載 .NET MAUI 應用程式項目

您可以下載此指南的完整代碼。 它來作為一個壓縮文件,您可以在 Visual Studio 中打開它作為 .NET MAUI 應用程式項目。

點擊此處下載項目。

在Avalonia中使用IronOcr.Android

與MAUI相似,IronOcr.Android可以在Avalonia項目中使用,設置方式如上所述。

如果您想在iOS上執行OCR,請導航到以下文章以了解更多信息:"如何在iOS中使用.NET MAUI執行OCR"

常見問題解答

如何在 .NET MAUI 應用程式中對 Android 裝置進行 OCR 識別?

若要在 Android 上使用 .NET MAUI 執行 OCR,請在 Visual Studio 中透過 NuGet 安裝 IronOcr.Android 套件。使用 IronTesseract 類別處理圖像並提取文字。請確保透過修改 .csproj 檔案將專案配置為面向 Android。

IronOcr.Android軟體包的用途是什麼?

IronOcr.Android 軟體包專為在 .NET MAUI 專案中為 Android 裝置引入 OCR 功能而設計。它簡化了面向 Android 的跨平台應用程式中文字辨識功能的整合。

如何配置用於 Android OCR 的 .NET MAUI 專案?

透過 NuGet 安裝 IronOcr.Android 套件,設定您的 .NET MAUI 專案。修改 .csproj 文件,使其面向 Android 平台,方法是建立一個新的 ItemGroup 元素,並將 IronOcr.Android PackageReference 移入其中。這樣可以避免在其他平台上出現建置問題。

MainActivity.cs 中需要對哪些檔案進行修改才能實現 OCR 設定?

在 Platforms -> Android 下的 MainActivity.cs 檔案中,新增 MainActivity 方法並呼叫 IronTesseract 中的 Initialize 方法。這將設定處理圖像文字所需的 OCR 功能。

如何修改 MainPage.xaml 檔案以新增 OCR 功能?

編輯 MainPage.xaml 文件,新增文件匯入按鈕和 OCR 結果顯示標籤。定義必要的 UI 元素,以便與 OCR 處理邏輯互動並有效管理使用者輸入。

如果在OCR處理過程中遇到錯誤,我該怎麼辦?

在 OCR 處理程式碼周圍使用 try-catch 區塊來處理異常。使用 Debug.WriteLine 或其他日誌機制記錄任何錯誤,以協助診斷和修復問題。

是否可以在 Avalonia 專案中使用 IronOcr.Android 套件?

是的,IronOcr.Android 套件可以在 Avalonia 專案中使用,其設定流程與 .NET MAUI 類似。請相應地調整項目配置以啟用 OCR 功能。

哪裡可以找到使用 .NET MAUI 實作 Android OCR 的完整範例專案?

本指南中提供了一個完整的 Android OCR 範例項目,該項目使用 .NET MAUI 中的 IronOCR 庫,可透過指南中的連結下載。此專案以壓縮檔案的形式提供,可直接在 Visual Studio 中開啟。

在多平台專案中,如何確保 IronOcr.Android 套件僅針對 Android 平台?

為確保 IronOcr.Android 套件僅面向 Android 平台,請修改 .csproj 文件,建立一個針對 Android 的條件 ItemGroup,並將 IronOcr.Android PackageReference 移至其中。這樣可以避免在建構其他平台版本時發生衝突。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

準備好開始了嗎?
Nuget 下載 5,044,537 | 版本: 2025.11 剛剛發布