Power Apps x Power Automate x FaceAPIで自動応答システムを作る
Ignite the tour tokyo用のデモアプリを作ってたらFaceAPIを使いたくなりまして、せっかくなのでまとめておきます。
FaceAPIについて
FaceAPIはCognitive Servicesの一機能です。顔の画像を送ると、人の顔の感情とか、性別年齢などを判別できるAPIです。使うのはお金がかかったりかからなかったりします。
今回は「画像(カメラ)に顔があるか?」を取得したくて使いました。
やりたいこと
Power Appsのアプリの前(PC,タブレットの前)に来たら、自動で応答させるような仕組みを作りたかった。
人が来たことを「顔がある」ことで確認して、あとはPower Appsでなんやかんやする。
画像を取得してPower Automateに送る
カメラコントロールを設置して、StreamをPower Automate経由で送る形にしました。
OnStreamプロパティにFlowをRunする関数を入れて数秒おきにコールする感じです。
この方式だと、この仕組に使うコントロールはカメラコントロール1つのみで済みます。Good。
StreamRateを変更しないとOnStreamは走らないので注意してください。
FaceAPIの叩き方
FaceAPIを叩く方法は大きく2種類あります。
標準で用意されているコネクタを使うか、HTTPコネクタを使用するかです。
この2つには明確な違いがあります。
前者はどこかのストレージに画像が保存されていないといけません。一度Blobストレージとか、Sharepointとかに保存しないとだめです。
後者は保存しなくてOKです。バイナリを使用して直接APIを叩けます。
無駄に保存とかしたくないので今回は後者にしました。
FaceAPIリソースを準備する
AzureにFaceAPIリソースを用意しましょう。たぶんサクッとできるはず。プランによってお金がかかるので注意してください。
用意できたら、Key1とエンドポイントをメモるかとっておくかしておきます。
Power Automateの実装 全体
全体はこんな感じになります。
Power AppsからカメラのStreamを受け取って、バイナリに変換して、FaceAPI叩いて、結果を返す感じです。
バイナリ作成
作成のアクションを使用して、バイナリの変数を用意します。
上に[作成]アクションがありますが、単に引数を入れているだけなのであまり気にしないでください。
バイナリを作成するには関数dataUriToBinary()を使用します。
引数に動的なコンテンツから選択したPowerAppsの引数または上記の例ならoutputs('作成')を指定します。
FaceAPIを叩く
HTTPコネクタを使用します。
画像のように設定して、FaceAPIを叩くことができます。
URIの隠れている部分はAzureリソースで確認したエンドポイントです。ご自身のものに入れ替えます。
エンドポイント+face/v1.0/detect と入力します。
Ocp-Apim-Subscription-keyもAzureリソースで確認したkey1を入力します。
本文には、作ったバイナリを入れます。
ここで一度実行します。
実行してうまく言ったら、出力内容をコピーしてJSONスキーマを作成します。
PowerAppsに結果を返す
アクションの追加で応答を検索して追加します。
本文にHTTPコネクタの本文を入れ、詳細オプションの表示 > サンプルから生成 に上記の出力内容を貼り付けて、JSONスキーマを自動生成します。
うまく行っていれば、これで完成です。PowerAppsにカメラ画像をFaceAPIで判定した結果が戻ります。
おわり
このようにかなりスッキリした手順で試すことができます。FaceAPIで遊ぶのは結構楽しいので、是非試してみてください。
宣伝
この仕組が入ったアプリをIgnite the tour tokyoでデモしますので、お暇がありましたら是非お越しください。
1日目午前中にBizAppsデモブースにいます。
会場でお会いしましょう!