Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Article information
RevisionsShow article in Markdown
Report article
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

This post is Private. Only a writer or those who know its URL can access this post.

@annie

経費精算が捗る?! Cognitive Services Form Recognizer でレシート読み取り

"人工知能API" Cognitive Services の新しいサービスとして発表された Form Recognizer は、決められたフォーマット(領収書やレシート、発注書、納品書、明細書など)のドキュメントを読み取ることができるサービスです。(2019 年 5 月現在、英語のみの対応です。)

blueksky_20190508_00.PNG

今回は、レシート(のサンプル)を学習データとして投入してレシート判別モデルを作成し、必要な項目を取得できるようになるまでの手順を紹介します。

準備

Azure サブスクリプション & マイクロソフトアカウント

Form Recognizer のプレビュー利用申し込み

プレビュー申込 のサイトから、申し込みを行います。(※申し込みには Azure サブスクリプション ID が必要です。) プレビュー受付が受理されると、メールが届きます。

学習用とテスト用のレシート(サンプル)データ

5枚以上の学習データが必要です。フォーマットは PNG, JPG, PDF が利用可能で、判別モデルを作成するには同じデータフォーマットに揃える必要があります。
今回は学習用5枚+テスト用1枚を PNG で用意しました。→ 今回利用した画像(学習用&テストデータ)

手順

1. Azure Portal から Form Recognizer サービスの作成

プレビュー利用開始をお知らせするメールに表示されているリンクをクリックすると、Form Recognizer サービスが作成できます。申請した Azure サブスクリプションに紐づけられているアカウントでサインインします。
Form Recognizer ペインが開くので、必要事項を設定します。
- 名前 : 識別できるものを (ここでは Form Recognizer としています)
- サブスクリプション : (自動入力)
- 場所 : 米国西部2(WestUS2) または ヨーロッパ西部 (West Europe)
- 価格レベル : F0 の無償版でOKです
- リソースグループ : 新規作成、または作成済み(既存)のリソースグループを選択します

blueksky_20190508_01.PNG

利用許諾 のチェックボックスにチェック ☑ をつけ、一番下にある [作成] をクリックするとサブスクリプションが作成されます。

Form Recognizer のサービスが作成されたら、[リソースに移動] をクリックします。
blueksky_20190508_02.PNG

作成したサービスの 概要 に表示されている エンドポイント (Endpoint) をコピーしてローカルに保存しておきます。
blueksky_20190508_03.PNG

左メニューから キー をクリックして表示します。
キー1 に表示されている文字列 (API Key) をコピーしてローカルに保存しておきます。
blueksky_20190508_04.PNG

2. Form Recognizer の学習用データを Azure Storage に格納

学習用データは Web でアクセス可能なストレージに格納します。今回は Azure Blob Storage に学習用データを格納します。

