Workato：WorkatoのAI OCR機能「IDP by Workato」を試してみる

:::note  info
本記事と併せて以下の記事もご覧ください。

[Workato：IDP by Workatoで文字認識を行う際の注意事項](https://qiita.com/tabimoba/items/1bc356821e3ef4daff81)

[Workato：IDP by Workatoでフィールドを認識させるために必要な手順](https://qiita.com/tabimoba/items/54ffc285cd3cddd9e55c)

:::

# IDP by Workatoとは

「IDP (Inteligent Document Processing) by Workato」は、画像やPDFからデータを抽出し、自動化ワークフローに組み込むための強力なのAI OCR機能です。請求書や領収書などのドキュメントから必要な情報を効率的に取得し、業務プロセスを最適化できます。 

https://www.workato.com/platform/idp

https://docs.workato.com/connectors/idp-by-workato.html

# IDP by Workatoの主な特徴

- **スキーマフリー**: ドキュメントの構造に関係なく、任意のタイプのドキュメントを処理できます。 

- **手書き文字の認識**: 手書きのテキストも処理可能で、多様なドキュメントやユースケースに対応します。 

- **多言語対応**: 国際的なドキュメントや請求書など、複数の言語をサポートしています。 もちろん、日本語も処理可能です。

# 請求書の読み取りを試してみる

AI OCRされる紙文書の代表格の１つとして、請求書があります。

例えば、改正電子帳簿保存法（改正電帳法）のスキャナ保存においては、単純にスキャナで紙文書（請求書）を保存するだけではなく、改正電帳法に沿った検索要件を満たす必要があります。人力で対応する方法もありますが、WorkatoでOCRを活用することで、保存文書に対するメタデータの付与やフォルダ分類の自動化が実現でき、業務の省力化にもつながります。

今回は、画像化された請求書をもとに、IDP by WorkatoでOCRを試してみました。なお、請求書のサンプルは、Hubspotのサイトに掲載されているテンプレートのサムネイル画像を使用しました。

https://www.hubspot.jp/business-templates/japanese-invoice?exp-cohort=dist-0031-control

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ab5e8890-545e-3e57-84d9-fbf947acd112.png" width="400">


## レシピ

OCR結果をGoogle Sheetsへ転記するレシピを作成してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/82069aad-775a-33ab-7f19-ea7a63f710d7.png)

IDP by Workatoのアクションでは、読み取り条件を設定します。設定は、ファイルコンテンツ（ファイルの中身）、ファイル名、ファイルタイプ（jpg, png, pdfなど）、ドキュメントタイプ（領収書、請求書、その他ドキュメント）、スキーマ設定のみと、非常にシンプルです。

また、IDP by Workatoは文書内の値と対応するフィールドを自動的に判別するため、テンプレートを用意して、認識範囲をマッピングするような作業は不要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/d215b349-6806-41c5-ee89-167d530e9558.png)


Google Sheetsアクションでは、各列のフィールドに対して、IDP by Workatoのデータピルをマッピングするだけで連携が可能です。これ以外の難しい手順は発生しません。まGoogle Sheetsに限らず、kintoneやSmartDBなど、他のアプリケーションとの連携も同様の要領で連携が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/561623f7-1b21-204d-4b2d-79ad50a8b012.png)

## 実行結果

このレシピを実行すると、次のようにGoogle Sheetsへ明細項目が連携されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ef3af147-661c-1424-ae44-b8ba81e1b1a8.png)

発行日や請求書番号、請求元情報なども、もちろん認識しています。詳細は以下の認識結果を展開のうえご確認ください。

<details>
<summary>認識結果（クリックすると確認できます）</summary>

