IRONBARCODEの使用

.NET MAUIアプリケーションでドキュメントスキャナー SDK を使用する方法

ジョルディ・バルディア
ジョルディ・バルディア
2024年4月29日
共有:

モバイル技術の進化によって、Scanbot SDKやネイティブSDKのようなドキュメントスキャニングアプリは、個人やビジネスにとって不可欠なツールまたはソリューションエキスパートになっています。このチュートリアルでは、最新バージョンの.NET Multi-platform App UI (MAUI) と.NET用の強力なOCR(光学文字認識)ライブラリであるIronOCRを使用して、ドキュメントスキャナーアプリを作成する方法を探ります。 .NET MAUIは、Androidなどのクロスプラットフォームモバイルアプリの作成を簡単にし、最終ユーザーのデバイスにシームレスに展開できるようにします。このガイドが終わるころには、画像やスキャンしたファイルからテキストを抽出できる独自のドキュメントスキャナーSDKアプリを開発できるようになります。

.NET MAUIアプリケーションでドキュメントスキャナー SDK を使用する方法

  1. ドキュメントスキャナーSDKを使用するために IronOCR C# ライブラリをインストールします。

  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の主な機能

以下に、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アプリケーションとシームレスに統合されており、開発者がソフトウェアプロジェクトにOCR機能を組み込むための使いやすいAPIとライブラリを提供します。 この緊密な統合により、開発が簡素化され、OCR対応アプリケーションの市場投入までの時間が短縮されます。

  8. ドキュメント分類とデータ抽出: IronOCRは基本的なテキスト認識を超えて、ドキュメントの分類とデータ抽出のための高度な機能を提供します。 それは、名前、住所、請求書番号などのドキュメント内の特定のデータフィールドを識別し、自動的なデータ抽出および分析を可能にします。

前提条件

  • 基本的なC#プログラミングの知識。
  • システムに .NET MAUI ワークロードがインストールされている最新バージョンの Visual Studio 2022。
  • IronOCRパッケージライブラリは、NuGetパッケージマネージャーを通じてインストールされます。

1. .NET MAUIプロジェクトの設定

  • Visual Studio 2022を開き、新しい.NET MAUIアプリプロジェクトを作成します。

    .NET MAUI アプリケーションでドキュメントスキャナー SDK を使用する方法: 図 1 - .NET MAUI アプリプロジェクト

  • 適切なプロジェクト名を選択し、プロジェクト設定を構成してください。

    .NET MAUIアプリケーションでドキュメントスキャナーSDKを使用する方法: 図2 - プロジェクト構成

  • ターゲットプラットフォームデバイスの開発のために、必要なAndroidおよびiOS SDKがインストールされていることを確認してください。

IronOCRライブラリのインストール

  • Visual Studioでソリューションを右クリックします。

    • 「ソリューションのNuGetパッケージの管理」を選択し、参照タブで「IronOCR」を検索します。

    .NET MAUI アプリケーションでドキュメントスキャナー SDK を使用する方法: 図3 - IronOCR NuGet パッケージ

  • IronOCRライブラリをプロジェクトにインストールします。

ユーザーインターフェースの設計

まず、MainPage.xamlのレイアウトを設計しましょう。 シンプルなレイアウトを作成し、キャプチャした写真を表示するための画像コントロール、写真を撮影するためのCaptureボタン、抽出されたテキストを表示するためのラベルを配置します。

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

このレイアウトでは:

  • コントロールを垂直に積み重ねるために、VerticalStackLayoutを使用します。
  • capturedImage という名前のImageコントロールは、撮影した写真を表示するために使用されます。
  • Button コントロールはクリックされると OnCaptureClicked イベントハンドラーをトリガーします。
  • LabelコントロールであるtextLabelは、抽出されたテキストを表示するために使用されます。

出力

.NET MAUI アプリケーションでドキュメントスキャナー SDK を使用する方法: 図 4 - MainPage.xaml 出力

