Azure Machine Learning ことはじめ（Form Recognizer version 2.1）

Azure Machine Learning の Form Recognizer を勉強します。


Microsoft Learn はこちらです。

https://learn.microsoft.com/ja-jp/training/modules/analyze-receipts-form-recognizer/

演習課題はこちらです。

https://microsoftlearning.github.io/AI-900-AIFundamentals/instructions/03e-analyze-receipts.html#configure-and-run-a-client-application

Form Recognizer は、紙帳票を PDF や画像化して、そこからテキストなどの情報を検出する、というのが典型的な使い方になると思います。

世の中、まだまだ紙帳票が幅をきかせてますので、Scansnap と組み合わせて帳票の読み込みシステムなんかを提案するのに使えると思います。
他にはスクレイピングで PDF からデータをゲットするのにも使えると思います。


使用に際して、Microsoft アカウントを作成し、Azure Portal にログインしておきます。

# 準備

Azure Portal で「リソース、サービス、ドキュメントの検索」で「Form Recognizer」を入力し、検索します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177616/56fc8887-bae3-cee4-585c-b904076bcd0d.png" width="600">

「＋作成」ボタンから Form Recognizer のサービスアカウントを作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177616/57a248d6-1613-430f-adf6-2a96f5ffda89.png" width="600">

左ペインの「キーとエンドポイント」をクリックし、キー１とエンドポイントを控えておきます。

# Learn の演習を試す

演習を進めていきます。Powershell ターミナルを開き、git コマンドを使って、サンプルコードをダウンロードします。

```bash:サンプルコードのダウンロード
git clone https://github.com/MicrosoftLearning/AI-900-AIFundamentals ai-900
```

この AI-900-AIFundamentals には、AI-900 の他の演習のコードも含まれていますが、ここでは「form-recognizer.ps1」を使用します。エディタを開いて、１、２行目を編集します。

```powershell:form-recognizer.ps1
$key="YOUR_KEY"            # 自分のキーに書き換える
$endpoint="YOUR_ENDPOINT"  # 自分のエンドポイント URL に書き換える

# Create the URL where the raw receipt image can be found
$img = "https://raw.githubusercontent.com/MicrosoftLearning/AI-900-AIFundamentals/main/data/vision/receipt.jpg"

# Create the header for the REST POST with the subscription key
# In this example, the URL of the image will be sent instead of 
# the raw image, so the Content-Type is JSON
$headers = @{}
$headers.Add( "Ocp-Apim-Subscription-Key", $key )
$headers.Add( "Content-Type","application/json" )
```

変数 key には、Azure Portal の Form Recognizer のサービスアカウントで控えたキーを、変数 endpoint にはエンドポイントを代入します。

保存したらターミナルから実行してみます。

```powershell:form-recognizer.ps1 改1
PS C:\ai-900> .\form-recognizer.ps1
Sending receipt...
...Receipt sent.                                                                                                        
Getting results...
...Done

Receipt Type:  Itemized
Merchant Address:  123 Main Street
Merchant Phone:  555-123-4567
Transaction Date:  2020-02-17
Receipt Items:
Item # 1
  - Name:  Apple
  - Price:  0.9
Item # 2
  - Name:  Orange
  - Price:  0.8
Subtotal:  $1.70
Tax:  $0.17
Total:  $1.87
```

検出できたかどうかを確認するため、元の画像を見てみます。

[receipt.jpg](https://raw.githubusercontent.com/MicrosoftLearning/AI-900-AIFundamentals/main/data/vision/receipt.jpg)
<img src="https://raw.githubusercontent.com/MicrosoftLearning/AI-900-AIFundamentals/main/data/vision/receipt.jpg" width=200>

おー、読み取れてますね。

日本語が含まれているものはどうでしょうか。

ネットで適当に見つけたレシートです。お借りします。

[レシート](https://images.ctfassets.net/gc4s9mi2asix/2oqypNvnB2KBBVCxMsp3io/b178c4d155b1f0a629ed6dae05eb0815/69293f3f47e533e9fcc2023595ba89ce.png)

<img src="https://images.ctfassets.net/gc4s9mi2asix/2oqypNvnB2KBBVCxMsp3io/b178c4d155b1f0a629ed6dae05eb0815/69293f3f47e533e9fcc2023595ba89ce.png" width=250>

サンプルのコードを編集します。

```powershell:form-recognizer.ps1 改1
04 # Create the URL where the raw receipt image can be found
05 # 元の $img をコメントアウト
06 #$img = "https://raw.githubusercontent.com/MicrosoftLearning/AI-900-AIFundamentals/main/data/vision/receipt.jpg"
07 # 見つけたレシートのURLを$imgに代入
08 $img = "https://images.ctfassets.net/gc4s9mi2asix/2oqypNvnB2KBBVCxMsp3io/b178c4d155b1f0a629ed6dae05eb0815/69293f3f47e533e9fcc2023595ba89ce.png"
09
10 # Create the header for the REST POST with the subscription key
```

さっそく実行します。

```powershell:実行結果
PS C:\ai-900> .\form-recognizer.ps1
Sending receipt...
...Receipt sent.                                                                                                        
Getting results...
...Done

Receipt Type:  Itemized
Merchant Address:
Merchant Phone:
Transaction Date:  
Receipt Items:
Subtotal:
Tax:  
Total:  
```

認識しないですね。。。


実は、Form Recognizer はすでに version 3.0 の開発が進められていて、2022-8-30 に GA となっています。こちらであれば、認識できました。

version 3.0 については、別記事として勉強の記録を残しています。

[Azure Machine Learning ことはじめ（Form Recognizer version 3.0 2022-08-31版）](https://qiita.com/tnishiki/items/18872e8dc670958528f2)

# Form Recognizer Studio を使う

実は Powershell などで開発しなくても、Form Recognizer Studio を使うことで簡単に画像からデータの読み込みを行うことができます。

[Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177616/c3bc4d60-9713-b05f-a241-5e045a226e02.png" width='600'>

AI-900 のサンプルのようなレシートの読み込みであれば、メニューから「Receipts」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177616/e966211d-6f67-2b76-da5a-2e1954ecfa37.png" width="600">

使い方は、左上の「Drag and drop document here」にレシートファイルをドラッグ＆ドロップし、横の「Analyze」をクリックするだけです。

結果は、右の Fields、Result、Code で確認することができます。

# 参考

[Azure Form Recognizer とは?](https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/overview?view=form-recog-2.1.0)

# 関連記事

[Azure Machine Learning ことはじめ（Custom Vision による画像分類）](https://qiita.com/tnishiki/items/26d1d3d31f2eeb8a1a2b)
[Azure Machine Learning ことはじめ（Azure Machine Learning Studio を使ったデータ分類）](https://qiita.com/tnishiki/items/e33142a68dcdcede27d9)
[Azure Machine Learning ことはじめ（テキスト分析）](https://qiita.com/tnishiki/items/d4df523866683cd6ecf2)
[Azure Machine Learning ことはじめ（Form Recognizer version 3.0 2022-08-31版）](https://qiita.com/tnishiki/items/18872e8dc670958528f2)