AI Builder はガノタになれるのか！？

# AIにガノタの魂は宿るのか！？

ちょっとふざけたタイトルですが、Lobe という Microsoft が公開している画像の機械学習モデルツールと AI Builder および Power Automate で、ガンプラの画像分類を試してみます。

画像分類させるのは、

* RX-0 ユニコーンガンダム（フルアーマー）
* RX-93 νガンダム
* RX-93-ν2 Hi-νガンダム（オリジナルカラー）

の3体、ガンダムが好きでないと見分けがつかないですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/8a2dd215-8153-c8df-e287-d3a4abb1dbee.png)

このガンダムに無関心な方にとってどれも同じじゃん？な画像を、果たしてAIは見分けることができるのか!?


# 注意
AI Builder は [有償プランへ](https://powerautomate.microsoft.com/ja-jp/pricing/) で利用可能です。

https://docs.microsoft.com/ja-jp/ai-builder/overview

# 1. Lobeによる機械学習

ドキュメントに従って、機械学習をしていきます。

https://docs.microsoft.com/ja-jp/ai-builder/lobe-overview



1-1. Lobeをインストール

　　下記からインストールします

https://www.lobe.ai/

1-2. [New Project]を選び
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/bb8d1bd0-1320-af24-fe10-6326ae7b038b.png)

1-3. [Label]-[Import]-[Images]の順に選択し、画像をインポートします。

:::note info
Label毎に5枚以上の画像をインポートする必要があります
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/0a09b5c7-3f7e-e6bb-52bd-93cbc6fa6edf.png)

1-4. Labelを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/74d08b4a-7f06-cfd5-867e-4d9658ae06d2.png)

1-5. 一度入力したLabelは選択が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/164defec-40fc-9319-ee52-c6a2b4a610e4.png)


1-6. すべての画像にLabelをつけましょう

　　画像精度が100％にならない場合、イメージを追加し、ラベル付けをしていきます。
　　Labelの再付与も有効です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/63c8be27-b297-d182-6566-b4c26c909a19.png)





# 2. 学習モデルを AI Builder へエクスポート

ドキュメントは以下

https://docs.microsoft.com/ja-jp/ai-builder/lobe-export

2-1. 精度が100%になったら、[Use]-[Export]-[Power Platform]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/dd47b7c6-285d-700b-c9b6-a18f7ede3869.png)

2-2. モデル名を設定し、エクスポート先のテナントを指定（ログインを求められます）後、[Export]ボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/adb66bc9-fcb8-85c5-cb6e-e57b0fd27c22.png)

2-3. ｢Optimize & Export]で最適化しつつエクスポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/5c06c3c0-b762-1d86-4ff1-3ff56fffdbec.png)

2-4. エクスポートが始まります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ab746108-679a-5225-9c74-b53c6384afd6.png)

2-5. View Modelすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/968a25fb-3c15-ec42-979b-4d3735df1f67.png)

2-6. Power Apps | AI Builder がブラウザで起動します。
　　（エクスポート先のテナントへログインしている必要があります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/958afc2b-cb46-34a1-4bf8-9a89e9b24343.png)

　　Power Automate ポータルでも確認可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/7375c768-78e5-9608-c767-a12a2b78da6f.png)





# 3. Power Automate で学習モデルを利用する

ドキュメントは以下

https://docs.microsoft.com/ja-jp/ai-builder/image-classification-model-in-flow

3-1. フローを作成します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/6061d64f-d15a-2136-a90c-d3b3fd0815ee.png)

画像分類対象のイメージは、あらかじめ OneDrive に保存しています。

利用するアクションは、[AI Builder]コネクタの[予測]アクションです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b6ed1967-d35a-530b-6643-a44fa37114b1.png)

モデルにはLobeからインポートしたモデル、画像はOneDriveより取得したイメージファイルです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ed095442-4991-a951-fce6-55d1355b3c61.png)

分類予想の信頼度は、動的な値で取得可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/9168eddc-4f7c-25a6-2d09-04f5bb13bab1.png)

結果は割合で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/227dc75d-efec-248d-da95-86ed8b47e92c.png)

この場合、結果は RX-0 と解釈できます。

以下の6つの画像で分類させてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/e603eb95-2b2b-d124-b6d9-94183c0fffa2.png)

驚くべきは左下の色違いの機体に対し、かなりの高確率で正解したこと。
また下中央の装甲を追加した機体にも正解していることです。
右下の色と形状がかけ離れた機体は流石に難しかったようですね。（設定上同じ型式なのです）

これはもう、　**AI Builder はガノタになれる！** 　と言い切ってもいいのではないでしょうか！



