跳過到頁腳內容
使用IRONBARCODE

如何在.NET MAUI應用程式中使用文件掃描SDK

隨著移動技術的興起,像Scanbot SDK和Native SDK這樣的文件掃描應用程序已經成為個人和企業不可或缺的工具。 在本教程中,我們將探索如何使用最新版本的.NET多平台應用程式UI(MAUI)和IronOCR這個強大的.NET光學字符識別(OCR)庫創建文件掃描應用程序。 .NET MAUI簡化了跨平台移動應用程式的創建,確保在如Android等設備上的無縫部署。 完成本指南後,您將能夠開發自己的文件掃描SDK應用程序,輕鬆地從圖片和掃描文件中提取文本。

如何在.NET MAUI應用程式中使用文件掃描SDK

  1. 安裝IronOCRC#庫以使用文件掃描SDK。
  2. 設計具備必要控制項的.NET MAUI表單。
  3. 使用MediaPicker.CapturePhotoAsync方法拍照。
  4. 將捕獲的照片轉換為Stream
  5. 將流傳遞給OcrInput的LoadImage方法。
  6. 使用IronTesseract的Read方法進行光學字符識別(OCR)。
  7. 使用OcrResult的Text屬性顯示文件文本。

IronOCR - C#的OCR庫

IronOCR是由Iron Software, LLC開發的尖端光學字符識別(OCR)軟件,旨在準確、高效地將圖像和掃描的文件轉換為可編輯文本。 OCR技術已經革新了企業處理文件的方式,使從掃描文件、PDF和圖片等多種來源提取寶貴信息變得更加容易。

IronOCR在OCR解決方案中脫穎而出,是因為其先進的功能、強大的性能和易於集成。 無論您是希望在應用程序中集成OCR功能的開發者,還是希望簡化文件管理流程的企業,IronOCR都提供了全面的解決方案。

IronOCR的主要特點

  1. 高準確度:IronOCR使用最先進的算法和機器學習技術,在文本識別方面達到非凡的準確性。 它能夠從包括低解析度或低質量掃描的複雜文檔中準確提取文字。
  2. 多語言支持:IronOCR支持超過125種語言的文本識別,使其適合在多元語言環境中運營的企業。
  3. 圖像預處理:IronOCR提供各種圖像預處理功能,如降噪、對比度調整和去斜,以提高準確性。 這些技術改進了OCR結果,特別是在失真或不完整圖像的情況下。
  4. 支持多種文件格式:IronOCR支持多種文件格式,包括TIFF、JPEG、PNG和PDF,確保與不同文件來源的兼容性。
  5. 自定義選項:開發者可以自定義IronOCR的行為以滿足特定需求,提供識別參數和工作流程集成的靈活性。
  6. 快速和可擴展:為性能優化,IronOCR能快速從大批量文檔中提取文本。 其可擴展的架構確保無論文檔量如何,都能無縫運行。
  7. 與.NET應用程序集成:IronOCR無縫集成到.NET應用程序中,提供易於使用的API來加入OCR功能。 這簡化了開發並加快了OCR使能應用程序的上市時間。
  8. 文件分類和數據提取:IronOCR提供超越基本文本識別的進階功能,用於文件分類和數據提取,識別如姓名、地址或發票號碼等具體數據字段。

必要條件

  • C#編程的基本知識。
  • 安裝了.NET MAUI工作負載的Visual Studio 2022。
  • 通過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>
XML

在這個佈局中:

  • 我們使用VerticalStackLayout來垂直堆疊控制項。
  • 被命名為cameraPreviewImage控制項用於顯示捕獲的照片。
  • Button控制項被點擊時,觸發OnCaptureClicked事件處理程序。
  • 被命名為textLabelLabel控制項用於顯示提取文本。

輸出

如何在.NET MAUI應用程式中使用文件掃描SDK:圖4 - MainPage.xaml輸出

4. 實現文件掃描功能

要在我們的.NET MAUI文件掃描應用中整合文本提取功能,我們將按照以下步驟進行:

  1. 利用攝像頭API:利用.NET MAUI提供的攝像頭API,直接在您的應用程序中捕獲圖像文件。
  2. 將圖像傳遞給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
$vbLabelText   $csharpLabel

代碼解釋

