在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
隨著移動技術的興起,像 Scanbot SDK 和 Native SDK 這樣的文件掃描應用程序已成為個人和企業不可或缺的工具或解決方案專家。在本教程中,我們將探討如何使用最新版本的 .NET 多平台應用 UI 創建文件掃描應用程序。(MAUI)和IronOCR,一個強大的OCR(光學字符識別)適用於 .NET 的函式庫。 .NET MAUI 簡化了跨平台行動應用程式(如 Android)的創建,確保在終端使用者的裝置上無縫部署。透過本指南的學習,您將能夠開發自己的文件掃描器 SDK 應用程式,輕鬆從影像和掃描檔中提取文字。
安裝 IronOCR C# 庫以使用文件掃描 SDK。
設計 .NET MAUI 表單並添加必要的控制項。
使用 MediaPicker.CapturePhotoAsync 方法捕捉相框。
將拍攝的照片轉換為流。
將流傳遞到OcrInput的LoadImage方法。
使用 IronTesseract Read 方法執行 OCR。
IronOCR是先進的光學字符識別(光學字符識別)由 Iron Software, LLC 開發的軟體,旨在準確且高效地將圖像和掃描文件轉換為可編輯文本。 OCR 技術已徹底改變企業處理文件的方式,使從掃描文件、PDF 和圖像等各種來源中提取有價值信息變得更加容易。
IronOCR 在 OCR 解決方案中脫穎而出,由於其先進的功能、強大的性能以及易於整合的特性。 無論您是希望將 OCR 功能整合到應用程式中的開發者,還是尋求精簡數據生成的文件管理流程的企業,IronOCR 都提供全面的解決方案。
以下是 IronOCR 的一些重要功能:
高精度: IronOCR 採用最先進的算法和機器學習技術,以實現卓越的文字識別精度。 它可以準確地從複雜文件中提取文本,包括含有低解析度或品質不佳掃描的圖片。
多語言支援: 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 文件掃描應用程式中,我們將遵循以下步驟:
利用 Camera API:首先透過 .NET MAUI 提供的 Camera API,在您的應用程式內直接捕捉圖像檔案。
傳遞影像至 IronOCR:影像擷取後,將它傳遞至 IronOCR 這個強大的 OCR 庫,以進行文字擷取。 IronOCR 提供強大的功能,能夠以高準確度從圖像中提取文字。
顯示提取的文字:最後,在應用程式使用者介面的指定區域中顯示提取的文字。 這允許使用者輕鬆查看從捕獲的圖像或 QR Code 提取的文字。
以下是實現這些步驟的相應程式碼片段:
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
讓我們逐步分解代碼:
如果文本成功提取,我們會在名為textLabel的Label控制項中顯示它。 如果未檢測到文字,我們會使用DisplayAlert顯示錯誤訊息。
如需更全面地使用 IronOCR 和查看代碼詳情,請訪問此代碼範例頁面。
按照本教程,您已學會如何在 .NET MAUI 中使用 IronOCR 文件掃描器 SDK。 文件掃描應用程式有許多實際應用,包括將紙質文件數位化,以及從收據和發票中提取存儲的信息。 憑藉 IronOCR 的強大功能和 .NET MAUI 的靈活性,您可以構建功能豐富的文檔掃描應用程序,以滿足各種使用情況。 嘗試不同的功能,探索其他庫並不斷提升您的技能,以創建更令人印象深刻的應用程式。
如需了解更多有關 IronOCR 功能的詳細資訊,請造訪此文檔頁面。
IronOCR 提供一個免費試用以在商業模式下測試其完整功能。 它的永久精简版授權起價 $749。從 下載該庫下載頁面並嘗試一下。