Power Automate でフローを作成する
Power Automate で実装する機能は以下です。
- Power Apps からのオーディオデータ取得
- Azure Functions にオーディオデータ(webm )を渡して「wav」に変換する
- Speech to Text にオーディオデータ(wav )を渡して解析を行う
- Speech to Text の解析結果をPower Apps に渡す
それでは作成していきましょう!
Power Automate の全体図
これから作成するPower Automate の全体構成はこのような感じになっています。
Power Apps からのオーディオデータ取得
Power Apps からオーディオデータを取得するために、トリガに「PowerApps」を選択します。
続いて、「作成」アクションを追加し、「入力」には「PowerApps で確認」を選択します。
続いて、「JSON の解析」を追加します。
コンテンツには先ほどの「作成」の出力結果である「出力」を選択し、スキーマには以下を入力します。(「サンプルから生成」で自身で作成されても大丈夫です。)
{ "type": "object", "properties": { "Url": { "type": "string" } } }
Azure Functions にオーディオデータ(webm )を渡して「wav」に変換する
「JSON の解析」で出力された結果をAzure Functions に渡して「webm」を「wav」に変換しましょう!
「HTTP」アクションを追加します。
- 方法:「POST」を選択します。
- URI:前回の記事で作成したAzure Functions の「関数の URL の取得」で取得したURL を入力します。
- 本文:こちらにはAzure Functions に渡すデータをセットします。
Power Apps から渡ってきたデータはBase64 でエンコードされたデータなので、バイナリデータに変換する必要があります。
なので以下のように入力します。
dataUriToBinary(body('JSON_の解析')?['Url'])
Speech to Text にオーディオデータ(wav )を渡して解析を行う
先ほど「wav」形式に変換を行ったオーディオデータをSpeech to Text に渡して解析を行いましょう!
先ほど同様「HTTP」アクションを追加します。
https://<REGION_IDENTIFIER>.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=<language>&format=detailed
<REGION_IDENTIFIER>には選択した「地域」を入力します。
例)
https://japaneast.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=ja-JP&format=detailed
ヘッダー:ヘッダーにて設定可能な項目は以下です。
今回は「Ocp-Apim-Subscription-Key」と「Content-type」を設定します。- Ocp-Apim-Subscription-Key:前回の記事で作成したSpeech to Text のキーを入力します。
- Content-type:今回渡すデータは「wav」形式なので「audio/wav」を設定します。
- Ocp-Apim-Subscription-Key:前回の記事で作成したSpeech to Text のキーを入力します。
本文:先ほどのHTTP アクションの「本文」を設定します。
Speech to Text の解析結果をPower Apps に渡す
最後に解析結果をPower Apps に渡しましょう!
Speech to Text の結果は下記のようなJSON 形式で結果が出力されます。
こちらの出力結果を変数として利用できるように「JSON の解析」を行います。
スキーマは以下。
{ "type": "object", "properties": { "RecognitionStatus": { "type": "string" }, "Offset": { "type": "integer" }, "Duration": { "type": "integer" }, "NBest": { "type": "array", "items": { "type": "object", "properties": { "Confidence": { "type": "number" }, "Lexical": { "type": "string" }, "ITN": { "type": "string" }, "MaskedITN": { "type": "string" }, "Display": { "type": "string" } } } } } }
今回Power Apps に返そうと思う値は「Display」です。
ただし、「Display」は「NBest」のオブジェクトとなっているので、値にそのまま「Display」を設定してしまうと、「Apply to each」内にアクションが配置されてしまいます。
「PowerApps または Flow に応答する」は「Apply to each」内に配置することができないので少し工夫が必要です。
そこで今回は「Display」を一度変数に格納し、その変数の値をPower Apps に返そうと思います。
「変数を初期化する」アクションを追加します。
- 名前:任意の変数名を入力します。今回は「outPutText」と入力します。
- 種類:「文字列」を選択します。
- 値:初期値を入力します。今回は設定しません。
こちらで初期化した変数に「Display」を設定します。
「変数の設定」アクションを追加し、
- 名前:outPutText (先ほど作成した変数名)
- 値:Display
値に「Display」を設定すると自動でアクションが上図のように「Apply to each」で囲われたかと思います。
最後にこちらの変数をPower Apps に渡しましょう。
「PowerApps または Flow に応答する」アクションを追加します。
「+出力を追加」を選択し、その後「テキスト」を選択します。
- タイトル:Power Apps に渡す変数の名前を設定します。今回は「result」とします。
- 値を入力して応答してください:outPutText (先ほど作成した変数名)
以上でPower Automate の作成は完了です!
フローを任意の名前で保存してください。
完成!
その1でPower Apps からPower Automate を呼び出している箇所がありましたが、こちらで作成したPower Automate を設定してください。
また、Power Automateの結果を変数に格納していましたが、Power Automate からはテーブルで値が返ってきています。
なのでこの結果を表示する場合は、
[Power Apps で設定した変数名].[Power Automate からPower Apps に応答するときに設定したタイトル]
としてください。
今回ですと、以下のようになりますね。
_output.result
さいごに
3回に渡ってPower Apps で音声をテキストに文字おこしするアプリの作成方法についてご紹介しました。
第2回の内容は普段プログラムやクラウドサービスを触られない方からすると少し敬遠したくなる内容だったかもしれません...
今回は小規模でしたが、このようにアプリを作成していくと、標準で機能が用意されておらず開発が必要になってくる部分がでてくるかもしれません。
そのような場合はエンジニアに頼っちゃえばいいと私は思っています。
このような感じでどこかに丸投げではなく、皆で協力してアプリを作成して業務改善などが行われる世の中になるといいですね。