跳過到頁腳內容
使用IRONBARCODE

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

隨著行動技術的興起,Scanbot SDK 和原生 SDK 等文件掃描應用程式已成為個人和企業不可或缺的工具。 在本教學中,我們將探討如何使用最新版本的 .NET 多平台應用程式 UI (MAUI) 和 IronOCR(一個功能強大的 .NET OCR(光學字元辨識)函式庫)來建立一個文件掃描應用程式。 .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) 軟體,旨在準確且有效率地將影像和掃描文件轉換為可編輯的文字。 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#程式設計基礎。
  • 安裝了 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>
XML

在這種佈局中:

  • 我們使用VerticalStackLayout將控制項垂直堆疊起來。
  • 名為cameraPreview 的**影像**控制項用於顯示拍攝的照片。
  • 點選按鈕控制項時,會觸發OnCaptureClicked事件處理程序。
  • 名為textLabel 的**標籤**控制項用於顯示擷取的文字。

輸出

如何在 .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方法來處理 Capture 按鈕的點擊事件。
  • IronOCR 許可證金鑰已設置,這是使用 IronOCR 庫所必需的。 請將&quot;YOUR-LICENSE-KEY-HERE&quot;替換為您的實際許可證金鑰。
  • 使用Permissions.RequestAsync請求相機權限()以確保應用程式可以存取裝置的攝影機。
  • 呼叫MediaPicker.CapturePhotoAsync()來使用相機拍照。 如果成功,照片將顯示在cameraPreview Image 控制項中。
  • 開啟擷取照片的流並將其用作 IronOCR 的輸入,建立一個IronTesseract實例,將影像流載入到OcrInput物件中,並呼叫Read方法執行 OCR。
  • 如果提取成功,則提取的文字將顯示在textLabel控制項中。 如果未偵測到文本,則使用DisplayAlert顯示錯誤訊息。

如需進一步了解 IronOCR 和其他程式碼範例,請造訪此程式碼範例頁面。

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

  • 在各種平台(Android、iOS 和 Windows)上運行該應用程序,以確保跨平台相容性。
  • 測試不同的場景,例如掃描不同字體、大小和方向的文件。
  • 驗證擷取的文字是否準確,並在使用者介面上正確顯示。

輸出 - 無文字的掃描文檔

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

輸出 - 帶有文字的掃描文檔

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

結論

透過本教學課程,您已經學會如何在 .NET MAUI 中使用 IronOCR 文件掃描器 SDK。 文件掃描應用程式有許多實際應用,從將紙本文件數位化到從收據和發票中提取儲存的資訊。 利用 IronOCR 的強大功能和 .NET MAUI 的靈活性,您可以建立功能豐富的文件掃描應用程序,以滿足各種使用情境的需求。 嘗試不同的功能,探索其他庫,不斷磨練你的技能,從而創建更令人印象深刻的應用程式。

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

IronOCR 提供免費試用版,供用戶測試其商業模式下的全部功能。 其永久精簡版授權起價為$799 。 從下載頁面下載庫檔案並試用。

常見問題解答

如何使用 .NET MAUI 建立文件掃描器應用程式?

您可以利用 IronOCR for Optical Character Recognition,使用 .NET MAUI 建立文件掃描器應用程式。首先通過 Visual Studio 中的 NuGet Package Manager 安裝 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# 程式設計的基本知識、Visual Studio 2022 與 .NET MAUI 工作量,以及從 NuGet 安裝的 IronOCR 函式庫。

如何測試我的文件掃描器應用程式在不同平台間的相容性?

您可以利用 .NET MAUI 的跨平台功能,將您的文件掃描器應用程式部署在 Android、iOS 和 Windows 裝置上,進行跨平台測試,以確保文字擷取的功能性和準確性。

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