ブラウザーで Azure Portal (https://portal.azure.com) を開きます。(必要に応じて、再度 Azure サブスクリプションが紐づいている Microsoft アカウントでサインインします。)
Azure Portal から左端ナビゲーションバーから [+リソースの作成] をクリックします。
20190308_01.PNG

新規 ペインの検索欄に storage account と入力し、表示される Storage account をクリックします。ストレージアカウント ペインで [作成] をクリックして作成に進みます。
blueksky_20190508_05.PNG

ストレージアカウントの作成 ペインが開くので、必要事項を設定します。
- サブスクリプション : (自動入力)
- リソースグループ : 新規作成、または作成済み(既存)のリソースグループを選択します
- ストレージアカウント名 : 識別できるものを (ここでは cogservicessto としています)
- 場所 : データセンターを選択します。日本なら (アジア太平洋)東日本(アジア太平洋)西日本 が選択できます
- アカウントの種類 : BlobStorage を選択します

blueksky_20190508_06.PNG

入力したら、[確認および作成] をクリックします。

検証に成功しました と表示されたら、[作成] をクリックして、ストレージを作成します。
blueksky_20190508_07.PNG

ストレージが作成できたら、データを格納する BLOB コンテナーを作成します。
[リソースに移動] をクリックして、作成したストレージを表示します。
blueksky_20190508_08.PNG

概要のページにある [BLOB] をクリックします。
blueksky_20190508_09.PNG

[+コンテナーの作成] をクリックします。識別しやすい名前を付け、パブリックアクセスレベルは コンテナー を選択します。[OK] をクリックして確定します。
blueksky_20190508_10.PNG

作成できたコンテナーを選択します。アップロード をクリックします。
blueksky_20190508_11.PNG

ローカルにダウンロードしておいた学習用データ(receipt1_1~1_5.png) を選択します。[アップロード] をクリックして、データをアップロードします。
blueksky_20190508_12.PNG

アップロードが完了したら、左メニューから プロパティ を選択します。
blueksky_20190508_13.PNG

URL をコピーしてローカルに保存しておきます。
blueksky_20190508_14.PNG

3. Form Recognizer でレシート判別モデルの作成

Postman などの Web API ツールを使って、Form Recognizer に学習用データをロードして学習させ、レシート判別モデルを作成します。

Cognitive Services Form Recognizer API - Train Model


{
  "source": "https://YOUR_BLOB_NAME.blob.core.windows.net/YOUR_CONTAINER_NAME"
}

それぞれのパラメーターをご自身の情報で書き換えてください。
YOUR_LOCATION : Azure Portal からコピーしておいた Endpoint に記載されているロケーション
YOUR_API_KEY : Azure Portal からコピーしておいた API Key
YOUR_BLOB_NAME, YOUR_CONTAINER_NAME : Azure Portal で作成した Azure Storage コンテナー URL の情報

Status 200, 以下のような Response が取得できれば OK です。
modelID の情報をローカルに保存しておきます。これが今回作成したレシート判別モデル(のID)になります。


{
    "modelId": "75f47080-a0cc-40fa-a342-1c4142fe3526",
    "trainingDocuments": [
        {
            "documentName": "receipt1_1.PNG",
            "pages": 1,
            "errors": [],
            "status": "success"
        },

        :(中略)

        }
    ],
    "errors": []
}

blueksky_20190508_15.PNG

4. レシート判別モデルで取得できるキーの確認

作成したレシート判別モデルで取得できている項目(キー)を確認します。あとでレシートを識別する際にキーを指定してデータを取得することができます。

Postman などの Web API ツールを使って、Form Recognizer に保存されているレシート判別モデルを確認します。

Cognitive Services Form Recognizer API - Get Keys

YOUR_MODEL_ID をご自身の情報が作成した modelID に書き換えてください。

Status 200, 以下のような Response が取得できれば OK です。


{
  "clusters":{
    "0":[
      "AMT",

        :(中略)

      "SUBTOTAL",
      "TAX",
      "TOTAL"
    ]
  }
}

今回は AMT, SUBTOTAL, TAX, TOTAL といった項目が取得できていることが分かります

blueksky_20190508_16.PNG

5. Form Recognizer で作成したレシート識別モデルのテスト

Postman などの Web API ツールを使って、Form Recognizer に保存されているレシート判別モデルをテストします。

Cognitive Services Form Recognizer API - Analyze Form

Keys のパラメーターはオプションですが、今回 TOTAL を指定してデータを取得します。

Status 200、以下のようにテストデータの TOTAL の項目、値、画像の中で表示されている位置(boundingBox)が取得できれば、レシート判別モデルが無事作成できています。


{
    "status": "success",
    "pages": [
        {
            "number": 1,
            "height": 570,
            "width": 460,
            "clusterId": 0,
            "keyValuePairs": [
                {
                    "key": [
                        {
                            "text": "TOTAL",
                            "boundingBox": [
                                69.2,
                                104,
                                :(中略)
                            ]
                        }
                    ],
                    "value": [
                        {
                            "text": "$5.94",
                            "boundingBox": [
                                235.3,
                                :(後略)

blueksky_20190508_17.PNG

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Article information
RevisionsShow article in Markdown
Report article
Help us understand the problem. What are the problem?