AzureのOCRサービス「Azure Form Recognizer」入門

はじめに

Azureには、Azure Cognitive ServicesとAI機能をWeb APIして提供するサービスがあります。  

本記事では、Azure Cognitive Servicesのうち、OCRサービス「Azure Form Recognizer」の使い方について紹介します。  

Azure Cognitive Servicesとは

Azure Cognitive Servicesは、視覚、音声、言語、決定、検索の5ジャンルからなるAI機能をWeb APIとして利用できるAzureのサービスです。

https://azure.microsoft.com/ja-jp/services/cognitive-services/#overview

Azure Form Recognizerとは

請求書、レシート、名刺などのドキュメントから文字情報を取得するAzure Cognitive ServicesのOCR機能の一つです。

Azure Form RecognizerのAPIを実行すると、リクエスト時で渡されたPDFファイルなどのドキュメントのURLを解析し、 解析したテキスト情報をHTTPレスポンスとして返します。

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/

もう一つのOCRサービス「Azure Computer Vision」

Azure Cognitive ServicesのOCRサービスには、Computer Visionというものもあります。

Computer Visonは画像やビデオのコンテンツを分析するAIサービスです。
こちらもOCRの機能がありますが、画像内のオブジェクトの検出、画像の説明の生成、顔認識などOCR以外にも、画像に対してより幅広いことができます。

PDFファイルの上の表にあるテキストの取得や、指定したテキストを取得したい場合は、Azure Form Recognizerの方が適しています。

https://stackoverflow.com/questions/71071309/ai-form-recognizer-vs-cognitiveservices-computervision

https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/#overview

https://www.alirookie.com/post/azure-ocr-with-pdf-files

Azure Form Recognizerの機能

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

  • Layout API
  • 事前構築済みモデル
  • カスタムモデル

Layout API

Azure Form RecognizerのAPIを実行することで、ドキュメントから、テキストや、テーブルの構造、テキスト、バウンディングボックスの座標と共にドキュメントから抽出します。

事前構築済みモデル(Prebuilt Model)

事前構築済みモデルは請求書、レシート、名刺などMicrosoftが事前に用意している特定のドキュメント専用のAIモデルを使用して、フォームを解析する機能です。

カスタムモデル

カスタムモデルは、ユーザが独自に作成することができるAIモデルです。

事前構築済みモデルに用意されていないオリジナルのフォームを解析する場合は、カスタムモデルが必要です。

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/concept-custom

Composeモデル(複合モデル)

Composeモデルは複数のカスタムモデルを組み合わせたモデルです。
Composeモデルに対してテキスト解析要求を実行すると、設定したカスタムモデルの中から要求を受けたファイルが最も適合する割り当てモデルを選択し、そのモデルの結果を返します。
最大100個の学習済みカスタムモデルを1つのComposeモデルに割り当てることができます。  

https://docs.microsoft.com/en-us/answers/questions/102850/how-to-use-v21-compose-custom-model-method-with-re.html

https://docs.microsoft.com/ja-jp/rest/api/formrecognizer/2.1preview2/compose-custom-models-async/compose-custom-models-async

https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/Compose

https://docs.microsoft.com/en-us/answers/questions/775027/is-it-possible-for-azure-form-recognzier-to-automa.html

Azure Form Recognizerを作成する

Azure Form Recognizerのリソースを作成するには、Azureポータルから以下のように画面遷移します。

今回はAzure Form Recognizerは、無料プランで作成し、インターネットからのアクセスを前提とします。

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/create-a-form-recognizer-resource

ラベリングツールを使ってモデルを作成

Azure Form Recognizerでモデルを作成する場合、以下の方法があります。

  • WEBブラウザを使ったラベリングツールを使ってGUIでモデルを作成する
  • Azure SDKや、Rest APIでコードベースでモデルを作成する

後者の場合、解析が必要なドキュメントに合わせて、つどコードの作成が必要なので、 サンプルのラベリングツールを使うことを推奨します。

ラベリングツールは以下のURLから利用することができます。

https://fott-2-1.azurewebsites.net/layout-analyze

https://qiita.com/komiyasa/items/afee82f7baddcd820251

接続先のBlobストレージの設定

ラベリングツールを利用するにために、最初にForm RecoginzerがOCRを実施するPDFファイルが配置されたBlobストレージのコンテナを指定する必要があります。  

Blobストレージ接続設定は以下のように実施します。

アクセスするBLOBストレージアカウントのCORSを有効にする

Azureポータルから以下の設定を実施します。

CORS設定しない場合は、ラベリングツールで "if you have unexpected read/write/list/delete"というエラーメッセージが表示されます。

https://docs.microsoft.com/ja-jp/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services

コンテナのSASの発行

Azureポータルで接続させる対象のBlobコンテナから読み取り、書き込み、リスト、削除の権限を持つSASを発行します。

ストレージアカウントではなく、コンテナのSASを発行する必要があります

SASの記号の意味についてはこちらの記事をご参照ください

ラベリングツールに設定

ラベリングツールに接続先のBLobのコンテナ名と発行したSASを設定します。

プロジェクト作成

次に、プロジェクトを作成し、先程作成したBlobストレージの接続情報と、機会学習に使用する画像ファイル、FormRecognizerのURLとAPIキーをラベリングツールに設定します。
URLとAPIキーはAzureポータルから取得することができます。

CORSの設定をしても、"if you have unexpected read/write/list/delete" というエラーが出る場合、プロジェクト設定で、接続先のコンテナの設定をフォームを選択する場合は解除が必要

https://docs.microsoft.com/en-us/answers/questions/288547/form-recognizer-error-check-if-you-have-unexpired.html

プロジェクトを作成するとプロジェクト名.fottというファイルが接続先のストレージアカウントのコンテナ直下に作成されます。

