コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

【Power Apps】音声をテキストに変換する~その2~


スポンサードリンク

こちらの記事は【Power Apps】音声をテキストに変換する~その1~の続きになります。
その1ではPower Apps 側の作成を行いました。まだご覧になってない方はよろしければご確認になってください。

今回はAzure Functions とSpeech to Text の作成を行いたいと思います。

Power Automate でのフロー作成...の前に

Power Automate で作成するフローでは、以下の機能を実装したいと思います。

  • Power Apps から受け取ったオーディオデータをSpeech to Text に渡す
  • Speech to Text の結果をPower Apps に返す

しかし、ここで大きな問題が1つあります。
それはSpeech to Text でサポートされているオーディオデータの形式です。
Speech to Text REST API をみてみましょう。
こちらの「オーディオ形式」の項目をみてみるとサポートされている形式は「WAV」「OGG」のみのようです。

f:id:koruneko:20200614211118p:plain

前回の記事でも確認を行いましたが、Power Apps のマイクコントロールで作成したオーディオデータの形式は「webm」でしたね。
...このままの形式ではサポートされている形式ではないのでなにかしらの処理によりサポートされている形式に変換を行う必要があります。

しかし、Power Automate のコネクタにもPower Apps での処理でもwebm をwav もしくはogg に変換するための機能は用意されていません。。。

なので今回はAzure Functions を利用して、独自に変換を行うロジックを作成しましょう。

Azure Functions の作成

Azure Functions を用いて「webm」を「wav」に変換する関数を作成しましょう!
* こちらのセクションがコード作成部分になります。

Function App を作成する

  1. Azure にアクセスし、左上のポータルメニューを選択してメニューを表示させます。
    表示させたら、「関数アプリ」を選択します。
    f:id:koruneko:20200614213003p:plain

  2. 左上にある「追加」を選択します。
    f:id:koruneko:20200615002809p:plain

  3. プロジェクトの詳細を入力します。
    まずは「基本」ページを入力します。

    • サブスクリプション:任意のサブスクリプションを選択します。
    • リソースグループ:任意のリソースグループを選択します。
    • 関数アプリ名:他の利用者と被らない関数アプリ名を入力します。
    • 公開:コードファイルまたはDocker コンテナーを選択します。今回は「コード」を選択します。
    • ランタイムスタック:関数プログラミング言語をサポートするランタイムを選択します。今回は「.NET Core」を選択します。
    • バージョン:ランタイムスタックのバージョンを選択します。今回は「3.1」を選択します。
    • 地域:任意の地域(region)を選択します。今回は「Japan East」を選択します。
      f:id:koruneko:20200615003152p:plain
  4. ホスティング」ページを入力します。

  5. 「監視」ページを入力します。

    • Application Insights を有効にする:Application Insights を使用することにより、ログ、パフォーマンス、およびエラーデータを収集することが可能です。
      詳しくは、Azure Functions を監視するをご覧ください。
    • Application Insights:Application Insights のリソース作成項目です。基本ページで選択した地域に最も近い地域に作成されます。
      f:id:koruneko:20200615005702p:plain
  6. 「確認及び作成」を選択して、登録内容に問題がなければ「作成」を選択します。
    f:id:koruneko:20200615010557p:plain

関数を作成する

作成された関数アプリのリソースに移動します。

  1. 左側のメニューより「関数」を選択し、上部にある「追加」を選択します。
    f:id:koruneko:20200615010833p:plain

  2. 「HTTP trigger」を選択します。
    f:id:koruneko:20200615011535p:plain

  3. 関数の作成を行います。

    • 新しい関数:任意の関数名を入力します。
    • Authorization level:「Anonymous」を選択します。
      • Function:関数固有の API キーが必要です。
      • Anonymous:API キーは必要ありません。
      • Admin:マスターキーが必要です。
        f:id:koruneko:20200615012033p:plain
  4. 「コードとテスト」を選択してコードの表示を行います。
    f:id:koruneko:20200615012919p:plain

これで関数を記述する準備が整いました!!

コードを作成する(準備)

「webm」を「wav」に変換するために「FFmpeg」を利用します。
FFmpeg は音声や動画を編集するのに大変便利なツールですので、興味のある方は調べてみることをお勧めします。

FFmpeg をダウンロードする

FFmpeg のインストール方法の紹介です。
みなくてもわかる方・既にインストールされている方はこのセクションは飛ばしても大丈夫です。

  1. FFmpegにアクセスします。

  2. 「Download」を選択します。
    f:id:koruneko:20200615020335p:plain

  3. Windows を選択して、下記のリンクを選択します。
    f:id:koruneko:20200615020459p:plain

  4. 項目を適宜選択して「Download BUild」を選択してダウンロードします。
    f:id:koruneko:20200615020723p:plain

以上でFFmpeg のダウンロードは完了です。

FFmpeg を関数内から呼び出せるようフォルダ内に配置する

先ほどダウンロードした「ffmpeg.exe」を関数内から実行できるようにフォルダ内に配置します。
ファイルシステムの利用はKudu コンソールを利用します。