```json
{
	"values": {
		"invoice_number": "INV_20220630",
		"invoice_date": "2022/06/30",
		"due_date": "2022/07/31",
		"order_date": null,
		"total_amount": 2200000,
		"line_items": [
			{
				"no": 1,
				"product_name": "DMデザイン",
				"quantity": 10,
				"unit": "セット",
				"unit_price": 100000,
				"price": 1000000,
				"description": "月日納納"
			},
			{
				"no": 2,
				"product_name": "DMデザイン",
				"quantity": 5,
				"unit": "セット",
				"unit_price": 100000,
				"price": 500000,
				"description": "○○○○○○○○"
			},
			{
				"no": 3,
				"product_name": "ポスター印刷",
				"quantity": 1000,
				"unit": "枚",
				"unit_price": 500,
				"price": 500000,
				"description": null
			}
		],
		"vendor_address": {
			"vendor_name": "株式会社テンプレート",
			"street_address_1": "東京都○区○町1-2-3",
			"street_address_2": "○○ビル10階",
			"city": null,
			"state": null,
			"zip_code": "123-4567",
			"country": null
		},
		"recipient_address": {
			"recipient_name": null,
			"street_address_1": null,
			"street_address_2": null,
			"city": null,
			"state": null,
			"zip_code": null,
			"country": null
		},
		"vendor_phone": "01-2345-6789",
		"vendor_url": null,
		"vendor_gst_number": null,
		"vendor_email": null,
		"recipient_phone": null,
		"recipient_url": null,
		"recipient_gst_number": null,
		"recipient_email": null,
		"purchase_order_number": null,
		"subtotal": 2000000,
		"tax_amount": 200000,
		"discount": null,
		"payment_terms": null,
		"notes": null,
		"shipping_fee": null,
		"service_charge": null,
		"account_number": "1234567890",
		"bank_code": null,
		"swift_number": null,
		"payment_method": null,
		"terms_and_conditions": null,
		"bank_name": "○○○銀行",
		"branch_name": "○○支店"
	},
	"confidence_scores": {
		"invoice_number": 0.9999,
		"invoice_date": 0.9999,
		"due_date": 0.9999,
		"order_date": 0.9999,
		"total_amount": 0.9999,
		"line_items": [
			{
				"no": 0.9999,
				"product_name": 0.9998,
				"quantity": 1,
				"unit": 0.9999,
				"unit_price": 0.9999,
				"price": 0.9999,
				"description": 0.7818
			},
			{
				"no": 0.9999,
				"product_name": 0.9999,
				"quantity": 0.9999,
				"unit": 0.9999,
				"unit_price": 0.9999,
				"price": 0.9999,
				"description": 0.8676
			},
			{
				"no": 1,
				"product_name": 0.9999,
				"quantity": 0.9999,
				"unit": 0.9999,
				"unit_price": 0.9999,
				"price": 0.9999,
				"description": 0.9458
			}
		],
		"vendor_address": {
			"vendor_name": 0.9996,
			"street_address_1": 0.9747,
			"street_address_2": 0.9522,
			"city": 0.9332,
			"state": 0.9999,
			"zip_code": 0.998,
			"country": 0.9853
		},
		"recipient_address": {
			"recipient_name": 0.8773,
			"street_address_1": 0.9998,
			"street_address_2": 0.9999,
			"city": 0.9999,
			"state": 0.9999,
			"zip_code": 0.9999,
			"country": 0.9999
		},
		"vendor_phone": 0.9999,
		"vendor_url": 0.9999,
		"vendor_gst_number": 0.9999,
		"vendor_email": 0.9999,
		"recipient_phone": 0.9999,
		"recipient_url": 1,
		"recipient_gst_number": 0.9999,
		"recipient_email": 0.9999,
		"purchase_order_number": 0.9999,
		"subtotal": 1,
		"tax_amount": 0.9999,
		"discount": 0.9999,
		"payment_terms": 0.9999,
		"notes": 0.975,
		"shipping_fee": 0.9999,
		"service_charge": 0.9999,
		"account_number": 0.9999,
		"bank_code": 0.9999,
		"swift_number": 0.9999,
		"payment_method": 0.9994,
		"terms_and_conditions": 0.9999,
		"bank_name": 0.9263,
		"branch_name": 0.9462
	},
	"remaining_calls": 493,
	"consumed_calls": 7,
	"reset_time": "2024-12-11T17:08:33.000000+09:00"
}
```
</details>

なお、スキーマに存在しない項目は後から追加することができます。例えば、上記のスキーマに無い宛名も認識させたい場合は、スキーマを編集することで、以下のように認識させることが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/468324eb-5dd8-f625-0887-9a49dc156de9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e5ee58e0-7421-8bd9-a328-e12fa8e63f77.png)

<details>
<summary>認識結果（クリックすると確認できます）</summary>

