.NET MAUIアプリケーションでのドキュメントスキャナーSDKの使用方法
モバイル技術の進化により、Scanbot SDKやネイティブSDKのようなドキュメントスキャンアプリは、個人および企業にとって不可欠なツールとなっています。 このチュートリアルでは、最新バージョン for .NETマルチプラットフォームApp UI(MAUI)と.NET用の強力なOCR(光学文字認識)ライブラリであるIronOCRを使用してドキュメントスキャナーアプリを作成する方法を探ります。 .NET MAUIは、クロスプラットフォームのモバイルアプリの作成を簡素化し、Androidなどのデバイスでのシームレスなデプロイメントを保証します。 このガイドの終わりまでに、画像やスキャンファイルから簡単にテキストを抽出できる独自のドキュメントスキャナーSDKアプリを開発できるようになります。
.NET MAUIアプリケーションでのドキュメントスキャナーSDKの使用方法
- ドキュメントスキャナーSDKを使用するために、IronOCR C#ライブラリをインストールします。
- 必要なコントロールを備えた.NET MAUIフォームを設計します。
- MediaPicker.CapturePhotoAsyncメソッドを使用して写真を撮影します。
- 撮影された写真をStreamに変換します。
- ストリームをOcrInputのLoadImageメソッドに渡します。
- IronTesseractのReadメソッドを使用してOCRを実行します。
- OcrResultのTextプロパティを使用してドキュメントテキストを表示します。
IronOCR - C# OCR ライブラリ
IronOCRは、Iron Software, LLCによって開発された最先端の光学文字認識(OCR)ソフトウェアで、画像やスキャンドキュメントを正確かつ効率的に編集可能なテキストに変換するように設計されています。 OCR技術は、スキャンドキュメント、PDF、画像などのさまざまな情報源から貴重な情報を抽出するのを容易にし、企業がドキュメントを処理する方法を革命的に変えました。
IronOCRは、その高度な機能、堅牢なパフォーマンス、簡単な統合によってOCRソリューションの中で注目を集めています。 アプリケーションにOCR機能を組み込みたい開発者やドキュメント管理プロセスを効率化したい企業にとって、IronOCRは包括的なソリューションを提供します。
IronOCRの主な機能
- 高精度: IronOCRは、最先端のアルゴリズムと機械学習技術を使用して、テキスト認識において卓越した精度を達成します。 それは、低解像度や品質の低いスキャンを含む複雑なドキュメントから正確にテキストを抽出できます。
- 多言語サポート: IronOCRは125以上の言語でのテキスト認識をサポートしており、多様な言語環境で事業を展開する企業に適しています。
- 画像前処理: IronOCRは、ノイズ除去、コントラスト調整、傾き補正など、精度を向上させるためのさまざまな画像前処理機能を提供します。 これらの技術は、特に歪んだり不完全な画像に対するOCR結果を改善します。
- さまざまなファイル形式のサポート: IronOCRは、TIFF、JPEG、PNG、PDFなど多種多様なファイル形式をサポートしており、さまざまなドキュメントソースに対応可能です。
- カスタマイズオプション: 開発者はIronOCRの動作を特定の要件に合わせてカスタマイズでき、認識パラメータとワークフローの統合において柔軟性を提供します。
- 高速かつスケーラブル: パフォーマンスに最適化されており、IronOCRは大量のドキュメントから迅速にテキストを抽出します。 そのスケーラブルなアーキテクチャは、ドキュメント量に関係なくシームレスな操作を保証します。
- .NETアプリケーションとの統合: IronOCRは.NETアプリケーションにスムーズに統合され、OCR機能を組み込むための使いやすいAPIを提供します。 このため、開発が容易になり、OCR対応アプリケーションの市場投入時間が短縮されます。
- ドキュメント分類とデータ抽出: 基本的なテキスト認識を超えて、IronOCRは名前、住所、請求書番号など、特定のデータフィールドを識別するドキュメント分類とデータ抽出の高度な機能を提供します。
前提条件
- 基本的なC#プログラミングの知識。
- .NET MAUIワークロードをインストールしたVisual Studio 2022。
- NuGetパッケージマネージャを介してインストールされたIronOCRパッケージライブラリ。
1. .NET MAUIプロジェクトのセットアップ
- Visual Studio 2022を開き、新しい.NET MAUIアプリプロジェクトを作成します。

