クラウドエンジニアブログ

請求書やレシートの入力を自動化!Microsoft の OCR サービス、Form Recognizer のご紹介

八木 真理奈

八木 真理奈

こんにちは。データサイエンティストチームの八木です。

コロナによって私たちの生活様式はずいぶんと様変わりしましたね。働き方も同様に、テレワーク推進の波が押し寄せ、自動化や効率化の動きが来ています。業務の生産性もさらに重要視される中、本日は、紙や PDF の情報を読み取ってデータ化する、Azure Form Recognizer をご紹介します。このサービスを使用することで、画像からテキストを抽出する光学式文字認識 (OCR) を使用し、請求書やレシートなどのフォーマットを読み取りテキスト化することができます。また、事前にモデルを学習させることで複雑な形式にも対応することができるところが特徴です。
今回はモデルのカスタマイズを試してみようと思います。





「機械学習導入支援サービス」はこちら


Form Recognizerとは

Form Recognizer とは、Microsoft が提供する、AI によるドキュメント抽出サービスのことで、ドキュメントやレシート、名刺などから、テキストを抽出することができます。

Form Recognizer は、次のサービスで構成されています。

  • Layout API
    • テキスト、選択マーク、およびテーブルの構造を、対応する境界ボックスの座標と共にドキュメントから抽出します。
  • カスタムモデル
    • 自分が用意した独自のデータでモデルを作成することが可能です。
    • フォームからテキスト、キーと値のペア、選択マーク、およびテーブルデータを抽出します。
  • 事前構築済みモデル
    • 事前構築済みモデルを使用してデータを抽出します。 現在使用できるのは、以下の事前構築済みモデルです。
      • 請求書
      • レシート
      • 名刺

私が思う良い点と気を付ける点は以下です。

  • 良い点
    • 用意されたモデルを使用することも、カスタムすることも可能
    • 解析で使用したデータは非公開の状態に保たれ、Form Recognizer のモデルの改善に使用されることはない
    • 価格レベルは Free と Standard の 2種類が用意されており、無料で始められる
    • コンテナーでのデプロイが可能で、エッジ、オンプレミス、クラウドのどこでも認識が可能
  • 気を付ける点
    • 執筆現在、日本語含む英語以外の言語については Form Recognizer v2.1 プレビューのみとなっている

以降の章では、請求書の読み取りを行う際の Form Recognizer の簡単な使い方を、「事前準備」、「事前学習済みのモデルを試す」、「ツールの設定」、「タグ付け」、「学習とテスト」の 5ステップでご紹介します。


「機械学習導入支援サービス」はこちら


① 事前準備

さっそく、Azure ポータルからご自身のサブスクリプションにアクセスし、Form Recognizer と Azure BLOB Storage を作成しましょう。

1.Form Recognizer
価格レベルは検証用に使う程度であれば、Free で問題ないかと思います。価格については、以下の URL をご参照ください。
https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/form-recognizer/

Form recognizer service URI (エンドポイント) と API key を確認し、別途メモ帳などに保存しておきます。


  1. ① Azure ポータルで、作成した Form Recognizer を開きます。
  2. ② 左ウィンドウの[キーとエンドポイント]をクリックします。
  3. ③ キー1とエンドポイントの情報をそれぞれコピーし、メモ帳などに保存します。


Form Recognizer




2.Azure BLOB Storage
BLOB Storage を作成します。
※Azure の Storage については、弊社のブログエントリをあわせてご参照ください。
Azure Storage 再入門

作成が完了しましたら、クロスドメイン リソース共有 (CORS) を構成します。

Azure ポータルで作成した BLOB Storage を選択し、左側のペインで [CORS] タブをクリックします。[BLOB Service] の行に、次の値を入力します。


  • [許可されたドメイン] = *
  • [許可されたメソッド] = [すべて選択]
  • [許可されたヘッダー] = *
  • [公開されるヘッダー] = *
  • [最長有効期間] = 200

その後、上部にある [保存] をクリックします。

Azure BLOB Storage




3.画像の準備
今回は手元にデータがなかったので、架空の請求書 (PDF) を生成するコードを Pythonで書きました。試したいデータセットがない方は、以下 URL より、サンプルデータ (sample_data.zip) をダウンロード、展開して使ってみてください。
https://github.com/Azure-Samples/cognitive-services-REST-api-samples/tree/master/curl/form-recognizer

その後、BLOB に使用したい画像を格納するために、BLOB コンテナーを作成します。


  1. ① Azure ポータルから BLOB にアクセスします。
  2. ② 左ウィンドウから、[Storage Explorer(プレビュー)] を選択します。
  3. ③ [BLOBコンテナー] を右クリックし、[BLOBコンテナーの作成] をクリックします。
画像の準備1




④ コンテナーの名前を入力後、作成をクリックします。

画像の準備2




⑤ 作成したコンテナーを選択し、[アップロード]をクリックし、用意した画像をアップロードします。

画像の準備3