讓我們逐步解析代碼:

  • 在MainPage.xaml.cs文件中,定義了OnCaptureClicked方法來處理捕獲按鈕的點擊事件。
  • 設置IronOCR的許可證密鑰,這是使用IronOCR庫所需的。 將"YOUR-LICENSE-KEY-HERE"替換為您的實際許可證密鑰。
  • 使用Permissions.RequestAsync()請求攝像頭權限,以確保應用程序可以訪問設備的攝像頭。
  • 調用MediaPicker.CapturePhotoAsync()使用攝像頭拍攝照片。 如果成功,該照片將顯示在cameraPreview圖片控制項中。
  • 打開來自捕獲照片的流並用作IronOCR的輸入,創建一個IronTesseract實例,將圖像流加載到一個OcrInput對象中,然後調用Read方法進行光學字符識別(OCR)。 如果成功,提取的文本顯示在textLabel控制項中。 如果未檢測到文本,將使用DisplayAlert顯示錯誤消息。

要進一步探索IronOCR和其他代碼示例,請訪問這個代碼示例頁面。

5. 測試文件掃描應用程式

  • 在各種平台(如Android、iOS和Windows)上運行應用程式,以確保跨平台兼容性。
  • 測試不同的場景,例如掃描具有不同字體、大小和方向的文件。
  • 驗證提取的文本是否準確,並且正確顯示在用戶界面上。

輸出 - Scanned Document without Text

如何在.NET MAUI應用程式中使用文件掃描SDK:圖5 - 掃描PDF創建輸出

輸出 - Scanned Document with Text

如何在.NET MAUI應用程式中使用文件掃描SDK:圖6 - 掃描文件

結論

通過遵循本教程,您已經學會了如何在.NET MAUI中使用IronOCR文件掃描SDK。 文件掃描應用程序有許多實際應用,例如將紙質文件數位化,或從收據和發票中提取存儲的信息。 利用IronOCR的強大功能和.NET MAUI的靈活性,您可以構建功能豐富的文件掃描應用程序,以適應各種使用案例。 嘗試不同的功能,探索附加庫,繼續提升您的技能以創建更為精彩的應用程式。

有關IronOCR功能的更詳細信息,請訪問此文檔頁面。

IronOCR提供免費試用以商業模式測試其完整功能。 其永久lite許可證從$799起。 從下載頁面下載庫並試試。

常見問題解答

如何使用 .NET MAUI 創建文檔掃描應用?

您可以通過利用 IronOCR 進行光學字符識別來使用 .NET MAUI 創建文檔掃描應用。首先透過 Visual Studio 的 NuGet 套件管理器安裝 IronOCR,然後使用 .NET MAUI 設計您的應用 UI,並使用 IronTesseract 的 Read 方法實現掃描功能。

使用 IronOCR 創建文檔掃描應用有哪些好處?

IronOCR 提供高精度的文字識別、多語言支持和與各種文件格式的兼容性。它還提供圖像預處理、快速性能和與 .NET 應用的無縫整合,這使其成為文檔掃描應用的強大選擇。

如何在 .NET MAUI 項目中安裝 IronOCR?

要在 .NET MAUI 項目中安裝 IronOCR,請打開 Visual Studio 並使用 NuGet 套件管理器搜索 'IronOCR'。將包添加到您的項目中以開始使用其 OCR 功能。

在文檔掃描應用中捕獲和處理圖像需要哪些步驟?

此過程涉及使用MediaPicker捕獲圖像,將其轉換為流格式,然後使用 IronOCR 的 IronTesseract 進行文本提取。提取的文本可以顯示在應用的用戶界面中。

IronOCR支持哪種文件格式進行 OCR 處理?

IronOCR 支持包括 TIFF、JPEG、PNG 和 PDF 在內的多種文件格式,允許自由的文檔掃描和文本提取功能。

IronOCR 能支持多語言的 OCR 處理嗎?

可以,IronOCR 支持超過 125 種語言的 OCR,適用於需要各種語言環境下的文本識別的應用。

.NET MAUI 如何促進跨平台開發?

.NET MAUI 使開發人員能夠使用單一代碼庫構建跨平台移動應用,允許無縫部署到 Android、iOS 和 Windows 設備。

開發 .NET MAUI 文檔掃描應用的先決條件是什麼?

先決條件包括 C# 編程的基本知識、具有 .NET MAUI 工作負載的 Visual Studio 2022,以及從 NuGet 安裝的 IronOCR 庫。

如何測試我的文檔掃描應用在不同平台上的兼容性?

您可以通過將文檔掃描應用部署到 Android、iOS 和 Windows 設備上進行測試,以確保 .NET MAUI 的跨平台功能,確保功能和文本提取的準確性。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。