今回はPower Automate経由でOpenAIのWhisper(Speech to Text)を呼び出してみたのでその結果をメモ。
Whisperについて
ということで、WhisperはOpenAIが開発した音声をテキストに変換するシステム。
OpenAIでこのWhisperを呼び出すAPIが公開されていたので、Power Automate経由でPower Appsから呼び出してみた。
※APIのリファレンスはこちら
Just a moment...
事前準備:OpenAIのAPIKey取得
まずはOpenAIのトップページに移動して、ログインする。
そしたら右上のアイコンから「View API keys」を選択。
「Create new secret key]を押して、
適当な名前を付けてKeyを作成、
作成されたキーを控えておく。
これで事前準備は完了。
Power Automateの作成
そしたらPower Automateの作成に入っていく。
完成したPower Automateの全体図はこんな感じ。
トリガーの引数は以下2つ。
- Appsから「音声」を入れてもらうファイル型の引数
- 「transcriptions(文字起こし)」か「translations(英語翻訳)」を選択してもらう文字列型の引数
次は「拡張子」と「MIMEタイプ」の対応定義を変数に作成。
※本当はもう少し対応しているファイルタイプがあるけど今回はこのくらいで。
※本当はもう少し対応しているファイルタイプがあるけど今回はこのくらいで。
中身はこんな感じ。
{ "flac": "audio/flac", "mp3": "audio/mpeg", "mp4": "video/mp4", "wav": "audio/wav", "ogg": "audio/ogg", "webm": "audio/webm" }
そしたら引数で取得したファイルの拡張子から上で定義したMIMEタイプを取得する。
式はそれぞれこんな感じ。
// ファイル名からファイル拡張子の取得 last(split(triggerBody()['file']['name'],'.'))
// ファイル拡張子からMIMEタイプの取得 variables('ContentTypes')?[outputs('作成:extention')]
そしたらHTTPアクションでOpenAIのAPIをコールする。
※引数によって呼び出すURL(文字起こし or 英語翻訳)を変更。
※引数によって呼び出すURL(文字起こし or 英語翻訳)を変更。
本文の中身はこちら。
{ "$content-type": "multipart/form-data", "$multipart": [ { "headers": { "Content-Disposition": "form-data; name=\"model\"" }, "body": "whisper-1" }, { "headers": { "Content-Disposition": "form-data; name=\"file\"; filename=\"@{triggerBody()['file']['name']}\"" }, "body": { "$Content-type": "@{outputs('作成:content-type')}", "$content": @{triggerBody()['file']['contentBytes']} } } ] }
OpenAIからの返答はこんな感じの単純なJSONで返ってくるので、
JSONを解析してあげて、中身をPower Appsへ戻す。
これでPower Automateは完成!
Power Appsの作成
呼び出し側のPower Appsは以下の2つを作成してみる。
- マイク(Microphone)コントロールから音声を渡す
- 添付ファイルコントロールから音声ファイルを渡す
マイク(Microphone)コントロールから音声を渡す
マイクコントロールから音声を渡す式はこんな感じ。
マイクコントロールで声を登録してPower Automateを呼び出すと、こんな感じで無事テキスト変換が成功する!
英語翻訳も無事成功!
添付ファイルコントロールから音声ファイルを渡す
添付ファイルコントロールから音声ファイルを渡す場合はこんな感じ。
※添付ファイルの上限は1に設定。
※添付ファイルの上限は1に設定。
実際にファイルを添付してボタンを押してみると、
無事に動作!
英語翻訳も無事動作!
※この記事ではこちらのサイト様の音声ファイルを使用させていただきました。
https://soundeffect-lab.info/sound/voice/info-lady1.html
おまけ1:日本語から英語への翻訳は失敗することも多い
友達に絵本の1ページを読んでみてもらったところ、
こんな感じで翻訳に失敗。ある程度固い文章じゃないとだめかもしれない。
おまけ2:ブラジル語はいけた
その友達がブラジル語も話せたのでせっかくだし録音してもらったら、文字起こし無事成功!
英語翻訳もできた!
このAPIには引数として「prompt」や「temperature」「language」なども渡せるっぽいので、まだまだ色々遊べそう!
コメント