Kudu コンソールを使用することで以下のことができます。

  1. コマンドの実行
    ほとんどの標準的なコンソール操作 (フォルダーの変更、ファイルのコピー/名前の変更/削除など) を実行するために使用します。 git log や git status などの git コマンドを実行して、いくつかの問題を診断することもできます。
  2. フォルダー移動の UI
    GUI を使用してサイト フォルダーを選択すると、コンソール ウィンドウが同時に同じフォルダーに移動するので、Kudu コンソールの 2 つの部分が連携します。
  3. ファイルとフォルダーのダウンロード
    ファイルとフォルダーについて、ファイル、またはフォルダーの内容を含む zip ファイルをダウンロードできます。
  4. ファイルとフォルダーのアップロード
    Kudu コンソールのエクスプローラー UI へのドラッグ アンド ドロップを使用します。
  5. Zip ファイルのアップロードと展開
    zip ファイルを Kudu コンソールにドラッグ アンド ドロップすると、展開した zip ファイルの内容がコピーされます。 これは、多数の小さなファイルやフォルダーをアップロードするための効率的な方法です。
  6. テキスト ファイルの表示と編集
    Kudu コンソールで、ブラウザー内編集用の Ace を使用してファイルを編集できます。 エディターには、問題を調査して特定するためのインターフェイスが用意されています。また、これを構文チェックや強調表示と共に使用して、web.config ファイルを編集することもできます。

Kudu コンソールの目的と機能について説明するより引用

  1. Azure Functions のリソースの左メニューより「高度なツール」を選択し、「移動」を選択します。
    f:id:koruneko:20200615224130p:plain

  2. 「Debug console」より「CMD」を選択します。
    f:id:koruneko:20200615233737p:plain

  3. 初期位置は「D:\home」というディレクトリにいるということが下のコマンドラインより確認できます。
    f:id:koruneko:20200615234019p:plain

  4. 「D:\home\site\wwwroot\ConvertAudioFormatUsingFFMpeg\」というディレクトリに「ffmpeg.exe」を配置したいと思います。
    GUI操作(マウスクリック)で「D:\home\site\wwwroot」まで移動します。(もしくは下のコマンドラインにて「cd」コマンドを実行)

  5. 「wwwroot」まで移動できたら、上の「+」より「New folder」を選択して「ConvertAudioFormatUsingFFMpeg」というフォルダを作成します。
    f:id:koruneko:20200615234416p:plain

  6. 作成したフォルダ内に入り先ほどダウンロードしたFFmpeg のbin フォルダー内にあるファイルをドラッグアンドドロップでコピーします。
    f:id:koruneko:20200615235106p:plain

以上でFFmpeg を利用するための準備が整いました!!

コードを作成する

さぁ、コードを記述していきましょう!
といっても、Azure Functions でFFmpeg を利用してmp3 を wav に変換するコードをMicrosoft MVPJohn Liuさんが自身のGithub にて公開されているので、難しいことはありません。

github.com

また、今回私が作成したコードを私のGithub にて公開していますので、コピペですましちゃいたい方はこちらをご覧いただければと思います。

github.com


  1. 「関数を作成する」で作成した関数を開きます。

  2. 「コードとテスト」を選択し、「run.csx」が選ばれていることを確認します。
    f:id:koruneko:20200616001531p:plain

  3. 上記のGithub を開き「run.csx」を選択します。(私のGithub を開いている前提で話を進めます。)

  4. 表示されたコードをコピーし、Azure Functions に貼りつけます。

  5. 「関数の URL の取得」を選択し、表示されたURL をコピーします。
    このURLは後程フロー作成の際に使用します。
    f:id:koruneko:20200616001959p:plain

Speech to Text の作成

  1. Azure Portal のホームにて、「リソースの作成」を選択します。
    f:id:koruneko:20200616004404p:plain

  2. 「Speech」と検索し、選択します。
    f:id:koruneko:20200616004726p:plain

  3. 「作成」を選択します。
    f:id:koruneko:20200616004940p:plain

  4. 項目を記載して、「作成」します。

    • 名前:任意の名前を入力します。
    • サブスクリプション:任意のサブスクリプションを選択します。
    • 場所:任意の地域(region)を選択します。今回は「東日本」を選択します。
    • 価格レベル:前回の記事の冒頭でも解説したように「F0」を選択します。
    • リソースグループ:任意のリソースグループを選択します。特にこだわらない場合は先ほど作成したリソースグループを選択します。
      f:id:koruneko:20200616005418p:plain
  5. 作成されたリソースより、「キーとエンドポイント」を選択してキーのコピーを行います。
    このキーは後程フロー作成の際に使用します。
    f:id:koruneko:20200616010721p:plain

以上でSpeech to Text を利用するための準備が整いました!!

おわり

以上でAzure 側での操作は完了です!お疲れさまでした!!

次回はpower Automate を用いてのフローの作成方法をご紹介したいと思います。

【Power Apps】音声をテキストに変換する~その3~


スポンサードリンク