
SlackからPepperを喋らせてみる
こんにちは。
AI coordinatorの清水秀樹です。
久しぶりのPepperネタです。
最近、Slackbotを学習したので、今度はPepperをSlackから喋らせる機能を作ってみました。
しかもあっさり実装できたので紹介します。
これができるようになると、自分の話したい内容をPepperに代弁させることができるようになります。
もちろん複数人からでも代弁させることができるようになりますので、色々な使い方が考えられそうです。
開発環境
pyhton2.7
pynaoqi-python2.7-2.5.5.5-mac64
macOS Sierra
実機・バーチャルペッパーどちらでも確認済み。
フォルダ構成
slackbot # プログラムをまとめるディレクトリ。名前はなんでも良い
├─ run.py # このプログラムを実行することで、Pepper君に喋らせることができるようになる
├─ slackbot_settings.py # トークンを指定
└─ plugins # Pepper SDK機能はこのディレクトリに追加する
├─ __init__.py # モジュールを示すためのファイル。空で良い
└─ my_mention.py # Pepperに接続して喋らす機能を記述する
ソースコード
# coding: utf-8
from slackbot.bot import Bot
def main():
bot = Bot()
bot.run()
if __name__ == "__main__":
print('start slackbot')
main()
# coding: utf-8
# botアカウントのトークンを指定
API_TOKEN = "トークンを指定してください"
# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']
__init__.pyは空ファイルで大丈夫です。
# coding: utf-8
from slackbot.bot import default_reply
import os, re, json, random
from naoqi import ALProxy
# 入力メッセージを取得し、pepperに喋らせる
@default_reply()
def default_func(message):
text = message.body['text'] # メッセージを取り出す
tts = ALProxy("ALTextToSpeech", "localhost", 49416)
tts.setLanguage("Japanese")
say = text.encode('utf-8')
tts.say(say)
実機で試す場合は、”localhost”をIPアドレスに変更してください。
実行
以下のコマンドで実行します。
$ python run.py
Slackを起動して、適当な文章を打ち込んだ後にPepperから発話されていれば成功です。


実機でも確認済みです。
Slackbotと組み合わせて返事をしてくれるペッパーを作成してみても面白いかもしれません。
—-2017/08/20追記—–
SlackからPepperを移動させる簡単の方法が閃いたので追記しておきます。
とても単純です。
# coding: utf-8
from slackbot.bot import default_reply
import os, re, json, random
from naoqi import ALProxy
# 入力メッセージを取得し、pepperに喋らせる
@default_reply()
def default_func(message):
text = message.body['text'].encode('utf-8') # メッセージを取り出す
ip = "192.168.100.31"
port = 9559
motion = ALProxy("ALMotion", ip, port)
tts = ALProxy("ALTextToSpeech", ip, port)
if text == '前':
motion.moveTo(0.5, 0.0, 0.0)
elif text == '後':
motion.moveTo(-0.5, 0.0, 0.0)
elif text == '右':
motion.moveTo(0.0, -0.5, 0.0)
elif text == '左':
motion.moveTo(0.0, 0.5, 0.0)
else:
tts.setLanguage("Japanese")
say = text
tts.say(say)
それではまた。
LEAVE A REPLY