serviceのSpeech-to-Textサービスを用いて、リアルタイムな音声認識および音声ファイルのテキスト化をおこなうWebアプリを構築する手順を説明します。serviceが提供するサービスの1つで、リアルタイムな音声認識や話者の識別、翻訳などができるサービスです。assistantsなどのサービスを提供しています。APIを通じてサービスを利用します。SDKはC#、C++、Java、Python、JavaScriptなどの言語で利用することができます。serviceリソースの作成をおこないます。.NETのインストール開発環境に.NETをインストールします。Portal(https://portal.azure.com)にアクセスし、[リソースの作成]を選択します。入力してEnterキーを押し、[音声]の[作成]、[音声]の順にクリックします。名前、サブスクリプション、場所、価格レベル、リソースグループの各項目を入力して、[作成]をクリックします。serviceに移動し、リソース管理の[キーとエンドポイント]を表示します。後ほどアプリで利用するため、キー1および場所についてメモしておきます。JavaScriptを用いて、リアルタイムな音声認識をおこなうWebアプリを構築します。serviceを用いてテキスト化します。本記事ではLinux上で開発をおこなっていますので、Windowsなど別OSで開発される場合は、NuGetパッケージのインストール方法などを適宜読み替えてください。最初にベースとなるWebアプリを作成して起動します。ブラウザを起動してアプリに接続します。端末でCtrl+Cを押してアプリを終了します。必要なパッケージを追加します。端末で以下のコマンドを実行します。appsettings.jsonにキー情報を記載します。メモしたキー1および場所をそれぞれ記載します。serviceを扱うためのSpeechクラスを作成します。Startup.csのConfigureServicesにおいて依存性の注入をおこないます。Index.cshtml.csを修正します。ディレクトリに展開します。JavaScriptファイルを作成します。'';$('#outtext').val(outText);$('#micbtn').text('Stop');$('#notice').text('音声認識しています。Index.cshtmlを以下のように変更します。Webアプリを起動してテストします。アプリを起動してブラウザから接続します。Startボタンを押して音声認識を開始します。入力した音声がリアルタイムにテキスト化されます。Stopボタンを押すか、30秒経つと自動的に終了します。ブラウザの設定でマイクの使用を許可する必要があります。端末でCtrl+Cを押してアプリを終了します。サーバ側の設定では、Speechクラスを定義してcsにおいて依存性の注入をおこなこうことで、IndexModelからSpeechインスタンスにアクセスできるようにしています。serviceのキー情報を取得して文字列化し、ブラウザ側から参照できるようにCredStrにキー情報を格納しています。クライアント側の設定では、CredStrキー情報を取得して、recognizerの初期化をおこないrecstartContinuousRecognitionAsync()メソッドで音声認識を開始しています。recognizer.stopContinuousRecognitionAsync()が実行されるまで音声認識が継続しますが、recognizerは発話の区切りを検知する都度recognizedイベントを発生させてその発話の認識結果を送ってきます。発話の途中でもrecognizingイベントが発生しますが、このイベントで得られるテキストはrecognizedイベント時に更新されます。1つの発話だけを認識すればよいのであればrecognizer.recognizeOnceAsync()メソッドを用いることもできます。C#を用いて、音声ファイル(WAV)をテキスト化するWebアプリを構築します。serviceを用いてテキスト化します。本記事ではLinux上で開発をおこなっていますので、Windowsなど別OSで開発される場合は、NuGetパッケージのインストール方法などを適宜読み替えてください。作成したアプリをベースに進めます。Speechクラスを更新します。Index.cshtml.csを更新します。Index.cshtmlを更新します。Webアプリを起動してテストします。アプリを起動してブラウザから接続します。ファイル選択ボタンを押して音声ファイルを選んだ後、Uploadボタンを押すとテキスト化されます。対応しているのはWAVファイルのみです。端末でCtrl+Cを押してアプリを終了します。サーバ側の設定では、Speechクラスを拡張してWAV音声ファイルをテキスト化するメソッドを実装しています。音声ファイルを最後まで処理するとCanceledイベントが発生するので、このイベントをトリガーにして後処理をおこなっています。クライアント側の設定ではファイルのサーバへのアップロードを実装しています。音声認識結果を表示するためIndexModelのNoticeおよびOutTextを参照しています。ファイルアップロードについては、音声ファイルのサイズが大きい場合はストリーミングを用いた実装をおこなう必要があります。Webアプリを構築する手順を説明しました。Storageに保存された大容量の音声データをテキスト化する機能や話者を識別する機能などもあり、会議の文字起こしやアプリケーションのUI/UXの改善など様々な用途に活用できるのではないでしょうか。サインインのエラーについてこの記事の改善のために、ご意見をお聞かせください。