Comment effectuer l'OCR sur Android dans .NET MAUI

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

par Chaknith Bin

.NET MAUI (L'interface utilisateur des applications multiplateformes) est une évolution du framework Xamarin.Forms, conçu pour créer des applications multiplateformes pour Android, iOS, macOS et Windows à l'aide de .NET. .NET MAUI vise à simplifier le processus de construction d'interfaces utilisateur natives pouvant fonctionner sur plusieurs plates-formes.

Le paquet IronOcr.Android apporte la prise en charge de l'OCR à Android!!

IronOCR Package Android

Le paquet IronOcr.Android permet d'utiliser les fonctions OCR sur les appareils Android par le biais de projets multiplateformes .NET. Le paquetage IronOCR vanille n'est pas nécessaire.

PM > Install-Package IronOcr.Android
Bibliothèque NuGet C# pour PDF

Installer avec NuGet

Installer le paquet IronOCR.Android

Créer un projet .NET MAUI

Ouvrez Visual Studio et cliquez sur "Créer un nouveau projet". Recherchez MAUI, sélectionnez .NET MAUI App et cliquez sur "Next".

Créer un projet .NET MAUI App

Inclure la bibliothèque IronOCR.Android

La bibliothèque peut être ajoutée de différentes manières. Le plus simple est sans doute d'utiliser NuGet.

  1. Dans Visual Studio, faites un clic droit sur "Dependencies" et sélectionnez "Manage NuGet Packages ...".

  2. Sélectionnez l'onglet "Parcourir" et recherchez "IronOCR.Android".

  3. Sélectionnez le paquet "IronOCR.Android" et cliquez sur "Installer".

    Télécharger le paquet IronOCR.Android

    Pour éviter les problèmes avec d'autres plateformes, modifiez le fichier csproj pour n'inclure le paquet que lorsqu'il s'agit de la plateforme Android. Pour ce faire :

  4. Cliquez avec le bouton droit de la souris sur le projet et sélectionnez "Editer le fichier du projet".

  5. Créez un nouvel élément ItemGroup comme suit :
    <ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
    </ItemGroup>
XML
  1. Déplacez la référence de paquetage "IronOCR.Android" dans le groupe d'éléments que nous venons de créer.

    Les étapes ci-dessus empêcheront l'utilisation du paquet "IronOcr.Android" sur les plates-formes iOS, par exemple (à cette fin, installer IronOCR.iOS au lieu de).

Modifier "MainActivity.cs"

  • Ouvrez le fichier "MainActivity.cs" en naviguant vers Plateformes -> Android.
  • Ajoutez la méthode MainActivity et invoquez la méthode 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
VB   C#

Modifier "MainPage.xaml"

Modifiez le fichier XAML pour afficher un bouton et une étiquette indiquant le résultat de l'OCR. Par exemple :

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

Modifier "MainPage.xaml.cs"

Tout d'abord, créez une instance de l'objet IronTesseract. Veillez à ce qu'IronTesseract soit initialisé une seule fois dans une classe, comme le montre le code ci-dessous. L'instancier dans une méthode peut s'avérer inefficace et provoquer des erreurs inattendues.

Ensuite, utilisez la méthode FilePicker.PickAsync pour sélectionner un fichier, puis ouvrez un flux de lecture à partir du FileResult. Créez un nouvel objet OcrInput et chargez-y l'image. Effectuer l'OCR sur l'image en utilisant l'instance de tesseract et récupérer le texte. Enfin, affichez le texte résultant dans une étiquette.

Veuillez noter que l'implémentation actuelle ne prend en charge que les fichiers images. Le paquet ne prend pas encore en charge les documents PDF. Par conséquent, toutes les configurations relatives aux PDF sont désactivées par défaut et doivent le rester.

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
VB   C#

Enfin, dans le fichier .csproj, assurez-vous que vous ne construisez le projet que pour Android. Étant donné que le paquet que nous avons ajouté n'est destiné qu'à Android, la construction du projet pour toutes les plateformes échouera.

Exécuter le projet

Il vous montrera comment exécuter le projet et effectuer l'OCR.

Exécuter le projet .NET MAUI App

Télécharger le projet d'application .NET MAUI

Vous pouvez télécharger le code complet de ce guide. Il s'agit d'un fichier zippé que vous pouvez ouvrir dans Visual Studio en tant que projet .NET MAUI App.

Cliquez ici pour télécharger le projet.

Utilisation d'IronOCR.Android dans Avalonia

Tout comme MAUI, IronOcr.Android peut être utilisé dans un projet Avalonia avec la même configuration que celle décrite ci-dessus.

Si vous souhaitez effectuer l'OCR sur iOS, consultez l'article suivant pour en savoir plus : "Comment effectuer l'OCR sur iOS dans .NET MAUI"