Power AppsとPower Automateで火星に行ってみよう！

#いま火星が熱い！
2021年2月19日未明に、NASAの火星探査ローバー「パーセベランス」が火星に着陸しました。
火星から送られてくる息をのむほど美麗で、しかし生のない世界の写真に惹かれます。
「火星の風の音」にも感動を覚えましたし、プロジェクトに携わった方々のコメントに涙しました。
さらに、映画「オデッセイ」を鑑賞し、原作の「火星の人」も読破してしまいました。
・・・要するに、火星にハマってます（笑

######そして、NASAからは上記以外にも、火星に行った気分になれる小粋なプレゼンをまで用意してくれました。
####[Mars Perseverance Photo Booth](https://mars.nasa.gov/mars2020/participate/photo-booth/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/43c21986-6d31-a561-17dd-cccb81ce92d1.png)

「Welcome to Mars! We can't take you to Mars (yet!) but we can bring the Red Planet to you.」
とか気が利いてますね。

また、ちょうど[おうじゃさんといっしょ](https://oujasan-to-issho.connpass.com/)コミュニティで、@ishiayayaさんから、
######「[removebg](https://www.remove.bg/ja)」という、高精度で写真の背景を切り抜いてくれるWebサービス
を教えてもらえました。
このremovebg、APIも提供してくれています。
さらに、別の背景も設定可能です。
これはもうセルフ「Mars Perseverance Photo Booth」を作るしかない。

ということで火星で記念写真が撮れるツールを作ってみました。

#準備
[removebg](https://www.remove.bg/ja)を利用するには、ユーザー登録しAPI Keyを取得する必要があります。
画面右上の「ログイン/登録する」よりユーザー登録し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/cab0a55b-50c1-4255-f57f-df679f617630.png)
画面上部の「ツール＆API」より
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ad7044e2-ccb0-0e97-b9f8-b9ab78474cb3.png)

「API Docs」を選択し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/1e6d7324-8538-545f-05dc-6f17aea16b16.png)

「Get API Key」をクリックし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/fcbfd6ca-780a-0c01-ae30-266f160daa05.png)

API Keyを表示して、コピーしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ceaccec8-bc83-541f-c614-7806ef6112e7.png)

#注意
今回はPower AutomateにてHTTPコネクタを利用します。これはプレミアムコネクタとなるため別途Automateの有償ライセンスが必要です。
お試しいただく際は、無償、無期限の個人向けプランをお勧めします。
[PowerApps Community Plan](https://powerapps.microsoft.com/ja-jp/communityplan/)

#全体の流れ
Power Appsにて画面を作成し、AutomateでAPIコネクタを作成していきます。

#Power Appsの作成
テキストインプットを２つと、画像コントロールを３つ、ボタンを配置してください。
位置や名前は任意で大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/169ccbab-7ade-7d5c-cfda-0b76935b43a8.png)
（イメージ右上のラベルコントロールは不要です）


画像コントロール1の[Image]プロパティに、テキストインプット1の[Text]プロパティを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/898c500f-f498-b677-8525-13d51b2a65cc.png)

画像コントロール2とテキストインプット2にも同様に設定してください。

#Power Automateの作成
続いて、画面左上の[アクション]メニューより、[Power Automate]を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/f1b660ef-73c1-7832-2d68-3d1f4218ae35.png)

現れたペインで[新しいフローの作成]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b7289f0c-60c5-8409-4bcf-16dfc7585423.png)

表示したPower Automate画面で「＋作成」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ffddc569-3026-3194-6493-402315cd3f3c.png)

[インスタント クラウド フロー]を選択し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/740bc5fc-4673-d048-fbb9-1a08f396ce3c.png)

任意のフロー名を入力し、[Power Apps]を選択、[作成]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/e3bf81a4-96de-0043-91b1-d518e6c1731a.png)

新しいアクションをクリックし、"HTTP"で検索。[HTTP]を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/756b35f4-c739-21ab-e555-d1f6d14e609b.png)

さらに[HTTP]を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/7be30e67-51c3-160e-5148-362b30ad8c84.png)

下記の値を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ed33ab45-2eee-ad14-e22b-f10c8d3892a9.png)

■方法
POST

■URL

