2018年9月8日土曜日

できるだけ簡単にPythonで音声認識してVOICEROIDにしゃべらせる

Five Night at Freddy'sの2と3攻略してたらなんかすごい時間食った。
Five Night at Freddy's 4がもっと怖くなかったら4まで一気にクリアてたかも。
実際は怖すぎてできないけど。


今回は「Pythonで音声認識してVOICEROIDにしゃべらせる」ところまでやりましょう。
Google Cloud Speech APIなどは自分で設定すると難しいので、サポートしてくれるライブラリー、SpeechRecognitionを使います。

SpeechRecognition

オンラインとオフラインの複数のエンジンとAPIをサポートし、音声認識を実行するためのライブラリです。
インストールは

 pip install SpeechRecognition

で問題ないです。
現在version3.8.1ではpython3.7には対応していないみたいですね。
自分の環境が3.6なので、3.7で確認はしていないです。

まずは、簡単なところで、wavファイルからtextを手に入れるところからやってみます。


import speech_recognition as sr

filename ="sample.wav"
r = sr.Recognizer()
with sr.AudioFile(filename) as source:
    audio = r.record(source)
try:
    text = "Google Speech Recognition thinks you said " + r.recognize_google(audio, language='ja-JP')
    print(text)
except:
    pass


こんな感じで問題ないでしょう。
カレントディレクトリーに存在する、wavファイルの名前を入れれば解析してくれます。
戻り値として、音声認識の結果を返してくれます。
これを前回の録音と組み合わせれば、音声認識の完成ですね。

このモジュール、言葉の認識できないとエラーを返すので、しっかりtry処理を行いましょう。


次に、wavファイルを経由しない方法です。
前提として、pyaudioをインストールしてください。

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:
    print("何か、話しかけてください")
    audio = r.listen(source)

try:
    print("Google Speech Recognition thinks you said " + r.recognize_google(audio,language='ja-JP'))
except:
    pass


こんな感じでしょうか。結構簡単にできますね。
自分は録音開始時に処理を入れているので前者を使っていますが、基本的にはこちらで問題ないでしょう。

それでは、サクッと組み合わせて「ゆかりねっともどき」を作ってみましょう。


import speech_recognition as sr
import subprocess as sps

r = sr.Recognizer()
with sr.Microphone() as source:
    print("何か、話しかけてください")
    audio = r.listen(source)
try:
    text =  r.recognize_google(audio,language='ja-JP')
except:
    pass

cmd = 'seikasay.exe -cid ' + "2000" + ' \"' + text + '\"'
sps.call(cmd,shell=True)


完成です。
今回は1回だけ、しゃべったことをボイスロイドにしゃべらせるプログラムですね。
あとは、これをループ処理にしたり、非同期処理にしたりすれば、いいわけです。
それにしても、簡単にできました。ほとんどseikasay.exeやPythonの優秀なモジュールのおかげですね。


0 件のコメント:

コメントを投稿