プロジェクト作成後はラベルタブで抽出対象のテキストにラベルをつけたり、分析タブを使ってOCRでテキストを抽出したりすることができるようになります。

ラベリングツールの使い方

ラベリングツールのラベルタブを指定すると、プロジェクトに設定したディレクトリ配下のファイルに対して、OCRが実行されます。

下図にあるように黄色にラインが引かれている箇所がOCRでテキストとして認識された箇所になります。
また、PDFファイル上に表示されるテーブルアイコンをクリックすると、テーブルとして認識されているテキストの情報が表示されます。

テーブルとして認識されているテキストは、テキスト解析後するとテーブルの構造を取得することができ、どのテキストがどの行番号、どの列番号にあるかを取得することができます。

タグ付け

ラベリングツールではOCRで解析したテキストに対して、タグ(ラベル)付けをつけることができます。 例えば、FAX発注書記入例というファイルのタイトルにtitleというそのテキストの内容を意味するタグ名を設定することができます。
タグは以下の操作を実行することで、設定することができます。

  1. タグ作成ボタンをクリックし、タグ名を入力
  2. ラベルづけをしたいテキストをマウスで選択
  3. テキスト選択後、対象のタグをクリックして、テキストとタグを関連付けする

タグ付けを行うメリットは以下の通りです。

  • タグ付けによりモデルの精度が向上する
  • タグ名から検索を行うことで、OCR解析結果からタグ付けしたテキストのみを抽出することができるようになる

テーブルタグ

テーブル形式のタグも設定することも可能です。
デフォルトでもテーブル認識機能はついていますが、結合セルがあったり表の形式が不規則だと、テーブルとして認識されないことがあります。
このようなケースでは、テーブルタグを作成し、ファイル中のテーブルと関連付けを行う必要があります。
テーブルタグは以下の手順で設定します。

  1. テーブルタグ作成ボタンをクリックし、タグ名を入力
  2. テーブルタグの列名と列の型を指定し、テーブルタグを作成
  3. 作成したテーブルタグをクリック
  4. テキスト選択後、対象のテーブルタグの列をクリックし、テキストとテーブルタグを関連付けする

モデル作成

トレーニングタブを選択後、Trainボタンをクリックすると、ラベルタブの操作で読み込んだPDFファイルと設定したラベル情報にもとづいて、 機会学習が行われ、モデルが作成されます。

テキスト解析

アナライズタブをクリックして、テキスト抽出したいファイルをアップロードすると、作成したモデルにもとづいて、 テキスト解析が行われます。

解析結果はJSONまたはCSV形式で出力することが可能です。

解析結果は以下の階層構造になっています。

テーブル情報が取得したければpageResultstables、ラベル付けした情報が取得したければdocumentResultsfiledsから取得することができます。

status : succeeded
createdDateTime : yyyy-mm-ddThh:mm:ssZ
lastUpdatedDateTime : yyyy-mm-ddThh:mm:ssZ
analyzeResult :  {5}
  version : 2.1.0
  errors
  pageResults [n] 
    [0]
        tables [n]
            page : n
            [0]
                row
                columns
                boundingBox [8]
                cells [n]
                  [0]
                      elements [n]: 
                        [0] : #/readResults/0/lines/n/words/0
                      isHeader : true
                      rowIndex : 0
                      columnIndex : 0
                      text : ROW_ITEM
  documentResults : [?]
    [0]
      pageRange : [n]
        [0] : 1
        [1] : 2
      docTypeConfidence : n
      modelId : 2e92a2c6-438e-45ae-acaa-9310db383b63
      fileds : {n}
        label_name-001 : {7}
          text : hogehoge
          type : string
          valueString : hogehoge
          page : 1
          confidence : n
          elements : [n]
            [0] : #/readResults/0/lines/n/words/0
          boundingBox [8]
  readResults : [n]
    [0] : {7}
      angle : 0
      height : n
      width : n
      page : n
      unit : inch
      lines : [n]
        [0] : {4}
          text : text-string
          appearance : {1}
            style {2}
              confidence : n
              name : other
          words : [n]
            [0] : {3}
              boudingBox [8]
              text : t
              confidence :  1
      selectionMarks [n]
            [0] : {3}
              boudingBox [8]
              confidence :  n
              sate : selected

補足事項

  • dockerコンテナをつかって、ローカル環境に上記と同じラベリングツールをデプロイすることも可能です

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/deploy-label-tool#run-the-sample-labeling-tool-locally

https://docs.microsoft.com/en-us/answers/questions/748830/azure-form-recognizer-request-failed-with-status-c.html

https://stackoverflow.com/questions/21657024/is-there-a-java-equivalent-for-cs-httpserverutility-urltokendecode

https://docs.microsoft.com/en-us/answers/questions/776499/what-is-the-difference-between-the-boundingboxes-i.html

  • プレビュー版ですが、Form Recognizer Studioというモデル作成ツールもあり、今後はこちらにシフトしていくものと思われます

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/concept-form-recognizer-studio


参考ドキュメント

Rest API関連

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/how-to-guides/try-sdk-rest-api?pivots=programming-language-rest-api

https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/5ed8c9843c2794cbb1a96291

https://docs.microsoft.com/ja-jp/rest/api/formrecognizer/

https://docs.microsoft.com/ja-jp/rest/api/formrecognizer/2.1preview2/compose-custom-models-async/compose-custom-models-async#errorinformation

カスタムモデルのトレーニングセット作成

https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/build-training-data-set

クォーター上限

https://docs.microsoft.com/en-us/azure/applied-ai-services/form-recognizer/service-limits


おわりに

この記事では、AzureのOCRサービス「Form Recoginzer」について紹介しました。
本記事が、OCRを学習するエンジニアの参考になれば幸いです。


I