Azure Form Recognizerv3.0で日本の運転免許証の項目読取りモデルを作成してみた

### 概要
Azure FormRecognizerで提供されている身分証明書 (ID)事前構築済みモデルでは、運転免許証の読み取りは米国のフォーマットを対象としているため日本の免許証はうまく読み込めません。そこでFormRecognizerのカスタム抽出モデルを活用し、日本国内の運転免許証用の読み込みモデルを作成してみました。

参考：[身分証明書モデル](https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/concept-model-overview?view=form-recog-3.0.0#identity-document-id)
### Azure FormRecognizerとは
名刺や免許証、請求書、レシートなどのドキュメントからテキストと構造データを抽出できるOCRサービス。 事前構築済みの機械学習モデルに加え、カスタムモデルの構築も可能です。

https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/overview?view=form-recog-3.0.0

### FormRecognizerのカスタム抽出モデルの設定

##### プロジェクトの作成 

事前にAzurePortalより、カスタム抽出モデルのプロジェクト作成時に必要となる下記のリソース作成を行います。

・Form Recognizer
・ストレージアカウント（モデル生成に必要なBLOBデータを格納するストレージ）
・コンテナ（ストレージアカウント内のBLOBデータの保管先ディクレトリ）

リソースの作成後、[Form Recognizer Studio](https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/quickstarts/try-form-recognizer-studio?view=form-recog-3.0.0)よりカスタムモデル（Custom extraction model）のプロジェクト作成を行います。

・Form Recognizer Studioの下部にあるCustom extraction modelを選択します。
![スクリーンショット 2023-04-17 16.42.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/15df8aa6-551a-6947-8207-247b6620a194.png)

・My projectからプロジェクトを作成します。
![スクリーンショット 2023-04-17 17.06.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/b9254974-6ada-3c69-36ec-06b7a5c111de.png)

・事前に作成したリソース（Form Recognizer、ストレージアカウント、コンテナ）を含め必要な情報を入力します。

![スクリーンショット 2023-04-17 22.46.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/8918a3ce-23b7-bd10-0028-42f521b1529a.png)
・Form Recognizerリソースの選択
![スクリーンショット 2023-04-17 22.47.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/71b1d3da-c389-bb44-593c-ccc630d7be9c.png)
・ストレージアカウント、コンテナリソースの選択
![スクリーンショット 2023-04-17 22.47.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/a59a4e71-eda1-c7df-dd03-0d47007f4c06.png)
登録が完了すると下記のカスタム抽出モデルのトレーニング画面（ラベル付け）に遷移します。
![スクリーンショット 2023-04-17 22.51.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/8d0bc3fc-bb35-03a2-092f-250ad2e709bb.png)



##### モデルのトレーニング

カスタム抽出モデルのトレーニング（ラベル付け）画面にて学習用のファイル（運転免許証画像）をアップロードします。モデルのトレーニングを行うのに少なくとも５枚以上のファイルを登録する必要があります。

![スクリーンショット 2023-04-18 9.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/ebe8579e-4b84-cde9-4823-92a073c38605.png)

アップロードした画像ファイルに対し、抽出したいフィールド（画像内の項目）を追加の上、マウスのクリック操作でラベル付けを行います。
ラベル付けされた項目値はフィールド名の下部に表示されます。

![スクリーンショット 2023-04-19 15.04.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/723ee50a-0c14-7691-f104-e45d1a893742.png)
※画面右側のフィールド一覧上部の＋ボタンからFieldを選択し、名称を入力し設定します。
**画像はフリー素材を利用しています*

![スクリーンショット 2023-04-19 16.43.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/52c6b8c7-a022-44fd-f0b1-3a4bb9fd7934.png)

５枚以上のファイルのラベル付けを完了したら、右上のTrainボタンよりトレーニングを開始します。
![LhVObEamCd2x56B1681885146_1681885273.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/c91154af-f0c7-5f5d-d873-705b1680907c.png)

Model IDに任意の名称を入力、ModeにTemplateを選択しTrainボタンを押し、しばらく待つとモデルのトレーニングが完了します。
![スクリーンショット 2023-04-19 18.57.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/bce8ee57-451b-434d-9036-d0d34d4663a5.png)

参考：[ドキュメントのラベル付けについて](https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/how-to-guides/build-a-custom-model?view=form-recog-3.0.0&preserve-view=true)

今回追加設定したフィールド
<table>
  <thead>
    <tr>
      <th>フィールド名</th> <th>免許証項目</th>
    </tr>
  </thead>
  <tr>
    <td>name</td> <td>氏名</td>
  </tr>
  <tr>
    <td>address</td> <td>住所</td>
  </tr>
  <tr>
    <td>delivery</td> <td>交付日</td>
  </tr>
  <tr>
    <td>expiration date</td> <td>有効期限　　　　</td>
  </tr>
  <tr>
    <td>number</td> <td>免許証番号　　　　</td>
  </tr>
  <tr>
    <td>birthday</td> <td>生年月日　　　　</td>
  </tr>
  <tr>
    <td>condition</td> <td>免許の条件等　　　　</td>
  </tr>
</table>

##### モデルのテスト

トレーニング完了したモデルをテストします。
免許証画像*をアップロードし、Analyzeボタンを選択し、モデルのテストを開始できます。
テスト結果はメイン画面に表示され、画像から抽出された各フィールドの値が右側のナビゲーションバーに表示されます。
![スクリーンショット 2023-04-23 16.10.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/9858142b-7c5f-61cf-d69c-018e28d5f003.png)
各フィールドの抽出結果を評価し必要に応じてモデルのトレーニングを継続します。

参考：モデルの正確性を高める方法

https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/concept-accuracy-confidence?view=form-recog-3.0.0#ensure-high-model-accuracy

右側のナビゲーションバーでは、モデル利用のコードサンプル（python,javascript,C#）、テスト結果のJSONデータの確認もできます。

![スクリーンショット 2023-04-23 16.16.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256746/baf8c517-1456-cdce-505f-e18e1a1dc239.png)

また作成したモデルは、RESTAPIから呼び出すことも可能です。詳細は下記のドキュメントからご確認ください。

https://learn.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/quickstarts/get-started-sdks-rest-api?view=form-recog-3.0.0&preserve-view=true&pivots=programming-language-rest-api

### おわりに
Form Recognizer v3.0をサポートするForm Recognizer Studioを使ってのカスタムモデルの作成がGUIベースで直感的に行えました。studio上でコードサンプルも提示してくれるのでモデルを利用したアプリの作成などもスムーズに行えそうな感触を持ちました。
機能追加のペースもそれなりの頻度で行われていきそうなので今後も試していきたいと思います。