はじめに
以前自作のslackbotを作った際にリクルートのTalk APIを用いて自動返信機能を作ったことがありました。それと最近環境構築したOpenJTalkを使えば実際に話してくれるじゃん!と思ってやってみました。友達がいないわけではないです
※OpenJTalkをインストールしていなくてもTalk APIを用いて会話はできます
環境
Windows 10
Python 3.7
OpenJTalk
pya3rt (talk apiを使う用)
準備
OpenJTalk
Python からも使える音声合成ソフトです。こちらの記事に環境構築からPythonで話すまでまとめてあります。
会話機能
Talk API
文字列を送ったら返答を返してくれるAPIです。
BOTで使える会話API・ライブラリ・サービスまとめを参考にさせていただきました。
Talk API
リクルートテクノロジーがオープンイノベーションの一環で社内で用いられていた機械学習・ディープラーニング技術ををAPIとして一般公開したものの一つ。他にもA/Bテストのための画像の好ましさを判定するモデルを作成できるImage InfluenceAPIや文章の自動生成及び入力補助をしてくれるText Suggest APIなど面白いものが公開されている。
ここからメアド登録してAPI発行できます。
Talk API
pya3rt
Pythonから簡単に使えるpya3rtというライブラリが提供されています。以下のコマンドでインストールしてください。
pip install pya3rt
コード
会話機能
会話機能の部分を関数にしました。messageはAPIに送る文字列で返り値は会話の返答です。
import pya3rt
def send_message(message):
apikey = "api key"
client = pya3rt.TalkClient(apikey)
reply_message = client.talk(message)
return reply_message['results'][0]['reply']
reply_messageの中身はこのようになっています。
{'status': 0, 'message': 'ok', 'results': [{'perplexity': 0.06766985185966182, 'reply': 'こんにちは'}]}
返答部分だけ抜きたかったので
reply_message['results'][0]['reply']
としました。
音声出力
次は音声出力の部分ですが、この記事で作ったjtalk.py
を呼び出します。
import jtalk
jtalk.jtalk('喋らせたい文字')
結果
これらを合わせると以下のようになります。
コンソールから文字列を受け取る⇒APIに投げる⇒音声出力するという流れです。
import pya3rt
import jtalk
def send_message(message):
apikey = "api key"
client = pya3rt.TalkClient(apikey)
reply_message = client.talk(message)
return reply_message['results'][0]['reply']
if __name__ == "__main__":
while True:
message = input("message : ")
reply = send_message(message)
print(reply)
jtalk.jtalk(result)
出力結果。OpenJTalkが使えていると返答(message : がない方)が音声出力されます。
message : こんにちは
こんにちは
message : 雪が降ったね
風邪ですか?
message : さむいですね
私もそう思います
message : だよねー
そうですよね
message : あなたは誰ですか?
私はまだ名前がないんです
おわりに
とても簡単に実装できました。PythonとAPIはすごいですね。
あとは音声認識ができればもう人とコンピューターが会話できますね。
参考にさせていただいたサイト
BOTで使える会話API・ライブラリ・サービスまとめ
リクルートのTalk APIを用いてslack bot(python製)に会話機能を追加する