```
https://api.remove.bg/v1.0/removebg
```

■ヘッダー

|Key|Value|
|:------|--------------------------------------:|
|accept|application/json|
|X-API-Key|[上記の準備で取得したremovebgのAPI Key]|
|Content-Type|application/x-www-form-urlencoded|

■本文

```
al&image_url=@{triggerBody()['HTTP_本文']}&bg_image_url=@{triggerBody()['HTTP_本文_1']}
```


######本文部分は下記のように設定ください。
Power Apps からの引数設定その１
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/fdfc1cf0-b918-3165-6eae-8143dae009b5.png)

Power Apps からの引数設定その２
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/ffe69fc5-d6c3-69dd-7620-54f72a7ae8d5.png)
こうなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/80a483bc-aa74-a2fc-fc4d-4f626a35ed41.png)


#####APIからのレスポンスは下記の構造をもつJSONオブジェクトとなります。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/13bea332-7d26-74d7-5d21-cb8655d4001b.png)

AutomateでのJSONへのアクセスは、
####[HIROさん](https://twitter.com/mofumofu_dance)の「[JSONと仲良くなるために (4)](https://mofumofupower.hatenablog.com/entry/2020/09/04/164851)」がとても参考になると思います。


レスポンスJSONから、"result_b64"の値を取得します。


「種類」を"文字列"で変数を初期化を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/5b4b30de-1d97-918b-50ec-bcc7b5eecfc2.png)

値には、動的なコンテンツの追加で、「式」を選択し

```
?['data']?['result_b64']
```

を入力後、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/bc8e8ee6-7782-6fdf-b771-04bf5cd9f38e.png)

「動的なコンテンツ」に切り替え、カーソルを先頭に移動し、本文を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/edf271ac-b06a-4ec3-dd38-7b6405665307.png)
OKをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/0ef0875c-2267-eeb6-f464-7cf45859b10c.png)







最後に「Power Apps または Flow に応答する」を選択し、テキストとして、上記変数を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/e63ff8be-1a01-16a1-464a-6d7fa83a415c.png)

保存して、Power Appsの画面に戻りましょう。

#再びPower Appsの作成
画面左上の[アクション]メニューより、[Power Automate]を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/f1b660ef-73c1-7832-2d68-3d1f4218ae35.png)

今作ったフローを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b8a6d3fc-c328-45ac-0c03-4104e4378bf6.png)

上部の関数バーに、フローの呼び出し数式が表示されるので切り取りし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b8af2b5f-7b10-0491-13b4-c97a97cde5ad.png)

ボタンの[OnSelect]プロパティに貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/057fcd69-7e52-d31f-104b-2bc8489ec2f7.png)

前後に、Set関数とテキストインプット1および2の[Text]プロパティを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/c8a393d5-35e6-640b-4556-b567c3399cfe.png)

こんな感じになると思います。

```
Set( return_Flow, Call_removebgAPI_from_Apps.Run(TextInput1.Text,TextInput2.Text))
```

※フロー名やコレクション名などは、ご自身で命名された値を入力ください。



最後に、（未設定の）画像コントロール3の[Image]プロパティに、下記値を設定して完了です。

```
Concatenate("data:image/png;base64,", return_Flow.return)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/73854bc8-050a-41c2-2249-a4df16fdc491.png)



#いざ！火星に行こう！
テキストインプット1に、One Drive などに保存した、ご自身の写真のURL
テキストインプット2に、[Nasaのギャラリー](https://www.nasa.gov/mission_pages/msl/images/index.html)より取得した火星地表のの写真のURL
を入力し、ボタンを押下します
######本来の背景抜き機能を利用する場合は、テキストインプット2に何も入力せずにボタンを押してください。



太々しいぬこが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/86d9e0f9-fbb6-e09c-0bde-054521a09273.png)

無事、火星に着陸できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/da4e271f-410e-1394-2393-e057ea2122ce.png)

合成後の画像ファイルを取得するには、
画像コントロール3の[Image]プロパティに設定した値を、ラベルコントロール等にも表示し、『Base64から画像変換』するWebサービスでデコードしてください。


#まとめ
今回、このremovebgというツールを教えてくださった石川陽一さん（@ishiayaya）に感謝いたします。