using IronBarCode;
using System.Drawing;
// Reading a barcode is easy with IronBarcode!
var resultFromFile = BarcodeReader.Read(@"file/barcode.png"); // From a file
var resultFromBitMap = BarcodeReader.Read(new Bitmap("barcode.bmp")); // From a bitmap
var resultFromImage = BarcodeReader.Read(Image.FromFile("barcode.jpg")); // From an image
var resultFromPdf = BarcodeReader.ReadPdf(@"file/mydocument.pdf"); // From PDF use ReadPdf
// To configure and fine-tune barcode reading, utilize the BarcodeReaderOptions class
var myOptionsExample = new BarcodeReaderOptions
{
// Choose a reading speed from: Faster, Balanced, Detailed, ExtremeDetail
// There is a tradeoff in performance as more detail is set
Speed = ReadingSpeed.Balanced,
// Reader will stop scanning once a single barcode is found (if set to true)
ExpectMultipleBarcodes = true,
// By default, all barcode formats are scanned for
// Specifying a subset of barcode types to search for would improve performance
ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
// Utilize multiple threads to read barcodes from multiple images in parallel
Multithreaded = true,
// Maximum threads for parallelized barcode reading
// Default is 4
MaxParallelThreads = 2,
// The area of each image frame in which to scan for barcodes
// Specifying a crop area will significantly improve performance and avoid noisy parts of the image
CropArea = new Rectangle(),
// Special setting for Code39 barcodes
// If a Code39 barcode is detected, try to read with both the base and extended ASCII character sets
UseCode39ExtendedMode = true
};
// Read with the options applied
var results = BarcodeReader.Read("barcode.png", myOptionsExample);
// Create a barcode with one line of code
var myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8);
// After creating a barcode, we may choose to resize
myBarcode.ResizeTo(400, 100);
// Save our newly-created barcode as an image
myBarcode.SaveAsImage("EAN8.jpeg");
Image myBarcodeImage = myBarcode.Image; // Can be used as Image
Bitmap myBarcodeBitmap = myBarcode.ToBitmap(); // Can be used as Bitmap
Verwendung eines Dokumentenscanner-SDKs in einer .NET MAUI-Anwendung
Jordi Bardia
29. April 2024
Teilen Sie:
Mit dem Aufstieg der mobilen Technologie sind Dokumentenscan-Apps wie Scanbot SDK und Native SDKs für Privatpersonen und Unternehmen gleichermaßen unverzichtbare Werkzeuge oder Lösungsanbieter geworden. In diesem Tutorial werden wir untersuchen, wie man eine Dokumentenscanner-App mit der neuesten Version von .NET Multi-platform App UI (MAUI) und IronOCR, einer leistungsstarken OCR (Optical Character Recognition) Bibliothek für .NET, erstellt. .NET MAUI vereinfacht die Erstellung plattformübergreifender mobiler Anwendungen wie Android und gewährleistet eine nahtlose Bereitstellung auf dem Gerät des Endbenutzers. Am Ende dieses Leitfadens werden Sie in der Lage sein, Ihre eigene Dokumentenscanner-SDK-Anwendung zu entwickeln, die problemlos Text aus Bildern und gescannten Dateien extrahieren kann.
Verwendung eines Dokumentenscanner-SDKs in einer .NET MAUI-Anwendung
Installieren Sie die IronOCR C#-Bibliothek, um das Document Scanner SDK zu verwenden.
Entwerfen Sie ein .NET MAUI-Formular mit den erforderlichen Steuerelementen.
Fotoaufnahme mit der MediaPicker.CapturePhotoAsync-Methode.
Wandle das aufgenommene Foto in einen Stream um.
Übergeben Sie den Stream an die LoadImage-Methode von OcrInput.
Führen Sie OCR mit der Read-Methode von IronTesseract durch.
Zeigen Sie den Dokumenttext mithilfe der OcrResult-Text-Eigenschaft an.
IronOCR - Die C# OCR-Bibliothek
IronOCR ist eine hochmoderne Optical Character Recognition (OCR) Software, die von Iron Software, LLC entwickelt wurde. Sie ist darauf ausgelegt, Bilder und gescannte Dokumente präzise und effizient in bearbeitbaren Text umzuwandeln. Die OCR-Technologie hat die Art und Weise, wie Unternehmen ihre Dokumente verarbeiten, revolutioniert und erleichtert die Extraktion wertvoller Informationen aus verschiedenen Quellen wie gescannten Dokumenten, PDF-Dateien und Bildern.
IronOCR zeichnet sich unter den OCR-Lösungen durch seine fortschrittlichen Funktionen, seine robuste Leistung und seine einfache Integration aus. Egal, ob Sie ein Entwickler sind, der OCR-Funktionen in seine Anwendungen integrieren möchte, oder ein Unternehmen, das datengenerierte Dokumentenmanagementprozesse rationalisieren möchte - IronOCR bietet eine umfassende Lösung.
Hauptmerkmale von IronOCR
Hier sind einige wichtige Merkmale von IronOCR:
Hohe Genauigkeit: IronOCR verwendet hochmoderne Algorithmen und maschinelle Lerntechniken, um außergewöhnliche Genauigkeit bei der Texterkennung zu erreichen. Es kann Text aus komplexen Dokumenten genau extrahieren, auch aus Bildern mit geringer QR-Auflösung oder schlechter Scanqualität.
Unterstützung für mehrere Sprachen: Eine der herausragenden Eigenschaften von IronOCR ist seine umfassende Sprachunterstützung. Es kann Text in über 127 Sprachen erkennen und eignet sich daher für Unternehmen, die in unterschiedlichen Sprachumgebungen tätig sind.
Bildvorverarbeitung: Um die Genauigkeit zu verbessern, bietet IronOCR verschiedene Bildvorverarbeitungsfunktionen wie Rauschunterdrückung, Kontrasteinstellung und Entzerrung. Diese Vorverarbeitungstechniken tragen zur Verbesserung der OCR-Ergebnisse bei, insbesondere bei verzerrten oder unvollkommenen Bildern.
Unterstützung für verschiedene Dateiformate: IronOCR unterstützt eine Vielzahl von Dateiformaten, darunter TIFF, JPEG, PNG und PDF. Diese Flexibilität ermöglicht es den Benutzern, Dokumente aus verschiedenen Quellen zu verarbeiten, ohne sich Gedanken über Kompatibilitätsprobleme zu machen.
Anpassungsoptionen: Entwickler können das Verhalten von IronOCR an ihre spezifischen Anforderungen anpassen. Ob es um die Feinabstimmung von Erkennungsparametern oder die Integration in bestehende Arbeitsabläufe geht, IronOCR bietet ein hohes Maß an Flexibilität und Anpassungsfähigkeit.
Schnell und skalierbar: IronOCR ist für Leistung optimiert und ermöglicht eine schnelle Textextraktion selbst bei großen Dokumentenmengen. Die skalierbare Architektur gewährleistet einen nahtlosen Betrieb, unabhängig davon, ob Sie nur eine Handvoll Dokumente verarbeiten oder riesige Dokumentensammlungen bearbeiten.
Integration mit .NET-Anwendungen: IronOCR integriert sich nahtlos in .NET-Anwendungen und bietet Entwicklern benutzerfreundliche APIs und Bibliotheken zur Einbindung von OCR-Funktionen in ihre Softwareprojekte. Diese enge Integration vereinfacht die Entwicklung und beschleunigt die Markteinführung von OCR-fähigen Anwendungen.
Dokumentklassifizierung und Datenauszug: Über die grundlegende Texterkennung hinaus bietet IronOCR erweiterte Funktionen zur Dokumentklassifizierung und Datenauswertung. Es kann bestimmte Datenfelder in Dokumenten identifizieren, z. B. Namen, Adressen oder Rechnungsnummern, was eine automatische Datenextraktion und -analyse ermöglicht.
Voraussetzungen
Grundkenntnisse in der C#-Programmierung.
Visual Studio 2022 in der neuesten Version mit dem .NET MAUI-Workload auf Ihrem System installiert.
IronOCR-Paketbibliothek, die über den NuGet Package Manager installiert wurde.
1. Einrichten Ihres .NET MAUI-Projekts
Öffnen Sie Visual Studio 2022 und erstellen Sie ein neues .NET MAUI App-Projekt.
Wählen Sie einen geeigneten Projektnamen und konfigurieren Sie Ihre Projekteinstellungen.
Stellen Sie sicher, dass Sie die erforderlichen Android- und iOS-SDKs für die Entwicklung von Zielplattformen installiert haben.
2. Installation der IronOCR-Bibliothek
Klicken Sie mit der rechten Maustaste auf Ihre Projektmappe in Visual Studio.
Wählen Sie "Manage NuGet Packages for Solutions" und suchen Sie auf der Registerkarte Browse nach "IronOCR".
Installieren Sie die IronOCR-Bibliothek in Ihrem Projekt.
3. Entwerfen der UI
Beginnen wir mit dem Entwurf des Layouts unserer MainPage.xaml. Wir erstellen ein einfaches Layout mit einem Bildsteuerelement zur Anzeige des aufgenommenen Fotos, einer Aufnahmetaste zur Aufnahme von Fotos und einem Label zur Anzeige des extrahierten Textes.
Hier ist der XAML-Code für MainPage.xaml:
<?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"
xmlns:d="http://schemas.microsoft.com/dotnet/2021/maui/design"
x:Class="DocumentScanner.MainPage">
<ScrollView>
<VerticalStackLayout
Padding="30,0"
Spacing="25">
<Image
Source="dotnet_bot.png"
HeightRequest="185"
Aspect="AspectFit"
SemanticProperties.Description="dot net bot in a race car number eight" />
<Label
Text="Welcome to .NET MAUI Document Scanner SDK"
Style="{StaticResource Headline}"
SemanticProperties.HeadingLevel="Level1" />
<Label
Text="Using IronOCR"
Style="{StaticResource SubHeadline}"
SemanticProperties.HeadingLevel="Level2"
SemanticProperties.Description="Welcome to .NET MAUI Document Scanner SDK" />
<!-- Camera preview -->
<Image x:Name="cameraPreview" />
<!-- Capture button -->
<Button Text="Capture" Clicked="OnCaptureClicked" />
<!-- Text display area -->
<Label x:Name="textLabel"
Text="Recognized Text:"/>
</VerticalStackLayout>
</ScrollView>
</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"
xmlns:d="http://schemas.microsoft.com/dotnet/2021/maui/design"
x:Class="DocumentScanner.MainPage">
<ScrollView>
<VerticalStackLayout
Padding="30,0"
Spacing="25">
<Image
Source="dotnet_bot.png"
HeightRequest="185"
Aspect="AspectFit"
SemanticProperties.Description="dot net bot in a race car number eight" />
<Label
Text="Welcome to .NET MAUI Document Scanner SDK"
Style="{StaticResource Headline}"
SemanticProperties.HeadingLevel="Level1" />
<Label
Text="Using IronOCR"
Style="{StaticResource SubHeadline}"
SemanticProperties.HeadingLevel="Level2"
SemanticProperties.Description="Welcome to .NET MAUI Document Scanner SDK" />
<!-- Camera preview -->
<Image x:Name="cameraPreview" />
<!-- Capture button -->
<Button Text="Capture" Clicked="OnCaptureClicked" />
<!-- Text display area -->
<Label x:Name="textLabel"
Text="Recognized Text:"/>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
XML
In diesem Layout:
Wir verwenden ein VerticalStackLayout, um die Steuerelemente vertikal zu stapeln.
Das Image-Steuerelement namens capturedImage wird verwendet, um das aufgenommene Foto anzuzeigen.
Das Button-Steuerelement löst den OnCaptureClicked-Ereignishandler aus, wenn es geklickt wird.
Die Label-Steuerelement mit dem Namen textLabel wird verwendet, um den extrahierten Text anzuzeigen.
Ausgabe
4. Implementierung der Dokumentenscanfunktionalität
Um die Textextraktionsfunktion in unsere .NET MAUI Document Scanning-Anwendung zu integrieren, gehen wir folgendermaßen vor:
Verwenden Sie die Kamera-API: Beginnen Sie damit, die von .NET MAUI bereitgestellte Kamera-API zu nutzen, um Bilddateien direkt innerhalb Ihrer Anwendung zu erfassen.
Bild an IronOCR übergeben: Sobald ein Bild aufgenommen wurde, übergeben Sie es an IronOCR, eine leistungsstarke OCR-Bibliothek, zur Texterkennung. IronOCR bietet robuste Funktionen für die Extraktion von Text aus Bildern mit hoher Genauigkeit.
Extrahierten Text anzeigen: Schließlich zeigen Sie den extrahierten Text im vorgesehenen Bereich der Benutzeroberfläche Ihrer App an. Dadurch können die Benutzer den aus dem erfassten Bild oder QR-Code extrahierten Text einfach anzeigen.
Hier ist der entsprechende Codeausschnitt, mit dem diese Schritte umgesetzt werden:
using IronOcr;
namespace DocumentScanner
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnCaptureClicked(object sender, EventArgs e)
{
License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
try
{
// Request camera permissions
var status = await Permissions.RequestAsync<Permissions.Camera>();
if (status == PermissionStatus.Granted)
{
// Take photo
var photo = await MediaPicker.CapturePhotoAsync();
if (photo != null)
{
// Display captured photo in Image
cameraPreview.Source = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
using (var stream = await photo.OpenReadAsync())
{
// Use a stream from the captured photo for OCR
var ocr = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadImage(stream);
var ocrResult = ocr.Read(ocrInput);
if (string.IsNullOrEmpty(ocrResult.Text))
{
await DisplayAlert("Error", "No Text Detected!", "OK");
}
else
{
await DisplayAlert("Text Detected!", ocrResult.Text, "OK");
// Display extracted text
textLabel.Text = ocrResult.Text;
}
}
}
}
else
{
// Camera permission denied
await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK");
}
}
catch (Exception ex)
{
// Handle exception
await DisplayAlert("Error", ex.Message, "OK");
}
}
}
}
using IronOcr;
namespace DocumentScanner
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnCaptureClicked(object sender, EventArgs e)
{
License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
try
{
// Request camera permissions
var status = await Permissions.RequestAsync<Permissions.Camera>();
if (status == PermissionStatus.Granted)
{
// Take photo
var photo = await MediaPicker.CapturePhotoAsync();
if (photo != null)
{
// Display captured photo in Image
cameraPreview.Source = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
using (var stream = await photo.OpenReadAsync())
{
// Use a stream from the captured photo for OCR
var ocr = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadImage(stream);
var ocrResult = ocr.Read(ocrInput);
if (string.IsNullOrEmpty(ocrResult.Text))
{
await DisplayAlert("Error", "No Text Detected!", "OK");
}
else
{
await DisplayAlert("Text Detected!", ocrResult.Text, "OK");
// Display extracted text
textLabel.Text = ocrResult.Text;
}
}
}
}
else
{
// Camera permission denied
await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK");
}
}
catch (Exception ex)
{
// Handle exception
await DisplayAlert("Error", ex.Message, "OK");
}
}
}
}
Imports IronOcr
Namespace DocumentScanner
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnCaptureClicked(ByVal sender As Object, ByVal e As EventArgs)
License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
Try
' Request camera permissions
Dim status = Await Permissions.RequestAsync(Of Permissions.Camera)()
If status = PermissionStatus.Granted Then
' Take photo
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo IsNot Nothing Then
' Display captured photo in Image
cameraPreview.Source = ImageSource.FromStream(Function() photo.OpenReadAsync().Result)
Using stream = Await photo.OpenReadAsync()
' Use a stream from the captured photo for OCR
Dim ocr = New IronTesseract()
Dim ocrInput As New OcrInput()
ocrInput.LoadImage(stream)
Dim ocrResult = ocr.Read(ocrInput)
If String.IsNullOrEmpty(ocrResult.Text) Then
Await DisplayAlert("Error", "No Text Detected!", "OK")
Else
Await DisplayAlert("Text Detected!", ocrResult.Text, "OK")
' Display extracted text
textLabel.Text = ocrResult.Text
End If
End Using
End If
Else
' Camera permission denied
Await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK")
End If
Catch ex As Exception
' Handle exception
Await DisplayAlert("Error", ex.Message, "OK")
End Try
End Sub
End Class
End Namespace
$vbLabelText $csharpLabel
Code Erläuterung
Lassen Sie uns den Code Schritt für Schritt aufschlüsseln:
In der Datei MainPage.xaml.cs definieren wir die Methode OnCaptureClicked, die ausgelöst wird, wenn der Benutzer auf die Schaltfläche Erfassen klickt.
Innerhalb der OnCaptureClicked-Methode setzen wir zuerst den IronOCR-Lizenzschlüssel. Dies ist notwendig, um die IronOCR-Bibliothek zu verwenden. Ersetzen Sie "YOUR-LICENSE-KEY-HERE" durch Ihren tatsächlichen Lizenzschlüssel.
Dann fordern wir Kameraberechtigungen an, indem wir Permissions.RequestAsync()verwenden. Dadurch wird sichergestellt, dass die App über die erforderlichen Berechtigungen für den Zugriff auf die Kamera des Geräts verfügt.
Wir verwenden MediaPicker.CapturePhotoAsync(), um ein Foto mit der Kamera des Geräts aufzunehmen. Wenn ein Foto erfolgreich aufgenommen wird, zeigen wir es in einem Image-Steuerelement namens cameraPreview an.
Wir öffnen einen Stream des aufgenommenen Fotos und verwenden ihn als Eingabe für die OCR mit IronOCR. Wir erstellen eine Instanz von IronTesseract, laden den Bild-Stream in ein OcrInput-Objekt und rufen dann die Read-Methode auf, um OCR durchzuführen.
Wenn der Text erfolgreich extrahiert wird, zeigen wir ihn in einem Label-Steuerelement mit dem Namen textLabel an. Wenn kein Text erkannt wird, zeigen wir eine Fehlermeldung mit DisplayAlert an.
Für die umfassendere Nutzung von IronOCR und weitere Code-Details besuchen Sie diese Seite mit Code-Beispielen.
5. Testen der Dokumentenscanner-App
Führen Sie die App auf verschiedenen Plattformen (Android, iOS und Windows) aus, um die plattformübergreifende Kompatibilität sicherzustellen.
Testen Sie verschiedene Szenarien, z. B. das Scannen von Dokumenten mit unterschiedlichen Schriftarten, Größen und Ausrichtungen.
Überprüfen Sie, ob der extrahierte Text korrekt ist und auf der Benutzeroberfläche richtig angezeigt wird.
Ausgabe - Gescanntes Dokument ohne Text
So verwenden Sie ein Document Scanner SDK in einer .NET MAUI-Anwendung: Abbildung 5 - Ausgabedatei der gescannten PDF-Erstellung
Ausgabe - Gescanntes Dokument mit Text
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie Sie IronOCR Document Scanner SDK in .NET MAUI verwenden können. Anwendungen zum Scannen von Dokumenten haben zahlreiche praktische Anwendungen, von der Digitalisierung von Papierdokumenten bis zur Extraktion gespeicherter Informationen aus Quittungen und Rechnungen. Mit den leistungsstarken Funktionen von IronOCR und der Flexibilität von .NET MAUI können Sie funktionsreiche Dokumentenscanner-Anwendungen für verschiedene Anwendungsfälle erstellen. Experimentieren Sie mit verschiedenen Funktionen, erkunden Sie zusätzliche Bibliotheken und verbessern Sie Ihre Fähigkeiten, um noch beeindruckendere Anwendungen zu erstellen.
Für detailliertere Informationen zu den Fähigkeiten von IronOCR besuchen Sie bitte diese Dokumentations-Seite.
IronOCR bietet eine kostenlose Testversion, um die vollständige Funktionalität im kommerziellen Modus auszuprobieren. Seine dauerhafte Lite-Lizenz beginnt ab $749. Laden Sie die Bibliothek von der DownloadSeite herunter und probieren Sie es aus.
Jordi beherrscht vor allem Python, C# und C++. Wenn er seine Fähigkeiten bei Iron Software nicht einsetzt, programmiert er Spiele. Durch seine Mitverantwortung für Produkttests, Produktentwicklung und Forschung trägt Jordi wesentlich zur kontinuierlichen Produktverbesserung bei. Die vielseitigen Erfahrungen, die er sammelt, bieten ihm immer wieder neue Herausforderungen, und er sagt, dass dies einer seiner Lieblingsaspekte bei Iron Software ist. Jordi wuchs in Miami, Florida, auf und studierte Informatik und Statistik an der University of Florida.
< PREVIOUS Schritte zur Erstellung von Barcode Scanner API für WEB Anwendungen
NÄCHSTES > Erstellen einer Razor Barcode Generator Web App