"人工知能API" Cognitive Services の新しいサービスとして発表された Form Recognizer は、決められたフォーマット(領収書やレシート、発注書、納品書、明細書など)のドキュメントを読み取ることができるサービスです。(2019 年 5 月現在、英語のみの対応です。)
今回は、レシート(のサンプル)を学習データとして投入してレシート判別モデルを作成し、必要な項目を取得できるようになるまでの手順を紹介します。
準備
Azure サブスクリプション & マイクロソフトアカウント
- Microsoft アカウント
- Azure サブスクリプション申し込みに必要です。
- Microsoft アカウント登録手続き
- Azure サブスクリプション
- 無料試用版で充分です。上記↑で取得した Microsoft アカウントで申し込みを行います。
- 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です
- リソースグループ : 新規作成、または作成済み(既存)のリソースグループを選択します
利用許諾 のチェックボックスにチェック ☑ をつけ、一番下にある [作成] をクリックするとサブスクリプションが作成されます。
Form Recognizer のサービスが作成されたら、[リソースに移動] をクリックします。
作成したサービスの 概要 に表示されている エンドポイント (Endpoint) をコピーしてローカルに保存しておきます。
左メニューから キー をクリックして表示します。
キー1 に表示されている文字列 (API Key) をコピーしてローカルに保存しておきます。
2. Form Recognizer の学習用データを Azure Storage に格納
学習用データは Web でアクセス可能なストレージに格納します。今回は Azure Blob Storage に学習用データを格納します。
ブラウザーで Azure Portal (https://portal.azure.com) を開きます。(必要に応じて、再度 Azure サブスクリプションが紐づいている Microsoft アカウントでサインインします。)
Azure Portal から左端ナビゲーションバーから [+リソースの作成] をクリックします。
新規 ペインの検索欄に storage account と入力し、表示される Storage account をクリックします。ストレージアカウント ペインで [作成] をクリックして作成に進みます。
ストレージアカウントの作成 ペインが開くので、必要事項を設定します。
- サブスクリプション : (自動入力)
- リソースグループ : 新規作成、または作成済み(既存)のリソースグループを選択します
- ストレージアカウント名 : 識別できるものを (ここでは cogservicessto としています)
- 場所 : データセンターを選択します。日本なら (アジア太平洋)東日本 や (アジア太平洋)西日本 が選択できます
- アカウントの種類 : BlobStorage を選択します
入力したら、[確認および作成] をクリックします。
検証に成功しました と表示されたら、[作成] をクリックして、ストレージを作成します。
ストレージが作成できたら、データを格納する BLOB コンテナーを作成します。
[リソースに移動] をクリックして、作成したストレージを表示します。
[+コンテナーの作成] をクリックします。識別しやすい名前を付け、パブリックアクセスレベルは コンテナー を選択します。[OK] をクリックして確定します。
作成できたコンテナーを選択します。アップロード をクリックします。
ローカルにダウンロードしておいた学習用データ(receipt1_1~1_5.png) を選択します。[アップロード] をクリックして、データをアップロードします。
アップロードが完了したら、左メニューから プロパティ を選択します。
3. Form Recognizer でレシート判別モデルの作成
Postman などの Web API ツールを使って、Form Recognizer に学習用データをロードして学習させ、レシート判別モデルを作成します。
Cognitive Services Form Recognizer API - Train Model
- Method: Post
- Base URL: https://YOUR_LOCATION.api.cognitive.microsoft.com/formrecognizer/v1.0-preview/custom/train
- Headers:
- Ocp-Apim-Subscription-Key=YOUR_API_KEY
- Content-Type=application/json
- Body:
{
"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": []
}
4. レシート判別モデルで取得できるキーの確認
作成したレシート判別モデルで取得できている項目(キー)を確認します。あとでレシートを識別する際にキーを指定してデータを取得することができます。
Postman などの Web API ツールを使って、Form Recognizer に保存されているレシート判別モデルを確認します。
Cognitive Services Form Recognizer API - Get Keys
- Method: Get
- Base URL: https://westus2.api.cognitive.microsoft.com/formrecognizer/v1.0-preview/custom/models/YOUR_MODEL_ID/keys
- Headers:
- Ocp-Apim-Subscription-Key=YOUR_API_KEY
YOUR_MODEL_ID をご自身の情報が作成した modelID に書き換えてください。
Status 200, 以下のような Response が取得できれば OK です。
{
"clusters":{
"0":[
"AMT",
:(中略)
"SUBTOTAL",
"TAX",
"TOTAL"
]
}
}
今回は AMT, SUBTOTAL, TAX, TOTAL といった項目が取得できていることが分かります
5. Form Recognizer で作成したレシート識別モデルのテスト
Postman などの Web API ツールを使って、Form Recognizer に保存されているレシート判別モデルをテストします。
Cognitive Services Form Recognizer API - Analyze Form
Keys のパラメーターはオプションですが、今回 TOTAL を指定してデータを取得します。
- Method: Post
- Base URL: https://westus2.api.cognitive.microsoft.com/formrecognizer/v1.0-preview/custom/models/YOUR_MODEL_ID/analyze
- Parameters
- keys=TOTAL
- Parameters
- Headers:
- Ocp-Apim-Subscription-Key=YOUR_API_KEY
- Content-type=image/png など、データに合わせて変更してください
- Body
- Binary を指定し、テストデータ(receipt1_test.png)をロードします
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,
:(後略)