```json
{
	"values": {
		"invoice_number": "INV_20220630",
		"invoice_date": "2022/06/30",
		"due_date": "2022/07/31",
		"order_date": null,
		"total_amount": 2200000,
		"line_items": [
			{
				"no": 1,
				"product_name": "DMデザイン",
				"quantity": 10,
				"unit": "セット",
				"unit_price": 100000,
				"price": 1000000,
				"description": "月日納納"
			},
			{
				"no": 2,
				"product_name": "DMデザイン",
				"quantity": 5,
				"unit": "セット",
				"unit_price": 100000,
				"price": 500000,
				"description": "○○○○○○○○"
			},
			{
				"no": 3,
				"product_name": "ポスター印刷",
				"quantity": 1000,
				"unit": "枚",
				"unit_price": 500,
				"price": 500000,
				"description": null
			}
		],
		"vendor_address": {
			"vendor_name": "株式会社テンプレート",
			"street_address_1": "東京都○区○町1-2-3",
			"street_address_2": "○○○ビル10階",
			"city": null,
			"state": null,
			"zip_code": "123-4567",
			"country": null
		},
		"recipient_address": {
			"recipient_name": "○○株式会社",
			"street_address_1": "○○○○",
			"street_address_2": null,
			"city": null,
			"state": null,
			"zip_code": null,
			"country": null
		},
		"vendor_phone": "01-2345-6789",
		"vendor_url": null,
		"vendor_gst_number": null,
		"vendor_email": null,
		"recipient_phone": null,
		"recipient_url": null,
		"recipient_gst_number": null,
		"recipient_email": null,
		"purchase_order_number": null,
		"subtotal": 2000000,
		"tax_amount": 200000,
		"discount": null,
		"payment_terms": null,
		"notes": null,
		"shipping_fee": null,
		"service_charge": null,
		"account_number": "1234567890",
		"bank_code": null,
		"swift_number": null,
		"payment_method": null,
		"terms_and_conditions": null,
		"bank_name": "○○○銀行",
		"branch_name": "○支店",
		"subject": "○○キャンペーン販促ツール一式"
	},
	"confidence_scores": {
		"invoice_number": 0.9999,
		"invoice_date": 0.9999,
		"due_date": 0.9999,
		"order_date": 0.9999,
		"total_amount": 0.9999,
		"line_items": [
			{
				"no": 0.9999,
				"product_name": 0.9999,
				"quantity": 1,
				"unit": 0.9999,
				"unit_price": 0.9999,
				"price": 0.9999,
				"description": 0.7273
			},
			{
				"no": 0.9999,
				"product_name": 0.9999,
				"quantity": 0.9999,
				"unit": 0.9999,
				"unit_price": 0.9999,
				"price": 0.9999,
				"description": 0.8748
			},
			{
				"no": 1,
				"product_name": 0.9999,
				"quantity": 0.9999,
				"unit": 0.9999,
				"unit_price": 0.9999,
				"price": 0.9999,
				"description": 0.9615
			}
		],
		"vendor_address": {
			"vendor_name": 0.9994,
			"street_address_1": 0.9764,
			"street_address_2": 0.9734,
			"city": 0.8884,
			"state": 0.9999,
			"zip_code": 0.9968,
			"country": 0.9813
		},
		"recipient_address": {
			"recipient_name": 0.9259,
			"street_address_1": 0.8458,
			"street_address_2": 0.9925,
			"city": 0.9999,
			"state": 0.9999,
			"zip_code": 0.9999,
			"country": 0.9999
		},
		"vendor_phone": 0.9999,
		"vendor_url": 0.9999,
		"vendor_gst_number": 0.9999,
		"vendor_email": 0.9998,
		"recipient_phone": 0.9995,
		"recipient_url": 0.9999,
		"recipient_gst_number": 0.9999,
		"recipient_email": 0.9999,
		"purchase_order_number": 0.9999,
		"subtotal": 0.9999,
		"tax_amount": 0.9999,
		"discount": 0.9999,
		"payment_terms": 0.9999,
		"notes": 0.9884,
		"shipping_fee": 0.9999,
		"service_charge": 0.9999,
		"account_number": 0.9999,
		"bank_code": 0.9998,
		"swift_number": 0.9999,
		"payment_method": 0.9994,
		"terms_and_conditions": 0.9999,
		"bank_name": 0.9357,
		"branch_name": 0.8998,
		"subject": 0.9963
	},
	"remaining_calls": 489,
	"consumed_calls": 11,
	"reset_time": "2024-12-11T17:08:33.000000+09:00"
}
```
</details>


# まとめ

IDP by Workatoを利用することで、Workatoだけで（他のOCRソリューションを用意することなく）OCRを実現することが出来ます。

また、日本語を含め国際化対応されていますので、日本のWorkatoユーザーもすぐに利用を開始することが可能です。（ただし、利用可能なプランの制限はありますので、詳細はWorkatoを契約中のパートナーへご確認ください）

Workatoを既にお使いの場合は、是非IDP by Workatoをお試しください。また、これからWorkatoを検討中の方で興味を持たれた方は、是非この機会にWorkatoをご検討ください。