Microsoft Lobe × Power App で画像分析アプリをカンタン作成 [BUILD2022 Update]

マイクロソフトが提供する [Lobe](https://www.lobe.ai/) は、画像分析モデル(Classification)を手軽に作成、利用できるアプリです。最低5枚の画像(1タグ付けあたり)からモデルが簡単に作成でき、動画を撮りながらスナップショットで学習画像登録ができる機能などもあります。こちらモデル作成が全部ローカルアプリで完結するのが良いところですね。
さまざまなフォーマット (TensorFlow, ONNX,...) に出力したり、Web やモバイルアプリのテンプレート (React | Swift | Kotlin | Flask) として利用できたりするほか、この度 Power Platform との連携が追加されました。 

今回は、Lobe と Power Platform の連携機能を利用して、Lobe で作成したモデルを Power Platform (AI Builder) に Export して、Power Automate | Power App で使って画像分析アプリを作成する手順を紹介します。

![Lobe01-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f22111f2-3eb0-1586-91af-bab502372d0f.png)

![Lobe01-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/42066c68-12e6-0ef4-ea16-79521dc82407.png)

# 開発(?)環境

Lobe (Version 0.10.1130.5)
Mirosoft Edge (バージョン 102.0.1245.33) 64b bit
on Windows 11 Enterprise 21H2

# 手順

## 0. 事前準備

### Lobe を使って画像分析モデルを作成

[Lobe でカスタム画像分析モデルを作成してみよう](https://qiita.com/annie/items/b9ad96ffbfdb15be1a90) の手順を参考に、ローカルに Lobe をインストールして、画像分析モデルを作成しておきます。今回は同じ素材で作成した Yoga Pose モデルを利用します。
Lobe 自体のアップデートを忘れずに。(※ Lobeの利用は無料です)

### Power Platform ライセンス + AI Builder

今回は Power Platform および AI Builder を使用します。
Plan2 (Microsoft 365 付属のラインセスではなく Power Platform 専用ライセンス) 以上、かつ AI Builder ラインセンス (試用版以上) が必要です。Power Platform は Communicty Licence が、AI Builder も試用版がありますので、無料で試してみることが可能です。

(参考) https://qiita.com/yugoes1021/items/98c8a3504ac72c7fb5be

## 1. Lobe から AI Builder に ML モデルを Export

Lobe で Export したい Project を開きます。左列メニューから **[Use]** を選択し、**[Power Platform]** (の欄にある **Configure**) をクリックします。

![Lobe01-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d7e4dd93-55ec-c5e4-de4e-1c4ef8403d6a.png)

**[Sign In]** をクリックして、Power Platform へのサインインを行います。クリックするとブラウザーが開きますので、そちらで Power Platform のアカウントでサインインを行います。

![Lobe01-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/b6da0568-1b5e-27ef-cb6a-a11a0ab43d41.png)

サインインが完了すると、Lobe を開くダイアログが表示されますので、**[開く]** をクリックして Lobe の画面に戻ります。 

![Lobe01-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/c1e50d6d-70f8-31fe-cd90-c8f78a5f38e7.png)

再び Lobe から、Export するモデル名を入力し、Power Platform 環境 (Environment) を確認して、**[Export]** をクリックします。

![Lobe01-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d576d885-16ad-b63f-e4c4-7d7fba564585.png)

最初に Export するときは Optimize (最適化)するかどうかを聞かれます(の場合があります)。お急ぎの時は **[Just Export]** (時間があれば **Optimize & Export**) をクリックすると、Power Platform AI Builder に ML モデルが送信されます。

![Lobe01-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/b1746a4e-aa31-7f66-f60e-6c5befa33ebc.png)

しばらくモデルの Export 作業が行われ、完了すると *Done Exporting* と表示されます。
**[View Model]** をクリックすると、ブラウザーが開いて Export した Power Platform AI Builder の画面を開きます。

![Lobe01-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/b828e805-d41c-dea7-8d0e-b04361edd492.png)

Ai Builder の画面で、Export した ML モデルをクリックします。

![Lobe01-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/eee1620d-8ea3-1e84-0919-802693b7ee72.png)

ML モデルの内容 (ラベルなど) を確認できます。**[クリックテスト]** をクリックすると、画像をアップロードしてモデルの分析結果をテストできます。

![Lobe01-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/67997fd8-1c23-c68d-d57c-8fbf87b3fc79.png)

![Lobe01-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f22111f2-3eb0-1586-91af-bab502372d0f.png)

## 2. ML モデルを利用する Power Automate を設定

Power Platform AI Builder の画面から、**[モデルの使用]** をクリックして表示されるメニューから **[インテリジェントな自動化を構築する]** を選択、または Power Automate (https://flow.microsoft.com/) にアクセスし、**[+作成]** から新規フローの作成画面に進みます。

![Lobe01-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/834b8111-f163-1c27-f893-9b84a87666bf.png)

*一から開始(Start from blank)* から **インスタントクラウドフロー(Instant cloud flow)** をクリックします。

![Lobe01-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/26788173-dd5f-8887-bf89-aa6ddbad06d7.png)

**フロー名(Flow name)** を入力、*このフローをトリガーする方法...(Choose how to trigger...)*　は **PowerApps** を選択し、**[作成(Create)]** をクリックします。

![Lobe01-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/a6a4651e-9841-56f3-1ab4-15688e69cdf9.png)

Power Automate フローの作成画面が表示されます。
**[+新しいステップ(New step)]** をクリックして、ステップを追加します。

![Lobe01-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/3a115dae-b8d2-e2f9-f546-0c41085cc7e5.png)

**[組み込み(Build-in)]** タブをクリックして、**[データ操作(Data Operation)]** コネクターをクリックして選択、**[作成(Compose)]** アクションを選択します。(英語版ですと **input** で検索できます)

![Lobe01-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/1136f7f0-e67f-3b3c-2bb3-9f733fbaee51.png)

**[入力(input)]** の欄をクリックすると、*動的コンテンツ(Dynamic content)* ウインドウが表示されますので、**[PowerAppsで確認(Ask in PowerApps)]** をクリックして選択します。

![Lobe01-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/c042bb6a-2db7-86c2-bf62-cad95abafbf1.png)

*[作成_入力(Compose_input)]* といった項目が配置されれれば OK です。
**[+新しいステップ(New step)]** をクリックして、次のステップを追加します。

![Lobe01-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/3094a91f-f4ad-91fd-c574-ebf2d8c0ee19.png)

検索窓に **AI Builder** と入力して **AI Builder** コネクターを選択、**[Predict]** アクションを選択します。 

![Lobe01-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d21ef0b3-5276-d029-5d28-cc4cbccb92eb.png)
![Lobe01-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/3bfb188c-f44e-f83f-2b01-9ff6c3557e23.png)

*Predict* アクションの設定で、*Model* 欄はドロップダウンボックスから、ご自分で Lobe から Export したモデルを選択します。

![Lobe01-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/48fe5b33-26b4-f8c5-8a8c-72f9603d3dc5.png)

*Image* 欄は再び動的コンテンツを設定します。*動的コンテンツ(Dynamic conent)* ウインドウで **式(Expression)** をクリックします。

![Lobe01-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/b34418e4-a91d-4ff8-e0f1-a6d579144d2d.png)

入力欄に **dataUrlToBinary(replace())** と入力してから、**動的なコンテンツ(Dynamic content)** タブをクリックして、動的コンテンツである **[Output]** をクリックして入力します。数式の末尾を修正して **dataUrlToBinary(replace([Output],'"',"))** という入力に修正します。入力し終わったら **[OK]** をクリックして完了です。

> **dataUrlToBinary(value)** で *value* (Power App で取得する画像データのURL) をバイナリーデータとして取得します。その前に **replace()** を使ってURLを成形 (**"** を除去) しています。

![Lobe01-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/6bf84754-6431-0335-0182-21c0ef289fe0.png)

**[+新しいステップ(New Step)]** をクリックして、次のステップを追加します。

![Lobe01-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/db7eb63a-b832-1621-2cfc-8af792706c6e.png)

**PowerApps** と入力して **PowerApps** コネクターの **PowerApps または Flow に応答する(Respond to PowerApps or Flow)** アクションを探し、クリックして選択します。

![Lobe01-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d2afe4de-b48e-b0ca-4aa5-06a9c744df66.png)

**+出力追加(Add an output)** をクリックして、PowerApps への出力を2つ作成していきます。

![Lobe01-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/3f5a375b-28cb-1517-00e9-725c2054cbaf.png)

出力項目の1つ目として、**テキスト(Text)** をクリックします。

![Lobe01-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/412ebb5d-1057-4179-8b4f-92cc2e672b8a.png)

タイトルに **Pose** と入力し、値の欄をクリックします。

![Lobe01-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e18a9530-ae76-bc19-3d0a-c8641fe6bedd.png)

**first()** と入力した状態で **動的コンテンツ(Dynamic Content)** タブをクリックして、**[Labels]**
をクリックして入力します。**first(............)** の末尾に **['Label']** と入力して、[OK] をクリックして確定します。

> [Labels] で取得できるデータには、各ポーズの判定結果と精度が含まれています。(精度が高い順)
> (イメージ)
> [ { "Label": "Cobra", "Confidence": "0.90000"}, { "Label": "DownDog", "Confidence": "0.00023"}, ....]
> そのため、first() で最初の項目を取得し、Label と Confidence をそれぞれ取り出します。

![Lobe01-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/cc31d134-d40d-02c8-c037-23c9628b189a.png)

同様の手順で、もう一つ出力を追加します。

![Lobe01-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/4c2497b1-9c61-608c-ede9-441e5026baec.png)

出力項目の2つ目は、タイトルに **Confidence** と入力、値の欄をクリックします。
**first()** と入力した状態で **動的コンテンツ(Dynamic Content)** タブをクリックして、**[Labels]**
をクリックして入力します。今度は **first(............)** の末尾に **['Confidence']** と入力して、[OK] をクリックして確定します。

終了したら、**[保存]** をクリックしてフローを保存します。

![Lobe01-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/4c358226-4e4e-f283-f65e-06050cd76af5.png)


## 3. Power App を作成、ML モデルを利用 (Power Automate 経由)

Power Platform AI Builder の画面に戻ります。**[モデルの使用]** をクリックして表示されるメニューから **[インテリジェントアプリを構築する]** をクリックして選択します。
または Power Apps のトップページ (https://make.powerapps.com/) にアクセスし、**[+作成]** から新規アプリの作成画面に進みます。

![Lobe01-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/2321fc76-7392-7567-d0bf-2c60d98c027c.png)

Power Appps の作成画面で、必要なパーツを配置していきます。
Screen1 (初期画面) が表示された状態で、上部メニューから **[挿入]** をクリックします。

![Lobe01-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/a653be09-99f4-c96c-c98d-fb2b58aa4483.png)

まず、写真をアップロード＆表示するパーツを追加します。**挿入** メニューにある **[メディア]** > **[画像の追加]** をクリックします。 

![Lobe01-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/96103326-fffd-21d2-bbe7-0c5bceafe277.png)

右のツリービューで、追加された *画像の追加* パーツ (AddMediaWithImage1) をクリックして開きます。

![Lobe01-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/321359e4-9051-90ab-da1a-8b6c235c02d8.png)

パーツをクリックして画像がアップロードされたときの動作を設定します。
*AddMediaWithImage1* を構成している **AddMediaButton1** をクリックして選択した状態で、上部バーに表示される **[アクション]** > **[変更時]** をクリックします。

![Lobe01-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/21caa6dd-f434-d108-c8d8-283d30db9510.png)

プロパティ欄が *OnChange* になっているのを確認して、**アクション** メニューにある **[Power Automate]** をクリックします。

![Lobe01-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/c4cd18db-9c6c-bc75-390b-d861341c1298.png)

左メニューから *Power Automate* タブが表示されるので、**+フローの追加** をクリックします。

![Lobe01-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/de66f0aa-8dea-9a0c-ce32-6a4f1c9f8025.png)

**フローの追加** ウインドウから、2.で作成した Power Automate フローを選択します。

![Lobe01-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e6006f6c-5a59-1f08-cd10-bd6fdfa11896.png)

左メニュー *Power Automate* タブに表示されたら OK です。(これで Power Apps からこのフローを使えるようになります。)。左メニューの上から2つ目のアイコンをクリックしてツリービューを再表示しておきます。

![Lobe01-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/0f727d3a-3871-a7e1-5596-478fc1e8bdb4.png)

*AddMediaButton1* の *OnChange* プロパティ (の状態のまま) での数式欄をクリックして、以下の数式を入力します;
**Set(DefineYogaPoseResult,DefineYogaPose.Run(JSON(UploadedImage1.Image,JSONFormat.IncludeBinaryData)));**

> **Set(変数,value)**: 変数に *value* を代入
> **FLOWNAME.Run(input)**: *FLOWNAME* (Power Automate フロー)を実行、*input* をフローに渡す
> **JSON(データ,形式)** → フローに UploadedImage1 の画像(Image) を渡したいので、フォーマットを変換して渡します。

![Lobe01-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f0781d5f-ba5e-241f-b03a-feea06b39484.png)

画像をアップロードするパーツを配置できたので、フローで取得した情報を表示するパーツ (ラベルx3) を配置します。
上部バーの **[挿入]** メニューをクリックして、**[ラベル]** をクリックします。

![Lobe01-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/017d0c4e-d6cf-bbc4-b017-755f1aa67c75.png)

*Screen1* にラベルが追加されるので、*Text* プロパティで内容を設定します。
まずはアプリ名 (お好みの名前) を入力します。
右側に表示されるプロパティでフォントやテキストサイズなどなどお好みで変更します。

![Lobe01-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/5ae3d552-9882-440b-da00-5206b2f06b52.png)

同様の手順でラベルをもう一つ配置します。*Text* プロパティで、以下の数式を入力します;
**"Pose Name: " & DefineYogaPoseResult.pose**

> ここでは フローの戻り値(pose, confidence)が **DefineYogaPoseResult** に取得されているので、それぞれの値を取得できます。"&" を使って文字列を連結します。

![Lobe01-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/9c15f1c6-45f9-f120-5c81-d819b2a98d62.png)

同様の手順で3つ目のラベルを配置します。*Text* プロパティで、以下の数式を入力します;
**"Confidence: " & DefineYogaPoseResult.confidence**

![Lobe01-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/debc4ee6-5c22-27fc-3fed-767e2bf4ce7d.png)

設定は以上で完了です。設定内容を保存しておきます。
上部メニューの **[ファイル]** をクリックします。

![Lobe01-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/1f430bb5-9b7b-533b-7dcc-e22fc5e096e6.png)

**名前を付けて保存** 画面でお好みの名前を付けて保存しておきます。
左メニュバー **←** でアプリ編集画面に戻ります。

![Lobe01-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e5ffe9d8-002e-d14f-9227-d07767b76ce6.png)


# アプリを試す

Power Apps アプリ編集画面で、右上の **▷** (または F5) をクリックしてアプリを実行します。

![Lobe01-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d5d7b28d-9e48-eb3a-a3d5-86f0febfd63c.png)

アプリ実行画面で、画像の追加パーツをクリックして、画像をアップロードします。

![Lobe01-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/533e66c5-be55-c548-2b4d-1060c1613d26.png)

画像がアップロードされると、アプリが稼働して AI Builder モデルによる分析結果が表示されれば完了です。

![Lobe01-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/42066c68-12e6-0ef4-ea16-79521dc82407.png)