ドキュメントスキャン機能の実装

.NET MAUIドキュメントスキャンアプリにテキスト抽出機能を統合するために、次のステップに従います:

  1. カメラ API を活用する: .NET MAUI が提供するカメラ API を活用して、アプリケーション内で直接画像ファイルをキャプチャすることから始めます。

  2. 画像をIronOCRに渡す: 画像がキャプチャされたら、テキスト抽出のために強力なOCRライブラリであるIronOCRに渡します。 IronOCRは高い精度で画像からテキストを抽出するための強力な機能を提供します。

  3. 抽出されたテキストを表示: 最後に、アプリのユーザーインターフェースの指定されたエリアに抽出されたテキストを表示します。 これにより、ユーザーはキャプチャされた画像やQRコードから抽出されたテキストを簡単に表示することができます。

    以下は、これらの手順を実装するための対応するコードスニペットです。

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 メソッドを定義します。
  • OnCaptureClicked メソッド内で、まず IronOCR ライセンスキーを設定します。 これは IronOCR ライブラリを使用するために必要です。 "YOUR-LICENSE-KEY-HERE" を実際のライセンスキーに置き換えてください。
  • 次に、Permissions.RequestAsync() を使用してカメラの権限を要求します。 これにより、アプリがデバイスのカメラにアクセスするために必要な権限を持つことが保証されます。
  • デバイスのカメラを使用して写真を撮影するために、MediaPicker.CapturePhotoAsync()を使用します。 写真が正常にキャプチャされた場合、cameraPreview という名前のImageコントロールに表示します。
  • キャプチャされた写真からストリームを開き、それをIronOCRを使用したOCRの入力として使用します。 私たちはIronTesseractのインスタンスを作成し、画像ストリームをOcrInputオブジェクトに読み込み、その後Readメソッドを呼び出してOCRを実行します。
  • テキストが正常に抽出されると、それをtextLabelというLabelコントロールに表示します。 テキストが検出されない場合、DisplayAlertを使用してエラーメッセージを表示します。

    IronOCRをより強力に使用し、コードの詳細を確認するには、このコード例ページをご覧ください。

ドキュメントスキャナーアプリのテスト

  • クロスプラットフォームの互換性を確保するために、さまざまなプラットフォーム(Android、iOS、およびWindows)でアプリを実行します。
  • 異なるフォント、サイズ、および向きの文書をスキャンするなど、さまざまなシナリオをテストしてください。
  • 抽出されたテキストが正確で、UIに正しく表示されていることを確認してください。

出力 - テキストなしのスキャンドキュメント

.NET MAUI アプリケーションでドキュメントスキャナーSDKを使用する方法: 図5 - スキャンしたPDFの作成出力

出力 - テキストを含むスキャン済み文書

.NET MAUIアプリケーションでドキュメントスキャナーSDKを使用する方法: 図6 - スキャンされたドキュメント

結論

このチュートリアルに従うことで、.NET MAUIでIronOCRドキュメントスキャナーSDKの使用方法を学びました。 ドキュメントスキャンアプリには、紙のドキュメントのデジタル化や、領収書や請求書から保存された情報を抽出するなど、実用的な用途が数多くあります。 IronOCR の強力な機能と .NET MAUI の柔軟性により、さまざまなユースケースに対応する多機能なドキュメントスキャナーアプリを構築できます。 さまざまな機能を試し、追加のライブラリを探求し、さらに技術を磨いて、より印象的なアプリを作成してください。

IronOCRの機能に関するより詳細な情報は、こちらのドキュメントページをご覧ください。

IronOCRはその完全な機能を商用モードで試すための無料トライアルを提供しています。 その永久的なライトライセンスは$749から開始します。 ダウンロードページからライブラリをダウンロードしてお試しください。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
WEBアプリケーションのためのバーコードスキャナー API を作成するための手順
次へ >
Razorバーコード生成Webアプリの作成