在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
随着移动技术的兴起,Scanbot SDK 和 Native SDK 等文档扫描应用程序已成为个人和企业不可或缺的工具或解决方案专家。在本教程中,我们将探讨如何使用最新版本的 .NET 多平台应用程序用户界面创建文档扫描仪应用程序 (毛伊岛) 和功能强大的 OCR 软件 IronOCR (光学字符识别) .NET的MAUI库。.NET MAUI 可简化 Android 等跨平台移动应用程序的创建,确保在最终用户设备上的无缝部署。本指南结束时,您将能够开发自己的文档扫描仪 SDK 应用程序,轻松地从图像和扫描文件中提取文本。
1.安装 IronOCR# C 库,以使用文档扫描仪 SDK。
2.使用必要的控件设计 .NET MAUI 表单。
3.使用 MediaPicker.CapturePhotoAsync 方法捕获相框。
4.将捕获的照片转换为流。
5.将流传递给 OcrInput LoadImage方法。
6.使用 IronTesseract Read方法执行 OCR。
7.使用 OcrResult Text属性显示文档文本。
IronOCR 是一种先进的光学字符识别技术 (光学字符识别) 该软件由 Iron Software, LLC 开发,旨在准确高效地将图像和扫描文档转换为可编辑文本。OCR 技术彻底改变了企业处理文档的方式,使从扫描文档、PDF 和图像等各种来源提取有价值信息变得更加容易。
IronOCR 凭借其先进的功能、强大的性能和易于集成的特点,在 OCR 解决方案中脱颖而出。无论您是希望将 OCR 功能集成到应用程序中的开发人员,还是希望简化数据生成的文档管理流程的企业,IronOCR 都能为您提供全面的解决方案。
以下是 IronOCR 的一些重要关键功能:
高准确性: IronOCR 采用了最先进的算法和机器学习技术,在文本识别方面具有极高的准确性。它能从复杂的文档中准确提取文本,包括 QR 低分辨率或劣质扫描的图像。
多语言支持: IronOCR 的突出特点之一是其广泛的语言支持。它可以识别超过 127 种语言的文本,适合在不同语言环境下运营的企业。
图像预处理: 为提高准确性,IronOCR 提供各种图像预处理功能,如降噪、对比度调整和纠偏。这些预处理技术有助于改善 OCR 结果,尤其是在处理扭曲或不完美的图像时。
支持多种文件格式: IronOCR 支持多种文件格式,包括 TIFF、JPEG、PNG 和 PDF。这种灵活性使用户可以处理不同来源的文件,而不必担心兼容性问题。
定制选项: 开发人员可以根据自己的具体要求定制 IronOCR 的行为。无论是对识别参数进行微调,还是与现有工作流程进行整合,IronOCR 都具有高度的灵活性和定制性。
快速、可扩展: IronOCR 对性能进行了优化,即使从海量文档中也能快速提取文本。无论是处理少量文档还是处理海量文档库,其可扩展架构都能确保无缝运行。
与.NET应用程序集成: IronOCR与.NET应用程序无缝集成,为开发人员提供了易于使用的应用程序接口(API)和库,以便将OCR功能集成到他们的软件项目中。这种紧密集成简化了开发过程,加快了 OCR 应用程序的上市速度。
在系统中安装 Visual Studio 2022 最新版本,并带有 .NET MAUI 工作负载。
右键单击 Visual Studio 中的解决方案。
让我们从设计 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>
在此布局中
要将文本提取功能集成到我们的 .NET MAUI 文档扫描应用程序中,我们将遵循以下步骤:
Utilize the Camera API:首先利用 .NET MAUI 提供的相机 API,直接在应用程序中捕获图像文件。
将图像传给 IronOCR:捕获图像后,将其传递给功能强大的 OCR 库 IronOCR 进行文本提取。IronOCR 提供了强大的功能,可高精度地从图像中提取文本。
下面是实现这些步骤的相应代码片段:
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
让我们逐步分解代码:
有关 IronOCR 的更多强大用法和代码详情,请访问此处 代码示例 page.
测试不同的场景,例如扫描不同字体、大小和方向的文档。
通过本教程,您已经学会了如何在 .NET MAUI 中使用 IronOCR 文档扫描仪 SDK。文档扫描应用程序有许多实际应用,从纸质文档数字化到从收据和发票中提取存储信息。借助 IronOCR 的强大功能和 .NET MAUI 的灵活性,您可以构建功能丰富的文档扫描仪应用程序,以满足各种用例。尝试不同的功能,探索更多的库,不断磨练自己的技能,创建更多令人印象深刻的应用程序。
有关 IronOCR 功能的更多详细信息,请访问以下网站 文件 page.
IronOCR 提供了一个 免费试用 以测试其商业模式下的全部功能。其永久精简版 许可证 749 美元起。下载资料库 下载 页,试试看。