- 適切なプロジェクト名を選択し、プロジェクト設定を構成します。

- ターゲットプラットフォームデバイス開発用に必要なAndroidおよびiOS SDKをインストールしていることを確認します。
2. IronOCRライブラリのインストール
- Visual Studioでソリューションを右クリックします。
- "Manage NuGet Packages for Solution"を選択し、ブラウズタブで"IronOCR"を検索します。

- プロジェクトに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>
このレイアウトでは:
- コントロールを垂直にスタックさせるためにVerticalStackLayoutを使用します。
- cameraPreviewという名前のImageコントロールは、キャプチャされた写真を表示するために使用されます。
- ButtonコントロールはクリックされるとOnCaptureClickedイベントハンドラをトリガーします。
- textLabelという名前のLabelコントロールは、抽出されたテキストを表示するために使用されます。
出力

4. ドキュメントスキャン機能の実装
.NET MAUIドキュメントスキャンアプリにテキスト抽出機能を統合するために、次のステップに従います:
- カメラAPIを利用: アプリケーション内で直接画像ファイルをキャプチャするために、.NET MAUIが提供するカメラAPIを活用します。
- 画像をIronOCRに渡します: 画像がキャプチャされたら、IronOCRに渡してその強力な機能を利用してテキスト抽出を行います。
- 抽出されたテキストを表示: 抽出されたテキストをユーザーインターフェイス上の指定されたエリアに表示し、ユーザーに閲覧させます。
これらのステップを実装する対応するコードスニペットはこちらです:
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 NamespaceImports 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コードの説明
コードをステップバイステップで分解します:
- MainPage.xaml.csファイルでは、OnCaptureClickedメソッドがキャプチャボタンのクリックイベントを処理するために定義されています。
- IronOCRライブラリを使用するのに必要なIronOCRのライセンスキーが設定されます。 実際のライセンスキーを
"YOUR-LICENSE-KEY-HERE"に置き換えてください。 - アプリがデバイスのカメラにアクセスできるようにするために、Permissions.
RequestAsync<Permissions.Camera>()を使用してカメラ権限を要求します。 MediaPicker.CapturePhotoAsync()が呼び出され、カメラを使用して写真を撮影します。 成功する場合、写真はcameraPreview Imageコントロールに表示されます。- 撮影された写真からストリームが開かれ、IronOCRに入力として使用され、IronTesseractインスタンスを作成し、画像ストリームをOcrInputオブジェクトにロードし、OCRを実行するためにReadメソッドを呼び出します。 成功すると、抽出されたテキストはtextLabelコントロールに表示されます。 テキストが検出されない場合、DisplayAlertを使用してエラーメッセージが表示されます。
IronOCRや追加のコードサンプルについての詳細な探求のために、このコード例ページを訪問してください。
5. ドキュメントスキャナーアプリのテスト
- 各プラットフォーム(Android、iOS、Windows)上でアプリを実行し、クロスプラットフォーム互換性を確認します。
- さまざまなフォント、サイズ、向きのドキュメントをスキャンするなど、異なるシナリオをテストします。
- 抽出されたテキストが正確で、UI上に正しく表示されていることを確認します。
出力 - テキストなしのスキャンされたドキュメント

出力 - テキストを含むスキャンされたドキュメント

結論
このチュートリアルに従うことで、.NET MAUI内でIronOCRドキュメントスキャナーSDKを使用する方法を学びました。 ドキュメントスキャンアプリは、紙のドキュメントをデジタル化することから、受領書や請求書から保存された情報を抽出することまで、多くの実用的な応用を持っています。 IronOCRの強力な機能と.NET MAUIの柔軟性を活用して、さまざまな使用ケースに対応する機能豊富なドキュメントスキャナーアプリを構築できます。 さまざまな機能を試し、追加のライブラリを探求し、さらなる印象的なアプリを作成するためにスキルを磨き続けてください。
IronOCRの機能についての詳細情報は、このドキュメントページをご覧ください。
IronOCRは、商業モードで完全な機能をテストできる無料の試用版を提供しています。 その永続的なLiteライセンスは$999から始まります。 ライブラリをダウンロードページからダウンロードして試してみてください。
Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。