Azure Speech Service を使った音声認識 (STT: Speech to Text) を試してみます。
Microsoft の Cognitive Services のひとつとして提供されている Speech Service を使用すると、音声をテキストに変換したり、逆にテキストを音声に変換したりすることができます。
ここでは、Python から Speech Service の機能を利用してみます(Windows 10 で動作確認済)。
実行するにはマイクのついた PC が必要です
マイクのついていない PC で実行すると SPXERR_MIC_NOT_AVAILABLE
エラーが発生します。
準備
Speech Service の準備
Azure Portal から Speech のリソースを作成し、Subscription Key を取得しておいてください。
Speech SDK のインストール
Python の azure-cognitiveservices-speech
パッケージをインストールします。
$ pip install azure-cognitiveservices-speech
Visual Studio C++ Redistributable のインストール
必要があれば、Visual Studio C++ の再頒布可能パッケージをインストールします。
Python コード
一回だけ変換して終わるバージョン
import azure.cognitiveservices.speech as speechsdk
# この設定は適宜変更してください
subscription = "e1b5f0964ab743133b7de4f892741c7a"
region = "japaneast"
language = "ja-JP"
# proxy = ("proxy.example.com", 8888, "", "")
# SpeechConfig オブジェクトを生成します
speech_config = speechsdk.SpeechConfig(
subscription=subscription,
region=region,
speech_recognition_language=language)
if 'proxy' in locals():
speech_config.set_proxy(*proxy)
# SpeechRecognizer インスタンスを生成します
recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("何かしゃべってください")
result = recognizer.recognize_once()
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("「{}」".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = result.cancellation_details
print("Speech Recognition canceled: {}".format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(cancellation_details.error_details))
繰り返し入力を受け付けるバージョン
こちらのバージョンは、Ctrl+C でプログラムを停止するまで、繰り返しユーザーの入力(発話)を受け付けます。
import azure.cognitiveservices.speech as speechsdk
# この設定は適宜変更してください
subscription = "e1b5f0964ab743133b7de4f892741c7a"
region = "japaneast"
language = "ja-JP"
# proxy = ("proxy.example.com", 8888, "", "")
# SpeechConfig オブジェクトを生成します
speech_config = speechsdk.SpeechConfig(
subscription=subscription,
region=region,
speech_recognition_language=language)
if 'proxy' in locals():
speech_config.set_proxy(*proxy)
# SpeechRecognizer インスタンスを生成します
recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
# 非同期に返された認識結果を出力します
recognizer.recognized.connect(lambda evt: print('「{}」'.format(evt.result.text)))
recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
try:
print("何かしゃべってください")
recognizer.start_continuous_recognition()
import time
time.sleep(100000)
except KeyboardInterrupt:
print("バイバイ")
recognizer.recognized.disconnect_all()
recognizer.session_started.disconnect_all()
recognizer.session_stopped.disconnect_all()
実行
スクリプトを起動すると、「何かしゃべってください」と表示されるので、マイクに向かってしゃべると、その言葉が STT によりテキストに変換されて表示されます。 下記は、「こんにちは」としゃべった場合の出力例です。
C:\> python stt.py
何かしゃべってください
「こんにちは。」
参考資料
ここの解説は下記のサンプルコードを参考にしています。
関連記事
- QnA Maker (4) Python から QnA Maker の API を利用する
- チャットボット: 独自のミドルウェアを作成してログを記録する
- チャットボット: 独自のミドルウェアを作成して禁止ワードを拒否するようにする
- チャットボット: Bot Builder SDK の Dialog で会話の流れをデザインする (2) スタック管理
- チャットボット: Bot Builder SDK で画像やリストなどのリッチなメッセージを送る (MessageFactory)
- チャットボット: Bot Builder SDK の Dialog で会話の流れをデザインする (1) ダイアログの基本
- チャットボット: Bot Builder SDK で会話の状態を保存する (BotState)