# おまけ

終始ふざけっぱなしの割と強引な結末の記事になってしまったので、分類結果より信頼度が最も高いラベルを取得するフローを記載しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/81844f6f-c065-1102-fe60-e4cebb4ea858.png)


[選択]アクション

```
{"id":"3b74d266-b6bc-4250-9920-417f60a03ee6","brandColor":"#8C6CFF","connectionReferences":{"shared_commondataserviceforapps":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps/connections/shared-commondataser-787098f6-2c2b-4c4b-b58e-0503f0b2210b"}},"shared_onedriveforbusiness":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness/connections/shared-onedriveforbu-113f144e-957a-4218-85e8-8708708ab413"}}},"connectorDisplayName":"データ操作","icon":"data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiA8cGF0aCBmaWxsPSIjOEM2Q0ZGIiBkPSJtMCAwaDMydjMyaC0zMnoiLz4NCiA8ZyBmaWxsPSIjZmZmIj4NCiAgPHBhdGggZD0iTTEzLjE4NyAxNC4wNzloNi4xODd2LjY2NGwtMi4zMjEgMi4zMzd2Mi40MDFoLTEuNTQ1di0yLjQwMWwtMi4zMjEtMi4zMjF6bTUuODAzLjQ5NnYtLjExMmgtNS4zODd2LjExMmwyLjMyMSAyLjMyMXYyLjIwOWguOHYtMi4yMDl6IiBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIuMjUiLz4NCiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjggMCAwIC44IDMuMTk4IDIuNjczKSIgZD0iTTYgMTYuMDdhMi4yNCAyLjI0IDAgMCAwIC45LS4xOSAyLjM2IDIuMzYgMCAwIDAgMS4yNC0xLjI0IDIuMjIgMi4yMiAwIDAgMCAuMTktLjl2LTEuMjlhOC4yMiA4LjIyIDAgMCAxIDAtMS4yNiA0LjY4IDQuNjggMCAwIDEgLjMtMS4xOSAzLjA5IDMuMDkgMCAwIDEgLjcxLTEgMy40MiAzLjQyIDAgMCAxIDEuMTQtLjc1IDMuNTEgMy41MSAwIDAgMSAxLjM0LS4yNnYxLjExYTIuMjEgMi4yMSAwIDAgMC0uOS4xOSAyLjM2IDIuMzYgMCAwIDAtMS4yNCAxLjI0IDIuMjMgMi4yMyAwIDAgMC0uMTkuOXYyYTcgNyAwIDAgMS0uMDkuOTMgMy43MyAzLjczIDAgMCAxLS4yNS44NiAzLjI3IDMuMjcgMCAwIDEtLjQ3Ljc4IDMuNDQgMy40NCAwIDAgMS0uNzcuNjkgMy40OCAzLjQ4IDAgMCAxIC43Ny42OSAzLjI5IDMuMjkgMCAwIDEgLjQ3Ljc4IDMuNzUgMy43NSAwIDAgMSAuMjUuODYgNyA3IDAgMCAxIC4wOS45M3YyYTIuMjIgMi4yMiAwIDAgMCAuMTkuOSAyLjM3IDIuMzcgMCAwIDAgMS4yMyAxLjE1IDIuMjIgMi4yMiAwIDAgMCAuOS4xOXYxLjE2YTMuNDkgMy40OSAwIDAgMS0xLjM0LS4yNiAzLjQxIDMuNDEgMCAwIDEtMS4xNC0uNzUgMy4wOSAzLjA5IDAgMCAxLS43MS0xLjA2IDQuNjcgNC42NyAwIDAgMS0uMjktMS4xOCA4LjI0IDguMjQgMCAwIDEgMC0xLjI2di0xLjI5YTIuMjMgMi4yMyAwIDAgMC0uMTktLjkgMi4zNSAyLjM1IDAgMCAwLTEuMjQtMS4yMyAyLjIyIDIuMjIgMCAwIDAtLjktLjE4em0xNC4xOS04LjEzYTMuNTEgMy41MSAwIDAgMSAxLjM0LjI2IDMuNDIgMy40MiAwIDAgMSAxLjEzLjggMy4wOSAzLjA5IDAgMCAxIC43MSAxIDQuNjggNC42OCAwIDAgMSAuMjkgMS4xOSA4LjIyIDguMjIgMCAwIDEgMCAxLjI2djEuMjlhMi4yMiAyLjIyIDAgMCAwIC4xOS45IDIuMzcgMi4zNyAwIDAgMCAxLjI0IDEuMjQgMi4yMiAyLjIyIDAgMCAwIC45LjE5djEuMTZhMi4yMSAyLjIxIDAgMCAwLS45LjE5IDIuMzYgMi4zNiAwIDAgMC0xLjI0IDEuMjQgMi4yMyAyLjIzIDAgMCAwLS4xOS45djEuMjlhOC4yNCA4LjI0IDAgMCAxIDAgMS4yNiA0LjY3IDQuNjcgMCAwIDEtLjI5IDEuMTggMy4wOSAzLjA5IDAgMCAxLS43MSAxLjA2IDMuNDEgMy40MSAwIDAgMS0xLjE0Ljc1IDMuNDkgMy40OSAwIDAgMS0xLjM0LjI2di0xLjE1YTIuMjQgMi4yNCAwIDAgMCAuOS0uMTkgMi4zNiAyLjM2IDAgMCAwIDEuMjQtMS4yNCAyLjIyIDIuMjIgMCAwIDAgLjE5LS45di0yYTcgNyAwIDAgMSAuMDctLjg4IDMuNzUgMy43NSAwIDAgMSAuMjUtLjg2IDMuMjkgMy4yOSAwIDAgMSAuNDctLjc4IDMuNDggMy40OCAwIDAgMSAuNzctLjY5IDMuNDQgMy40NCAwIDAgMS0uNzgtLjY3IDMuMjcgMy4yNyAwIDAgMS0uNDctLjc4IDMuNzMgMy43MyAwIDAgMS0uMjUtLjg2IDcgNyAwIDAgMS0uMDktLjkzdi0yYTIuMjMgMi4yMyAwIDAgMC0uMTktLjkgMi4zNSAyLjM1IDAgMCAwLTEuMjQtMS4yNCAyLjIyIDIuMjIgMCAwIDAtLjktLjE5di0xLjE2eiIvPg0KIDwvZz4NCjwvc3ZnPg0K","isTrigger":false,"operationName":"選択","operationDefinition":{"type":"Select","inputs":{"from":"@outputs('予測')?['body/responsev2/predictionOutput/Labels']","select":"@item()?['Confidence']"},"runAfter":{"予測":["Succeeded"]},"metadata":{"operationMetadataId":"2d63ba84-deb3-428f-8f5a-3cc468a3ce68"}}}
```
[アレイのフィルター処理]アクション

