LoginSignup
2
4

More than 3 years have passed since last update.

【Python】OpenJTalkとTalk APIを使って会話する(音声出力まで)

Last updated at Posted at 2020-01-18

はじめに

以前自作の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製)に会話機能を追加する

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4