使用IRONBARCODE

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK

发布 2024年四月29日
分享:

随着移动技术的兴起,Scanbot SDK 和 Native SDK 等文档扫描应用程序已成为个人和企业不可或缺的工具或解决方案专家。在本教程中,我们将探讨如何使用最新版本的 .NET 多平台应用程序用户界面创建文档扫描仪应用程序 (毛伊岛) 和功能强大的 OCR 软件 IronOCR (光学字符识别) .NET的MAUI库。.NET MAUI 可简化 Android 等跨平台移动应用程序的创建,确保在最终用户设备上的无缝部署。本指南结束时,您将能够开发自己的文档扫描仪 SDK 应用程序,轻松地从图像和扫描文件中提取文本。

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK

1.安装 IronOCR# C 库,以使用文档扫描仪 SDK。

2.使用必要的控件设计 .NET MAUI 表单。

3.使用 MediaPicker.CapturePhotoAsync 方法捕获相框。

4.将捕获的照片转换为

5.将流传递给 OcrInput LoadImage方法。

6.使用 IronTesseract Read方法执行 OCR。

7.使用 OcrResult Text属性显示文档文本。

IronOCR - C#OCR 库

IronOCR 是一种先进的光学字符识别技术 (光学字符识别) 该软件由 Iron Software, LLC 开发,旨在准确高效地将图像和扫描文档转换为可编辑文本。OCR 技术彻底改变了企业处理文档的方式,使从扫描文档、PDF 和图像等各种来源提取有价值信息变得更加容易。

IronOCR 凭借其先进的功能、强大的性能和易于集成的特点,在 OCR 解决方案中脱颖而出。无论您是希望将 OCR 功能集成到应用程序中的开发人员,还是希望简化数据生成的文档管理流程的企业,IronOCR 都能为您提供全面的解决方案。

IronOCR 的主要功能

以下是 IronOCR 的一些重要关键功能:

  1. 高准确性: IronOCR 采用了最先进的算法和机器学习技术,在文本识别方面具有极高的准确性。它能从复杂的文档中准确提取文本,包括 QR 低分辨率或劣质扫描的图像。

  2. 多语言支持: IronOCR 的突出特点之一是其广泛的语言支持。它可以识别超过 127 种语言的文本,适合在不同语言环境下运营的企业。

  3. 图像预处理: 为提高准确性,IronOCR 提供各种图像预处理功能,如降噪、对比度调整和纠偏。这些预处理技术有助于改善 OCR 结果,尤其是在处理扭曲或不完美的图像时。

  4. 支持多种文件格式: IronOCR 支持多种文件格式,包括 TIFF、JPEG、PNG 和 PDF。这种灵活性使用户可以处理不同来源的文件,而不必担心兼容性问题。

  5. 定制选项: 开发人员可以根据自己的具体要求定制 IronOCR 的行为。无论是对识别参数进行微调,还是与现有工作流程进行整合,IronOCR 都具有高度的灵活性和定制性。

  6. 快速、可扩展: IronOCR 对性能进行了优化,即使从海量文档中也能快速提取文本。无论是处理少量文档还是处理海量文档库,其可扩展架构都能确保无缝运行。

  7. 与.NET应用程序集成: IronOCR与.NET应用程序无缝集成,为开发人员提供了易于使用的应用程序接口(API)和库,以便将OCR功能集成到他们的软件项目中。这种紧密集成简化了开发过程,加快了 OCR 应用程序的上市速度。

  8. 文档分类和数据提取: 除了基本的文本识别功能外,IronOCR 还为文档分类和数据提取提供了高级功能。它可以识别文档中的特定数据字段,如姓名、地址或发票号码,从而实现自动数据提取和分析。

先决条件

  • C# 编程基础知识
  • 在系统中安装 Visual Studio 2022 最新版本,并带有 .NET MAUI 工作负载。

  • 通过 NuGet 软件包管理器安装了 IronOCR 软件包库。

1.设置 .NET MAUI 项目

  • 打开 Visual Studio 2022 并创建一个新的 .NET MAUI 应用程序项目。

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK:图 1 - .NET MAUI 应用程序项目

  • 选择合适的项目名称并配置项目设置。

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK:图 2 - 项目配置

  • 确保安装了开发目标平台设备所需的 Android 和 iOS SDK。

