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
Android related to How to Perform OCR on Android in .NET MAUI

.NET MAUI (Multi-platform App UI) is an evolution of the Xamarin.Forms framework, designed to create cross-platform apps for Android, iOS, macOS, and Windows using .NET. .NET MAUI aims to simplify the process of building native user interfaces that can run on multiple platforms.

The IronOcr.Android package brings OCR support to Android!!

IronOCR Android Package

The IronOcr.Android package enables OCR features on Android devices via .NET cross-platform projects. The vanilla IronOCR package is not needed.

Install-Package IronOcr.Android
C# NuGet Library for PDF

Install with NuGet

Install-Package IronOcr.Android

Create a .NET MAUI project

Open Visual Studio and click on "Create a new project". Search for MAUI, select .NET MAUI App and "Next".

Create .NET MAUI App project

Include the IronOCR.Android library

The library can be added in various ways. The easiest is perhaps by using NuGet.

  1. Inside Visual Studio, right-click on "Dependencies" and select "Manage NuGet Packages ...".
  2. Select the "Browse" tab and search for "IronOcr.Android".
  3. Select the "IronOcr.Android" package and click on "Install".

Download IronOcr.Android package

To prevent issues with other platforms, modify the csproj file to only include the package when targeting the Android platform. In order to do so:

  1. Right-click on the project and select "Edit Project File".
  2. Create a new ItemGroup element as such:

    <ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
    </ItemGroup>
    <ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
    </ItemGroup>
    XML
  3. Move the "IronOcr.Android" PackageReference inside the ItemGroup we just created.

The above steps will prevent the "IronOcr.Android" package from being used on e.g., iOS platforms (for that purpose, install IronOcr.iOS instead).

Edit "MainActivity.cs"

  • Open the "MainActivity.cs" file by navigating to Platforms -> Android.
  • Add the MainActivity method and invoke the Initialize method.
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

Edit "MainPage.xaml"

Edit the XAML file to display a button and a label to show the OCR result. For example:

<?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

Edit "MainPage.xaml.cs"

First, create an instance of the IronTesseract object. Ensure that IronTesseract is initialized once within the class, as demonstrated in the code below. Instantiating it within a method can be ineffective and may cause unexpected errors.

Next, use the FilePicker.PickAsync method to select a file, then open a reading stream from the FileResult. Create a new OcrInput object and load the image into it. Perform OCR on the image using the tesseract instance and retrieve the text. Finally, display the resulting text in a label.

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

Lastly, in the .csproj file, make sure that you are only building the project for Android. Since the package we added is only for Android, building the project for all platforms will fail.

Run the Project

This will show you how to run the project and perform OCR.

Execute .NET MAUI App project

Download .NET MAUI App Project

You can download the complete code for this guide. It comes as a zipped file that you can open in Visual Studio as a .NET MAUI App project.

Click here to download the project.

Using IronOcr.Android in Avalonia

Similar to MAUI, IronOcr.Android can be used in an Avalonia project with the same setup as described above.

If you want to perform OCR on iOS, navigate to the following article to learn more: "How to Perform OCR on iOS in .NET MAUI"

Preguntas Frecuentes

¿Cómo puedo realizar OCR en Android en una aplicación .NET MAUI?

Para realizar OCR en Android usando .NET MAUI, instala el paquete IronOcr.Android vía NuGet en Visual Studio. Utiliza la clase IronTesseract para procesar imágenes y extraer texto. Asegúrate de que tu proyecto esté configurado para dirigirse a Android modificando adecuadamente el archivo .csproj.

¿Cuál es el propósito del paquete IronOcr.Android?

El paquete IronOcr.Android está diseñado específicamente para llevar capacidades de OCR a dispositivos Android dentro de proyectos .NET MAUI. Simplifica la integración de características de reconocimiento de texto en aplicaciones multiplataforma dirigidas a Android.

¿Cómo configuro un proyecto .NET MAUI para OCR en Android?

Configura tu proyecto .NET MAUI instalando el paquete IronOcr.Android a través de NuGet. Ajusta el archivo .csproj para dirigirte a Android creando un nuevo elemento ItemGroup y moviendo la referencia de paquete IronOcr.Android dentro de él. Esto evita problemas de construcción para otras plataformas.

¿Qué modificaciones se necesitan en MainActivity.cs para la configuración de OCR?

En el archivo MainActivity.cs bajo Platforms -> Android, añade el método MainActivity y llama al método Initialize de IronTesseract. Esto establece las capacidades de OCR necesarias para procesar texto de imágenes.

¿Cómo puedo editar MainPage.xaml para incorporar características de OCR?

Edita MainPage.xaml para incluir un botón para importar archivos y una etiqueta para mostrar los resultados del OCR. Define los elementos de interfaz de usuario necesarios para interactuar con la lógica de procesamiento de OCR y gestionar eficazmente la entrada del usuario.

¿Qué debo hacer si encuentro errores durante el procesamiento de OCR?

Utiliza bloques try-catch alrededor de tu código de procesamiento de OCR para manejar excepciones. Registra cualquier error empleando Debug.WriteLine u otro mecanismo de registro para ayudar a diagnosticar y solucionar problemas.

¿Es posible usar el paquete IronOcr.Android en proyectos Avalonia?

Sí, el paquete IronOcr.Android se puede usar en proyectos Avalonia con un proceso de configuración similar al de .NET MAUI. Ajusta la configuración del proyecto en consecuencia para habilitar la funcionalidad OCR.

¿Dónde puedo encontrar un proyecto de muestra completo para OCR en Android usando .NET MAUI?

Un proyecto de muestra completo para OCR en Android usando la biblioteca IronOCR en .NET MAUI está disponible para descargar a través de un enlace proporcionado en la guía. El proyecto viene como un archivo comprimido, listo para abrirse en Visual Studio.

¿Cómo aseguro que el paquete IronOcr.Android solo apunte a Android en un proyecto multiplataforma?

Para asegurar que el paquete IronOcr.Android solo apunte a Android, modifica el archivo .csproj creando un ItemGroup condicional para Android y moviendo la referencia de paquete IronOcr.Android dentro de él. Esto previene conflictos al construir para otras plataformas.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 5,044,537 | Versión: 2025.11 recién lanzado