OCR auf Android in .NET MAUI durchführen

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

von Chaknith Bin

Android related to OCR auf Android in .NET MAUI durchführen

.NET MAUI(Multiplattform-App UI) ist eine Weiterentwicklung des Xamarin.Forms-Frameworks, das für die Erstellung plattformübergreifender Apps für Android, iOS, macOS und Windows unter Verwendung von .NET entwickelt wurde. .NET MAUI zielt darauf ab, den Prozess der Erstellung nativer Benutzeroberflächen zu vereinfachen, die auf mehreren Plattformen laufen können.

Das IronOcr.Android-Paket bringt OCR-Unterstützung für Android!!

IronOCR Android-Paket

Das IronOcr.Android-Paket ermöglicht OCR-Funktionen auf Android-Geräten über plattformübergreifende .NET-Projekte. Das IronOCR-Paket wird nicht benötigt.

PM > Install-Package IronOcr.Android
C# NuGet-Bibliothek für PDF

Installieren mit NuGet

Installations-Paket IronOcr.Android

Erstellen eines .NET MAUI-Projekts

Öffnen Sie Visual Studio und klicken Sie auf "Ein neues Projekt erstellen". Suchen Sie nach MAUI, wählen Sie .NET MAUI App und "Weiter".

.NET MAUI App Projekt erstellen

Einbindung der IronOCR.Android-Bibliothek

Die Bibliothek kann auf verschiedene Weise hinzugefügt werden. Am einfachsten ist es vielleicht, wenn Sie NuGet verwenden.

  1. Klicken Sie in Visual Studio mit der rechten Maustaste auf "Dependencies" und wählen Sie "Manage NuGet Packages ...".

  2. Wählen Sie die Registerkarte "Durchsuchen" und suchen Sie nach "IronOcr.Android".

  3. Wählen Sie das Paket "IronOcr.Android" und klicken Sie auf "Installieren".

    IronOcr.Android-Paket herunterladen

    Um Probleme mit anderen Plattformen zu vermeiden, ändern Sie die csproj-Datei so, dass sie das Paket nur dann enthält, wenn es für die Android-Plattform bestimmt ist. Um dies zu tun:

  4. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Projektdatei bearbeiten".

  5. Erstellen Sie ein neues ItemGroup-Element als solches:
    <ItemGroup Condition="$(TargetFramework.Contains('android')) == true">
    </ItemGroup>
XML
  1. Verschieben Sie die "IronOcr.Android" PackageReference in die soeben erstellte ItemGroup.

    Die obigen Schritte verhindern, dass das "IronOcr.Android"-Paket auf z. B. iOS-Plattformen verwendet wird(zu diesem Zweck installieren SieIronOcr.iOS stattdessen).

Bearbeiten Sie "MainActivity.cs"

  • Öffnen Sie die Datei "MainActivity.cs", indem Sie zu Plattformen -> Android navigieren.
  • Fügen Sie die Methode MainActivity hinzu und rufen Sie die Methode Initialize auf.
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#

Bearbeiten Sie "MainPage.xaml"

Bearbeiten Sie die XAML-Datei, um eine Schaltfläche und eine Beschriftung zur Anzeige des OCR-Ergebnisses anzuzeigen. Zum Beispiel:

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

Bearbeiten Sie "MainPage.xaml.cs"

Erstellen Sie zunächst eine Instanz des IronTesseract-Objekts. Stellen Sie sicher, dass IronTesseract einmal innerhalb einer Klasse initialisiert wird, wie im folgenden Code gezeigt. Die Instanziierung innerhalb einer Methode kann ineffektiv sein und unerwartete Fehler verursachen.

Als Nächstes verwenden Sie die Methode "FilePicker.PickAsync", um eine Datei auszuwählen, und öffnen dann einen Lesestrom aus dem FileResult. Erstellen Sie ein neues OcrInput-Objekt und laden Sie das Bild in dieses Objekt. Führen Sie OCR auf dem Bild mit der Tesseract-Instanz durch und rufen Sie den Text ab. Schließlich zeigen Sie den resultierenden Text in einem Etikett an.

Bitte beachten Sie, dass die derzeitige Implementierung nur Bilddateien unterstützt. Das Paket unterstützt noch keine PDF-Dokumente. Daher sind alle PDF-bezogenen Konfigurationen standardmäßig deaktiviert und sollten dies auch bleiben.

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#

Stellen Sie schließlich in der .csproj-Datei sicher, dass Sie das Projekt nur für Android erstellen. Da das von uns hinzugefügte Paket nur für Android bestimmt ist, schlägt die Erstellung des Projekts für alle Plattformen fehl.

Das Projekt ausführen

Hier erfahren Sie, wie Sie das Projekt ausführen und die OCR durchführen.

Ausführen des .NET MAUI App-Projekts

.NET MAUI App Projekt herunterladen

Sie können den vollständigen Code für diese Anleitung herunterladen. Er wird als gezippte Datei geliefert, die Sie in Visual Studio als .NET MAUI App-Projekt öffnen können.

Klicken Sie hier, um das Projekt herunterzuladen.

Verwendung von IronOcr.Android in Avalonia

Ähnlich wie MAUI kann IronOcr.Android in einem Avalonia-Projekt mit den gleichen Einstellungen wie oben beschrieben verwendet werden.

Wenn Sie OCR unter iOS durchführen möchten, lesen Sie den folgenden Artikel, um mehr zu erfahren: "OCR auf iOS in .NET MAUI durchführen"