オウム返しなPythonプログラム(オンラインで音声認識→オフラインで音声合成)

音声認識して、その内容を音声合成で返すという、単純なもの。

Mac 10.13.6上での動作確認。
Pythonのバージョンは3.7.3。

PythonのSpeechRecognitionライブラリを利用。
Google音声認識のサービスを用いるのでオンライン環境。

pip3 install SpeechRecognition
brew install open-jtalk

の後に

#!/usr/bin/env python3

import speech_recognition as sr
import subprocess
import tempfile


def jtalk_run(message, out_wav='/tmp/voice.wav', speed=1.0):

    jtalk_dir = "/usr/local/Cellar/open-jtalk/1.10_1/"
    dic_path = jtalk_dir + "/dic"
    voice_path = jtalk_dir + "/voice/mei/mei_normal.htsvoice"

    with tempfile.NamedTemporaryFile(mode='w+') as tmp:
        tmp.write(message)
        tmp.seek(0)
        command = 'open_jtalk -x {} -m {} -r {} -ow {} {}'.format(
            dic_path, voice_path, speed, out_wav, tmp.name)
        command = command + '; afplay ' + out_wav
        # print(command)
        subprocess.run(command, shell=True)


if __name__ == "__main__":

    # マイクからの音声入力
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("話しかけてみましょう!")
        audio = r.listen(source)

    try:
        # 日本語でGoogle音声認識
        text = r.recognize_google(audio, language="ja-JP")
    except sr.UnknownValueError:
        print("Google音声認識は音声を理解できませんでした。")
    except sr.RequestError as e:
        print("Google音声認識サービスからの結果を要求できませんでした;"
              " {0}".format(e))
    else:
        print(text)
        jtalk_run(text)

pythonコードを適当な名前で保存して実行したのであった。

以下を参考にさせていただきました。
thr3a.hatenablog.com