【Power Apps】カスタムプロンプトとOCRを使ってデータ入力を簡単にする方法

Power Apps でカスタムプロンプトが使えるようになりました。
そこで今回は、以前から使用できるOCR機能と組み合わせて、データ入力を簡単にする方法をご紹介します。
データの入力項目が多い場合は役立つ方法ですので、最後まで見てもらえると嬉しいです！

# 目次
1. 事前準備
1. OCRアプリ作成
1. カスタムプロンプト作成
1. カスタムプロンプトをアプリで使用
1. 動作確認
1. 参考資料


# 事前準備

今回は、食べ物の商品の裏面から、栄養素を自動で入力するアプリを作成します。

まずは、データを入力するためのテーブルをDataverseに用意します。
Copilotを使ってテーブルを自動生成してもらいました。
Copilotで作った場合、サンプルデータも自動で用意してくれるのがありがたいですよね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/14d43f26-9391-9e9d-f344-10ad53b1a77e.png)

Copilotを使ったテーブル生成方法は以下を参考にしてください。

https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/ai-conversations-create-app#review-the-table


# OCRアプリ作成

さっそくアプリを作っていきましょう。
OCR機能を使ったアプリ作成は、AIモデルから選ぶと簡単に作成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/06e87ca5-76e8-da38-537e-d59ff051b550.png)

OCRの詳細は以下を参考にしてください。

https://learn.microsoft.com/ja-jp/ai-builder/prebuilt-text-recognition


「写真やPDFドキュメントからすべてのテキストを抽出する(OCR)」を選択し、「事前構築済みモデルを利用する」の「アプリ内で使う」を選択すると、アプリ開発画面へ遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/b7a0bb06-78a2-c86d-3ec7-98c88ef67ee0.png)

試しに使用する画像を用意しておきます。
普段よく食べるタブレットを写真を撮影しました。

![DSC_002290.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/2df95e68-5765-4dfb-c5b0-623f14d8bbf7.jpeg)

アプリ開発画面では既に写真をアップロードするためのコンポーネントが用意されているはずです。
そこでプレビュー画面を開き、先ほど撮影した写真を入れてみましょう。

その後にテキストラベルを用意し、Textに「TextRecognizer1.FullText」と入力するとOCRで読み取った全てのテキストが出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/8daa980c-ddaf-36f0-2217-b3e9037e6960.png)

このフルテキストはカスタムプロンプトで使用するのでコピーしておきましょう。


# カスタムプロンプト作成

アプリ開発画面とは別に[Power Apps](https://make.powerapps.com/)画面を立ち上げます。

プロンプト作成方法はこちらを参考にしました。

https://learn.microsoft.com/ja-jp/ai-builder/create-a-custom-prompt


今度はAIプロンプトから「独自のプロンプトを作成する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/12ac92ee-40be-2088-7b47-2e864c349942.png)

右側にあるアイコンの中から一番上を選択すると入力データを追加できます。
名前を「OCRデータ」にします。
サンプルデータは先ほどコピーしたOCRデータをペーストしておきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/bcdeb335-4eb0-9ef7-5c1a-37d887a6552c.png)


入力データはプロンプトで「/」を入力すると選択可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/b43a33d9-b132-df26-0ab7-9a37535cd1a8.png)

プロンプトの結果はアプリ内で使用するためJSON形式にします。
右側の上から3つ目のアイコンで出力形式を変えられます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/9985975c-210a-b633-45a7-18d5691f4fdf.png)

プロンプトは以下のように設定しました。
出力するJSONのキーは英語をおすすめします。

```
/OCRデータ から、商品名、エネルギー(kcal)、タンパク質(g)、脂質(g)、炭水化物(g)を正確に抜き出してJSON形式で出力してください。

(例)
{
"name": "おにぎり"
"energy": 200,
"protein": 10,
"lipid": 10,
"carbohydrate": 10
}
```

テストをすると期待通りの結果が得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/dc2ec0a2-53a6-6a4c-65d0-ced31d62ba60.png)


最後に名前をつけてカスタムプロンプトを保存します。


# カスタムプロンプトをアプリで使用

OCRアプリに戻ります。
左にあるアイコンの「データ」から「データの追加」を選択します。
AIモデルから、先ほど作成したカスタムプロンプトを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/acf4a6d4-1bb7-fa55-46df-0e654a9ab0fc.png)


出てこない場合は、AIモデル横の三点から「最新の情報に更新」を押してからもう一度探してみましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/abeff5a9-0e8e-d160-1ef8-aa56a1e18b7d.png)

TextRecognizer1のOnchengeで図のように変数をセットします。
ここでカスタムプロンプトを呼び出し、構造化された出力データを受け取っています。
この状態でプレビュー画面を開き、もう一度画像をアップロードしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/8df6cbd8-a3c6-8998-6f06-9336f24979bd.png)

OCRDataという変数の中身を見ると、カスタムプロンプトの結果をレコード形式でキャッチできているのがわかるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/d7734da9-20a0-7c71-d042-47c1eee0086d.png)

最後にこの変数をフォームの中にセットします。
フォームを追加して各入力項目のDefault値をOCRDataのいずれかの値に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/0e53d054-4d14-b9a3-07b2-44387b4ba221.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/4b153843-7f91-5de4-4b02-abce1f615ece.png)


# 動作確認

アプリを動かしてみましょう。
今回はこちらの写真を使ってみます。

![DSC_0165.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/ddf9347f-281a-6758-befe-ad8fd4e090cc.jpeg)

パッケージがよれていてOCR機能が正常に動くか怪しいですが、
正常に読み込めました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599668/eff86e26-698e-a4e6-c191-391f81ffd66b.png)

たんぱく質の表記が漢字になっていましたが、生成AIがフォローしてくれるので多少の表記ゆれにも対応できそうな気がしています！
今回はフード商品の一括表示を題材にしましたが、幅広いシーンで応用が利くのではないでしょうか？
ローコードでOCRを使ったアプリができる点もおすすめポイントです！
皆さんも試しに使ってみてください！

# 参考資料
https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/ai-conversations-create-app#review-the-table

https://learn.microsoft.com/ja-jp/ai-builder/prebuilt-text-recognition

https://learn.microsoft.com/ja-jp/ai-builder/create-a-custom-prompt