アップロードが完了しましたら、今度は SAS の URI を取得します。
⑥ Azure ポータルを開き、作成した BLOB にアクセスする。
⑦ 作成したコンテナーを右クリックし [Shared Access Signature の取得] をクリックします。

画像の準備4




⑧ 有効期限やアクセス許可などを変更し、[作成] をクリックします。

画像の準備5




⑨ Shared Access Signature のウィンドウが開きましたら、URI の [コピー] をクリックし、別途メモ帳などに保存します。

画像の準備6




※左ウィンドウの [Shared Access Signature] からも SAS URI を発行できますが、BLOB コンテナーを指定するために、URI に BLOB コンテナー名を追記する必要があります。次の手順で出てくるラベルツール内でそのままで使うと、Invalid Resource Error となりますので注意してください。

これですべての準備が完了しました。次は FOTT の設定に進みましょう。


「機械学習導入支援サービス」はこちら


② 事前学習済みのモデルを試す

ここから、Form Recognizer のラベル付けツールである、Form OCR Test Toolset (FOTT) を使用して、ラベル付けを行っていきます。FOTT とは、GitHub のオープンソース プロジェクトとして公開されているラベル付けツールのことで、オンライン上でも使用することができるようになっています。
https://github.com/microsoft/OCR-Form-Tools/BLOB/master/README.md#run-as-web-application

Docker でも使用できますが、今回は Web ブラウザで簡単に試せるものを使ってみたいと思います。このツールでは、現在 3つのバージョンが用意されています。


※今回は、事前学習済みのモデルを試すのは 2.1-preview.* services 版、モデルのカスタマイズは2.0 GA services 版にてそれぞれ試してみました。

Form Recognizer の事前構築済みモデルには、請求書、レシート、名刺用のモデルがそれぞれ用意されており、今回は請求書モデルを使用します。このモデルでは、モデル顧客、仕入先、請求書 ID、請求書の期限、合計、請求金額、課税額、出荷先、請求先などのテキスト、テーブル、情報が抽出されるとのことですので、さっそく事前学習済みのモデルを使用した結果を確認してみましょう。


事前学習済みのモデルを試す1




https://docs.microsoft.com/ja-jp/azure/cognitive-services/form-recognizer/concept-invoices


1. 以下、FOTT の事前学習済みモデルでの分析のページにアクセスします。
https://fott-preview.azurewebsites.net/prebuilts-analyze

開くとこのような画面が表示されます。

事前学習済みのモデルを試す2




2. 情報を入力していきます。

  • Form recognizer service endpoint
    • ① の事前準備の1で保存しておいた、Form recognizer service URI (エンドポイント) を貼りつけます。
  • API Key
    • ① 事前準備の 1 で保存しておいた、API Keyを 貼りつけます。
  • Form type
    • 今回は請求書のデータを用意したので、[Invoice] を選択します。
  • Browse for a file…
    • [Browse for a file…] と書かれた白枠をクリックして、画像をアップロードします。

3. [Run Analysis] をクリックし、数秒待ちます。

事前学習済みのモデルを試す3




4. 結果を確認します。
今回の結果では、日にちや管理番号などは取得できましたが、請求項目や金額の部分の取得は難しい結果となりました。

事前学習済みのモデルを試す4




続いて、モデルをカスタマイズしていきましょう。

※API で試してみたい方は以下からも試すことができます。
https://westcentralus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1-preview-2/operations/AnalyzeBusinessCardAsync


「機械学習導入支援サービス」はこちら


③ ツールの設定

まず、モデルのカスタマイズを行うプロジェクトの作成を行っていきましょう。

1. FOTT にアクセスします。
https://fott.azurewebsites.net/


2. アクセスすると以下のような画面が表示されますので、左の [New Project] をクリックします。

ツールの設定1




3. [プロジェクト設定] の画面が開きましたら、情報を入力していきます。

ツールの設定2




  • Display name
    今回作成するプロジェクト名。何でもよいですが、今回は invoice-test としました。
  • Form recognizer service URI
    • ① 事前準備の 1 で保存しておいた、Form recognizer service URI (エンドポイント)を貼りつけます。
  • API key
    • ① 事前準備の 1 で保存しておいた、API Key を貼りつけます。

4. BLOB の設定を行います。

  • Source connection
    [Add Connection] をクリックします。すると以下のような画面になりますので、情報を入力します。
ツールの設定3




  • Display name
    • 接続設定の名前をつけます。
  • Description
    • 複数のリソースからデータを取得するなど、他の設定と他の区別しておきたいときは説明を書いておくと便利です。記入しなくても構いません。
  • SAS URI
    • 前の手順でコピーした SAS URI を貼りつけます。
ツールの設定4




5. 入力が完了しましたら、[Save Connection] をクリックします。

ツールの設定5




6. 接続に成功すると以下のような画面が表れます。

ツールの設定6




「機械学習導入支援サービス」はこちら


④ タグ付け

ここからタグ付けを行います。接続がうまくいくと、BLOB に保存した PDF が自動で読み込まれます。

タグ付け1




1. タグを作成します。
以下のAdd new tag に、作成したいタグの名前を打ち込み、エンターを押します。

