Form RecognizerのC# SDKを利用してカスタムモデルを使う

はじめに

最近Azure Form Recognizerを利用する機会があり、アプリケーションから利用するためにC#のSDKが必要でした。今回の記事ではその利用方法について書きます。
Form Recognizerとは、ドキュメントから必要なテキストやデータを抽出することができるAzureのサービスです。詳しくは以下の公式ドキュメントをご覧ください。

docs.microsoft.com

環境

Microsoft Visual Studio Professional 2022 (64-bit) Version 17.2.5
Azure.AI.FormRecognizer 4.0.0-beta.4
コンソールアプリ(.NET 6)

前提

・Form Recognizerのカスタムモデルはすでに構築済みであること
→作り方は以下のドキュメントをご覧ください

docs.microsoft.com

・APIキーとエンドポイントの取得しておくこと
→取得方法は以下のページの「前提条件」セクションの一番最後にあります
docs.microsoft.com

プロジェクトの作成手順

はじめにVisual Studioでコンソールアプリを作成し、プロジェクトにNugetパッケージを導入します。
今回はAzure.AI.FormRecognizer 4.0.0-beta.4を利用するので以下の画像のようにプレリリースのバージョンが出てくるようにチェックを入れます。

コンソールアプリのProgram.csに以下のように書きます。

using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;

string endpoint = "[Form Recognizerのエンドポイント]";
string apiKey = "[Form RecognizerのAPIキー]";
string modelId = "[モデル名]";
string filePath = @"[読み取りを行うファイルのパス]";

//ファイルの読み込み
using var fileStream = File.OpenRead(filePath);

using var stream = new MemoryStream();
await fileStream.CopyToAsync(stream);
stream.Position = 0;  //これをやらないと読み取り時に例外が発生してしまう

var credential = new AzureKeyCredential(apiKey);
var client = new DocumentAnalysisClient(new Uri(endpoint), credential);

AnalyzeDocumentOperation operation = await client.StartAnalyzeDocumentAsync(modelId, stream);

await operation.WaitForCompletionAsync();

AnalyzeResult result = operation.Value;


//以下、読み取り結果の表示
foreach (AnalyzedDocument document in result.Documents)
{
    foreach (KeyValuePair<string, DocumentField> fieldKvp in document.Fields)
    {
        string fieldName = fieldKvp.Key;
        DocumentField field = fieldKvp.Value;

        Console.WriteLine($"Field '{fieldName}': ");

        Console.WriteLine($"  Content: '{field.Content}'");
        Console.WriteLine($"  Confidence: '{field.Confidence}'");
    }
}

今回は以下のドキュメントの読み取りを行います。

読み取りたい情報は「請求書番号」「発注書番号」「総額」の3か所で、モデルもこの3か所を読み取るようにフィールドを設定しています。
(画像の赤い四角は読み取り個所をわかりやすくするためであり、実際のドキュメントにはありません)

これを実行すると以下のような結果が得られます。

Field '発注書番号':
  Content: '12350876'
  Confidence: '0.995'
Field '総額':
  Content: '4985'
  Confidence: '0.995'
Field '請求書番号':
  Content: '463'
  Confidence: '0.994'

参考ページ

Azure Cognitive Services Form Recognizer client library for .NET | Azure SDK for .NET

執筆担当者プロフィール
古川 貴浩

古川 貴浩(日本ビジネスシステムズ株式会社)

アプリケーション開発をしています。.NETやAI関連が好きです。

担当記事一覧