フッターコンテンツにスキップ
IRONBARCODEの使用

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

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

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

  1. ドキュメントスキャナーSDKを使用するために、IronOCR C#ライブラリをインストールします。
  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アプリケーションにスムーズに統合され、OCR機能を組み込むための使いやすいAPIを提供します。 このため、開発が容易になり、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でソリューションを右クリックします。
    • "Manage NuGet Packages for Solution"を選択し、ブラウズタブで"IronOCR"を検索します。

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

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

3. UIの設計

まず、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という名前のImageコントロールは、キャプチャされた写真を表示するために使用されます。
  • ButtonコントロールはクリックされるとOnCaptureClickedイベントハンドラをトリガーします。
  • textLabelという名前のLabelコントロールは、抽出されたテキストを表示するために使用されます。

出力

.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 Imageコントロールに表示されます。
  • 撮影された写真からストリームが開かれ、IronOCRに入力として使用され、IronTesseractインスタンスを作成し、画像ストリームをOcrInputオブジェクトにロードし、OCRを実行するためにReadメソッドを呼び出します。 成功すると、抽出されたテキストはtextLabelコントロールに表示されます。 テキストが検出されない場合、DisplayAlertを使用してエラーメッセージが表示されます。

IronOCRや追加のコードサンプルについての詳細な探求のために、このコード例ページを訪問してください。

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

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

出力 - 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は、商業モードで完全な機能をテストできる無料の試用版を提供しています。 その永続的なライトライセンスは$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 ライブラリが含まれます。

プラットフォーム間でドキュメントスキャナーアプリの互換性をどのようにテストできますか?

.NET MAUI のクロスプラットフォームの機能を活用して、Android、iOS、および Windows デバイスに展開することで、テキスト抽出の機能と精度を確認し、ドキュメントスキャナーアプリをプラットフォーム全体でテストできます。

Jordi Bardia
ソフトウェアエンジニア
Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。