タグ付け2




以下のような形で、タグが追加されました。

タグ付け3




2. タグの型を選択します。
必要に応じて、タグのデータ型を設定できます。
これにより、テキスト検出精度の向上につながったり、JSON での結果出力の際に検出された値がその型で返ってきたりします。ですので、型情報もつけておくとよいでしょう。ここで入力したタグの型に関する情報は、fields.json ファイルに保存されます。

  • string
  • number
  • date
  • time
  • integer
  • selectionMark
    ※selectionMark は、v2.1-preview.1 で追加された新機能で、チェックボックスやラジオボタンなども検出できるようです。
タグ付け4




3. 全てのタグについて、追加・型の選択を行います。

タグ付け5




いよいよ各 PDF にタグを付けていきます。

4. タグをつけたい項目を選択します。例として、管理番号にタグをつけるとした場合、黄色い管理番号の値をクリックすると、選択した箇所が黄色から緑色に変わります。その後、右ウィンドウのつけたいタグ (この場合だとinvoice_num) をクリックします。

タグ付け6




5. タグが付くと、選択したい箇所がタグの色の四角で囲まれます。また、Tags ウィンドウ にも情報が反映され、正しくタグ付けされていることが分かります。

タグ付け7




6. 複数一気にタグ付けするときは、以下のように 4つ続けてクリックしてから、該当するタグをクリックします。

タグ付け8




7. 複数まとめてタグをつけることができました。

タグ付け9




8. これをすべてのタグについて行えば、PDF のタグ付けが 1枚分完了しました。

タグ付け10




これを学習させたい枚数分やってみましょう。


「機械学習導入支援サービス」はこちら


⑤ 学習とテスト

1. 左側のペインでトレーニングアイコンをクリックして、[トレーニング] ページを開き、[Train] ボタンをクリックします。すると、モデルのトレーニングを開始されますので、数秒待ちます。

学習とテスト1




2. トレーニングが完了すると、学習結果が表示されます。

  • Model ID
    • 作成および学習したモデルの ID です。学習のたびに、新しいモデルが作成されます。この Model ID は、REST API などを使用して予測する場合に活用できます。
  • Average Accuracy (平均精度)
    • モデルの平均精度のことです。ここが低いときは、追加でラベル付けと再学習を行い、モデルの精度を向上させましょう。
  • タグの一覧と、タグごとの予測精度
    • ここからもどのタグが苦手なのか分かります。特に精度が低いものは、重点的にデータを増やして再学習することも検討しましょう。
学習とテスト2




今回の結果では、cost と item の精度が低いことが分かります。学習に使用していないデータを使用して、テストしてみます。

3. 左側のペインで予測アイコン(電球)をクリックして、モデルのテストを行います。[Load file] をクリックして学習で使用しなかった PDF をアップロードし、[Run analysis] をクリックします。

学習とテスト3




4. 数秒~数十秒待つと、テスト結果が表示されます。

<うまくいっている例>

学習とテスト4




<失敗している例>

学習とテスト5




上記例だと、請求書の項目が上手く検出されていません。今回学習に使用しているデータは 10枚しかなかったため、学習に使う画像を追加で 15枚ほど増やしてみます。


5. BLOB にデータを追加すると、FR の方にも自動で画像が反映されますので、またラベル付けを行い、再学習させます。
その結果が以下です。cost と item の精度が向上していることが分かります。

学習とテスト6




6. 先ほどうまくいかなかった画像をテストしてみます。

学習とテスト7




無事、請求書の読み取りに成功しました。今回、学習に使用したダミーの請求書は 25枚ほどでしたが思ったより精度が高く、また、タグ付けのツールも用意されているので、これから AI を始める方やお手元のデータで少し試してみたい方にもお勧めのツールだと感じました。


「機械学習導入支援サービス」はこちら


さいごに

今回は、様々なフォームの情報を読み取ってデジタル化する、Microsoft の Azure Form Recognizer をご紹介しました。Form Recognizer を使えば簡単に紙や PDF からデータを起こすことができます。このサービスを使えば請求書やレシートなどの確認や入力作業などを効率化することが可能です。また、カスタマイズすることができるため、独自のフォーマットなどでも対応できるところが便利ですね。現在どんどん機能追加が行われているため、ますます簡単で使いやすくなっていくと思われます。

コロナ禍で変革を迫られている今、一からスクラッチで機械学習を作らなくてもこういったサービスを使うことで、ビジネスの AI 導入の敷居を下げることができます。ぜひこういったツールを活用して、新しい取り組みを始めてみるのはいかがでしょうか。

弊社では、このような Azure のサービスを使用した AI 活用支援をはじめ、様々な分野での機械学習モデル構築を承っております。現行の作業を軽減してより重要な作業に時間を当てたい、取得しているデータを活用して課題解決を行いたいなど AI 活用を検討中のご担当者の方がいましたら、ぜひお問い合わせください。まず何から始めればよいか悩んでいるといったお客様も、お気軽にご相談いただければと思います。

【総合】お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録