2.安装 IronOCR 库

  • 右键单击 Visual Studio 中的解决方案。

    • 选择 "管理解决方案的 NuGet 包",然后在 "浏览 "选项卡中搜索 "IronOCR"。

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK:图 3 - IronOCR NuGet 软件包

  • 在项目中安装 IronOCR 库。

3.设计用户界面

让我们从设计 MainPage.xaml 的布局开始。我们将创建一个简单的布局,其中包含一个用于显示捕获照片的图像控件、一个用于拍照的捕获按钮和一个用于显示提取文本的标签。

下面是 MainPage.xaml 的 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>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<?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>
VB   C#

在此布局中

  • 我们使用 VerticalStackLayout 来垂直堆叠控件。
  • 名为capturedImageImage控件用于显示捕获的照片。
  • 当点击按钮控件时,会触发OnCaptureClicked事件处理程序。
  • 名为textLabelLabel控件用于显示提取的文本。

输出

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK:图 4 - MainPage.xaml 输出

4.实施文件扫描功能

要将文本提取功能集成到我们的 .NET MAUI 文档扫描应用程序中,我们将遵循以下步骤:

  1. Utilize the Camera API:首先利用 .NET MAUI 提供的相机 API,直接在应用程序中捕获图像文件。

  2. 将图像传给 IronOCR:捕获图像后,将其传递给功能强大的 OCR 库 IronOCR 进行文本提取。IronOCR 提供了强大的功能,可高精度地从图像中提取文本。

  3. 显示提取的文本:最后,在应用程序用户界面的指定区域显示提取的文本。这样,用户就可以轻松查看从捕获的图像或二维码中提取的文本。

下面是实现这些步骤的相应代码片段:

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

代码解释

让我们逐步分解代码:

  • 在 MainPage.xaml.cs 文件中,我们定义了 OnCaptureClicked 方法,当用户单击捕捉按钮时将触发该方法。
  • OnCaptureClicked 方法中,我们首先设置 IronOCR 许可证密钥。这是使用 IronOCR 库所必需的。将"YOUR-LICENSE-KEY-HERE "替换为您的实际许可证密钥。
  • 然后,我们使用 Permissions.RequestAsync请求相机权限。().这样可以确保应用程序拥有访问设备摄像头的必要权限。
  • 我们使用 MediaPicker.CapturePhotoAsync() 使用设备的摄像头捕捉照片。如果成功捕捉到照片,我们就会在名为cameraPreviewImage控件中显示该照片。
  • 我们从捕获的照片中打开一个数据流,并将其作为使用 IronOCR 进行 OCR 的输入。我们创建一个IronTesseract实例,将图像流加载到一个OcrInput对象中,然后调用Read方法执行 OCR。
  • 如果成功提取到文本,我们就会将其显示在名为textLabelLabel控件中。如果没有检测到文本,我们将使用 DisplayAlert 显示错误信息。

有关 IronOCR 的更多强大用法和代码详情,请访问此处 代码示例 page.

5.测试文档扫描仪应用程序

  • 在各种平台上运行应用程序 (安卓、iOS 和 Windows) 以确保跨平台兼容性。
  • 测试不同的场景,例如扫描不同字体、大小和方向的文档。

  • 验证提取的文本是否准确,并在用户界面上正确显示。

输出 - 无文本的扫描文件

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK:图 5 - 扫描 PDF 创建输出

输出 - 带文本的扫描文件

如何在 .NET MAUI 应用程序中使用文档扫描仪 SDK:图 6 - 扫描的文档

结论

通过本教程,您已经学会了如何在 .NET MAUI 中使用 IronOCR 文档扫描仪 SDK。文档扫描应用程序有许多实际应用,从纸质文档数字化到从收据和发票中提取存储信息。借助 IronOCR 的强大功能和 .NET MAUI 的灵活性,您可以构建功能丰富的文档扫描仪应用程序,以满足各种用例。尝试不同的功能,探索更多的库,不断磨练自己的技能,创建更多令人印象深刻的应用程序。

有关 IronOCR 功能的更多详细信息,请访问以下网站 文件 page.

IronOCR 提供了一个 免费试用 以测试其商业模式下的全部功能。其永久精简版 许可证 749 美元起。下载资料库 下载 ,试试看。

< 前一页
创建WEB应用程序的条码扫描器API步骤
下一步 >
创建一个Razor条码生成器Web应用程序

准备开始了吗? 版本: 2024.8 刚刚发布

免费NuGet下载 总下载量: 1,167,541 查看许可证 >