```
{"id":"35929696-f607-4d59-a240-b81dbc11c940","brandColor":"#8C6CFF","connectionReferences":{"shared_commondataserviceforapps":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps/connections/shared-commondataser-787098f6-2c2b-4c4b-b58e-0503f0b2210b"}},"shared_onedriveforbusiness":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness/connections/shared-onedriveforbu-113f144e-957a-4218-85e8-8708708ab413"}}},"connectorDisplayName":"データ操作","icon":"data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiA8cGF0aCBmaWxsPSIjOEM2Q0ZGIiBkPSJtMCAwaDMydjMyaC0zMnoiLz4NCiA8ZyBmaWxsPSIjZmZmIj4NCiAgPHBhdGggZD0iTTEzLjE4NyAxNC4wNzloNi4xODd2LjY2NGwtMi4zMjEgMi4zMzd2Mi40MDFoLTEuNTQ1di0yLjQwMWwtMi4zMjEtMi4zMjF6bTUuODAzLjQ5NnYtLjExMmgtNS4zODd2LjExMmwyLjMyMSAyLjMyMXYyLjIwOWguOHYtMi4yMDl6IiBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIuMjUiLz4NCiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjggMCAwIC44IDMuMTk4IDIuNjczKSIgZD0iTTYgMTYuMDdhMi4yNCAyLjI0IDAgMCAwIC45LS4xOSAyLjM2IDIuMzYgMCAwIDAgMS4yNC0xLjI0IDIuMjIgMi4yMiAwIDAgMCAuMTktLjl2LTEuMjlhOC4yMiA4LjIyIDAgMCAxIDAtMS4yNiA0LjY4IDQuNjggMCAwIDEgLjMtMS4xOSAzLjA5IDMuMDkgMCAwIDEgLjcxLTEgMy40MiAzLjQyIDAgMCAxIDEuMTQtLjc1IDMuNTEgMy41MSAwIDAgMSAxLjM0LS4yNnYxLjExYTIuMjEgMi4yMSAwIDAgMC0uOS4xOSAyLjM2IDIuMzYgMCAwIDAtMS4yNCAxLjI0IDIuMjMgMi4yMyAwIDAgMC0uMTkuOXYyYTcgNyAwIDAgMS0uMDkuOTMgMy43MyAzLjczIDAgMCAxLS4yNS44NiAzLjI3IDMuMjcgMCAwIDEtLjQ3Ljc4IDMuNDQgMy40NCAwIDAgMS0uNzcuNjkgMy40OCAzLjQ4IDAgMCAxIC43Ny42OSAzLjI5IDMuMjkgMCAwIDEgLjQ3Ljc4IDMuNzUgMy43NSAwIDAgMSAuMjUuODYgNyA3IDAgMCAxIC4wOS45M3YyYTIuMjIgMi4yMiAwIDAgMCAuMTkuOSAyLjM3IDIuMzcgMCAwIDAgMS4yMyAxLjE1IDIuMjIgMi4yMiAwIDAgMCAuOS4xOXYxLjE2YTMuNDkgMy40OSAwIDAgMS0xLjM0LS4yNiAzLjQxIDMuNDEgMCAwIDEtMS4xNC0uNzUgMy4wOSAzLjA5IDAgMCAxLS43MS0xLjA2IDQuNjcgNC42NyAwIDAgMS0uMjktMS4xOCA4LjI0IDguMjQgMCAwIDEgMC0xLjI2di0xLjI5YTIuMjMgMi4yMyAwIDAgMC0uMTktLjkgMi4zNSAyLjM1IDAgMCAwLTEuMjQtMS4yMyAyLjIyIDIuMjIgMCAwIDAtLjktLjE4em0xNC4xOS04LjEzYTMuNTEgMy41MSAwIDAgMSAxLjM0LjI2IDMuNDIgMy40MiAwIDAgMSAxLjEzLjggMy4wOSAzLjA5IDAgMCAxIC43MSAxIDQuNjggNC42OCAwIDAgMSAuMjkgMS4xOSA4LjIyIDguMjIgMCAwIDEgMCAxLjI2djEuMjlhMi4yMiAyLjIyIDAgMCAwIC4xOS45IDIuMzcgMi4zNyAwIDAgMCAxLjI0IDEuMjQgMi4yMiAyLjIyIDAgMCAwIC45LjE5djEuMTZhMi4yMSAyLjIxIDAgMCAwLS45LjE5IDIuMzYgMi4zNiAwIDAgMC0xLjI0IDEuMjQgMi4yMyAyLjIzIDAgMCAwLS4xOS45djEuMjlhOC4yNCA4LjI0IDAgMCAxIDAgMS4yNiA0LjY3IDQuNjcgMCAwIDEtLjI5IDEuMTggMy4wOSAzLjA5IDAgMCAxLS43MSAxLjA2IDMuNDEgMy40MSAwIDAgMS0xLjE0Ljc1IDMuNDkgMy40OSAwIDAgMS0xLjM0LjI2di0xLjE1YTIuMjQgMi4yNCAwIDAgMCAuOS0uMTkgMi4zNiAyLjM2IDAgMCAwIDEuMjQtMS4yNCAyLjIyIDIuMjIgMCAwIDAgLjE5LS45di0yYTcgNyAwIDAgMSAuMDctLjg4IDMuNzUgMy43NSAwIDAgMSAuMjUtLjg2IDMuMjkgMy4yOSAwIDAgMSAuNDctLjc4IDMuNDggMy40OCAwIDAgMSAuNzctLjY5IDMuNDQgMy40NCAwIDAgMS0uNzgtLjY3IDMuMjcgMy4yNyAwIDAgMS0uNDctLjc4IDMuNzMgMy43MyAwIDAgMS0uMjUtLjg2IDcgNyAwIDAgMS0uMDktLjkzdi0yYTIuMjMgMi4yMyAwIDAgMC0uMTktLjkgMi4zNSAyLjM1IDAgMCAwLTEuMjQtMS4yNCAyLjIyIDIuMjIgMCAwIDAtLjktLjE5di0xLjE2eiIvPg0KIDwvZz4NCjwvc3ZnPg0K","isTrigger":false,"operationName":"アレイのフィルター処理","operationDefinition":{"type":"Query","inputs":{"from":"@outputs('予測')?['body/responsev2/predictionOutput/Labels']","where":"@equals(item()?['Confidence'], max(body('選択')))"},"runAfter":{"選択":["Succeeded"]},"metadata":{"operationMetadataId":"3f96f26e-b6c1-415e-9cad-34ab21e2bfcf"}}}
```

以下のように、最も高い信頼度のオブジェクトが取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/c6ff240c-6904-e148-8536-f91fe25f9d06.png)


# おわりに

Lobeを利用すると、手軽に高精度の画像分類が可能です。
是非、遊びましょう！