Comment effectuer l'OCR sur Android dans .NET MAUI

Chaknith Bin
Chaknith Bin
mai 20, 2024
Mise à jour décembre 10, 2024
Partager:
This article was translated from English: Does it need improvement?
Translated
View the article in English
Android related to Comment effectuer l'OCR sur Android dans .NET MAUI

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

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

IronOCR Package Android

Le package IronOcr.Android permet des fonctionnalités OCR sur des appareils Android via des projets multiplateformes .NET. Le paquetage IronOCR vanille n'est pas nécessaire.

PM > Install-Package IronOcr.Android
Bibliothèque C# NuGet 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 d'application .NET MAUI

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 package 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 le package "IronOcr.Android" d'être utilisé sur, par exemple, les plateformes iOS (pour cela, installez plutôt IronOcr.iOS).

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 une reconnaissance optique de caractères (OCR) sur iOS, consultez l'article suivant pour en savoir plus : "Comment effectuer une reconnaissance optique de caractères (OCR) sur iOS dans .NET MAUI"

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.