PDF資料はこちらからどうぞ。
http://seahorse-inc.com/QIITA/TJBot-3/Conversationセットアップ全手順_20170718.pdf
1. はじめに
TJBotは声を文字、文字を声にしたり、話しかけられた意図(意味)を理解してお話したり、色々な情報から欲しい情報を探してくれるといった、「IBM WatsonコグニティブAPI」をこれからやってみようという人にはうってつけのキットです。
厚紙や3Dプリンターでホディを作り、小さく低価格のコンピュータ(Raspberry PI)で頭脳を組み込みます。手を振ったり、LEDの色を変えたり、話しかけると答えてくれます。
機能的にはシンプルですが、反応してくれるとワクワクして楽しく、ボディは簡単に組み立てられるようになっています。
TJBotはすでに、色々な「IBM WatsonコグニティブAPI」を組み合わせた「レシピ」があります。
本投稿は、できあがっている「レシピ」を参考に、実際に作ってみた手順となっています。
使用するパーツなどの関係で、そのままの「レシピ」ではうまくいかないところや分からない点がありましたが、試行錯誤の末、ちゃんと動作することができました。
さらに、おまけとして日本語対応しました。
尚、厚紙でTJBotのボディ作成は割愛させていただきますが、下記URLを参考に作ってみてください。
https://www.youtube.com/watch?v=UEnuF--LA-0
https://www.instructables.com/id/Build-TJ-Bot-Out-of-Cardboard/
厚紙、3Dプリンター用の図面は下記URLです。
https://ibmtjbot.github.io/#gettj
ちなみに私は、A2サイズ2mmの厚紙にpdf印刷出力の図面を貼り、デザインナイフでカットしました。
デザインナイフでカットすると、かなり時間と労力を要しますので、レーザーカットをお勧めします。
レーザーカッターを時間制で使えるサービスもあるようです。
厚紙とRaspberry Pi、マイク、スピーカー、LED、モーターでTJBotを組み立て、Watson Cognitive APIを使って、色々なレシピが生まれています。
本投稿は、各レシピを実際に作成し、日本語化を行ってみた際の手順内容となっています。
2. TJBotについて
TJBotは、IBM ResearchのMaryam Ashooriによって、認知対象の設計と実装におけるベストプラクティスを見つけるための実験として作成されました。
https://www.ibm.com/blogs/research/2016/11/calling-makers-meet-tj-bot/
TJBotは、楽しい方法でWatsonサービスを理解するために生まれた、オープンソースプロジェクトです。
https://ibmtjbot.github.io/
3. 今回作成するレシピ
Watson 「Speech to Text」、「Conversation」、「Text to Speech」とRaspberry Pi、USBマイク、Bluetoothスピーカーを使って、Watsonと簡単な会話をします
使用させていただいたレシピのサイト情報:
https://www.instructables.com/id/Build-a-Talking-Robot-With-Watson-and-Raspberry-Pi/
4. 材料
価格は変わる可能性があります。
厚紙は、ミューズ KMKケントボード SS-A22mm厚を使いました。
5. H/Wセットアップ
Raspberry Pi用のOS Rasbianのインストールは割愛させていただきます。
http://qiita.com/Mitsu-Murakita/items/90907782b6aec9959328
の「3. Raspbian関連のインストール」などを参考にしてください。
5-1. USBマイク
BU-Bauty PC Mac用USBマイク 超小型 超ミニ 22mmx18mmx5mmを使用しました。
lsusbコマンドで認識されているか確認します。
$ lsusb ⏎
“Bus 001 Device 004: ID 0d8c:0016 C-Media Electronics, Inc”で認識されています。
以下のコマンドでハードウェアデバイスを調べます。
$ arecord –l ⏎
マイクの感度を調整します。
$ amixer sset Mic 50 -c 1 ⏎
録音してみます。
$ arecord -D plughw:1,0 -d 10 -f cd test.wav ⏎
(plughw:1,0はarecoed –l のカード番号とデバイス番号です。生成する音声ファイルはtest.wav)
PCなどに転送して音を確認してください。
5-2. Bluetoothスピーカー
Anker SoundCore mini コンパクト Bluetoothスピーカーを使用します。
・BluetoothパッケージPulseAudioパッケージをインストール
$ sudo apt-get install bluetooth ⏎
$ sudo apt-get install pulseaudio-module-bluetooth ⏎
・PulseAudioをsystemdに登録
nanoを使ってpulseaudio.serviceに書込みます。
$ sudo nano /etc/systemd/system/pulseaudio.service ⏎
書き込む内容
[Unit]
Description=Pulse Audio
[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm
[Install]
WantedBy=multi-user.target
・pulseaudio-bluetooth.confファイルを作成します。
nanoを使ってpulseaudio-bluetooth.confに書込みます。
$ sudo nano /etc/dbus-1/system.d/pulseaudio-bluetooth.conf ⏎
書き込む内容
<busconfig>
<policy user="pulse">
<allow send_destination="org.bluez"/>
</policy>
</busconfig>
・system.paファイルを編集
$ sudo nano /etc/pulse/system.pa ⏎
追記する内容。
### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif
.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
・pulseaudioサービスを起動
$ sudo systemctl start pulseaudio.service ⏎
・pulseaudioサービスを自動起動するよう設定
$ sudo systemctl enable pulseaudio.service ⏎
・root、piユーザがPulseAudioで音を出せるようにします
$ sudo gpasswd -a root pulse-access ⏎
$ sudo gpasswd -a pi pulse-access ⏎
ここまででPulseAudo関連の設定が完了しましたので、次にbluetoothctlでBluetoothデバイスを接続します。
スピーカーの電源をオン。
$ sudo bluetoothctl ⏎
[bluetooth]# power on ⏎
デバイスをスキャンし、スピーカーを探します。
[bluetooth]# scan on ⏎
Blutoothスピーカーが見つかったら、スキャンを停止します。
[bluetooth]# scan off ⏎
[NEW] Device 00:E0:4C:58:6C:EC SoundCore mini
でBlutoothスピーカーのデバイス情報が入手できました。
[bluetooth]# trust 00:E0:4C:58:6C:EC ⏎
[bluetooth]# pair 00:E0:4C:58:6C:EC ⏎
[bluetooth]# connect 00:E0:4C:58:6C:EC ⏎
「ピロリン」という音が鳴ると、接続完了です。
[bluetooth]# exit ⏎
bluetoothctlから抜けます。
・なかなか接続できない場合
下記サイトが参考になります。
https://raspberrypi.stackexchange.com/questions/44497/having-an-issue-with-bluetooth-manager-pairing-on-the-pi
Syslogを確認します。
$ cat /var/log/syslog ⏎
“bluetoothd[794]: a2dp-sink profile connect failed for 00:E0:4C:58:6C:EC: Protocol not available”
下記手順を試してください。
(1) PulseAudio Bluetooth ライブラリーがインストールされているか確認
$ sudo apt-get install pulseaudio-module-bluetooth ⏎
(2) Pulse Audio serverが稼働しているか確認
まず停止します。
$ sudo killall pulseaudio ⏎
起動します。
$ pulseaudio –-start ⏎
(3)bluetoothctlでconnectします。
[bluetooth]# connect 00:E0:4C:58:6C:EC ⏎
6. Watson「Speech to Text」、「Conversation」、「Text to Speech」サービスの作成
Bluemixにログイン
https://console.bluemix.net/
「username」「password」を後程使用しますので、メモ帳などにコピー保存してください。
「username」「password」を後程使用しますので、メモ帳などにコピー保存してください
「username」「password」を後程使用しますので、メモ帳などにコピー保存してください。
7. Raspbianの最新化とNode.js、npm、のインストール
TeratermなどでSSH接続します。ID、パスワードの初期値は、
ID:pi
Password: raspberry です。
以下のコマンドを実行してください。
$ sudo apt-get update ⏎
$ sudo apt-get dist-upgrade ⏎
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - ⏎
$ sudo apt-get install -y nodejs ⏎
8. コードのダウンロードとインストール
$ git clone https://github.com/ibmtjbot/tjbot.git
$ cd tjbot/recipes/conversation
$ npm install
9. 会話フローの作成
ここでは作成済みのサンプルのデータを使用します。
データは“8.コードのダウンロードとインストール”でインストールした
「~/tjbot/recipes/conversation/workspace-samplejson」です。
SCPなどを使って、以降で操作するクライアントPCにコピーしてください。
Bluemixにログイン
https://console.bluemix.net/
先程コピーしたファイル「workspace-sample.json」を選択
Import「Everything」を選択し, 「Import」ボタンをクリック。
「workspace-sample.json」がインポートされました。
「Back to workspace」を選択してワークスペースに戻ります。
Workspace ID を取得します。
Workspace IDをメモ帳などにコピー。後程使用します。
尚、サンプルの“Intents”、“Entities”、“Dialog”は下記の通りです。
10. 「Speech to Text」、「Conversation」、「Text to Speech」、WorkspaceID構成情報の設定
ディレクトリを ~/tjbot/recipes/conversation に移動します。
$ cd ~/tjbot/recipes/conversation ⏎
インストールされたデフォルト構成ファイル「config.defaule.js」を「config.js」という名でコピーし、「config.js」を編集します。
$ cp config.default.js config.js ⏎
$ sudo nano config.js ⏎
■“6.Watson「Speech to Text」、「Conversation」、「Text to Speech」サービスの作成”で取得した、「username」「password」
■“9.会話フローの作成” で取得した、「Conversation」のWorkspace ID をexports.conversationWorkspaceId = ''”に登録します。
ここではnanoエディターを使用しました。
11. BluetoothスピーカのPulse Audioが使えるように設定変更
初期状態では、
~/tjbot/recipes/conversation/node_modules/tjbot/lib/tjbot.js
のtjbot.jsは、USBスピーカのcard 1, device 0を使う定義になっています。
Tjbot.jsの160行目あたりの下記行の
speakerDeviceId: "plughw:1,0" // plugged-in USB card 1, device 0; see aplay -l for a list of playback devices
speakerDeviceId: "plughw:1,0"をspeakerDeviceId: "pulse" に変更して、Bluetoothスピーカが使えるようにします。
speakerDeviceId: "pulse" // for bluetooth speaker Pulse Audio
12. プログラムの実行
$ cd ~/tjbot/recipes/conversation/ ⏎
$ sudo node conversation.js ⏎
「Watson, please introduce yourself」
「Watson, who are you?」
「Watson, tell me a joke!」
と話しかけると答えてくれます。
発音が悪く、なかなか認識してくれませんが、Google翻訳の音声を使うとよく反応しました。
13. 日本語対応に変更
追加・変更するのは3点です。
13-1. 追加点1:
Watson「Conversation」の会話フローを日本語で作成します。
日本語は、“9.会話フローの作成”で作成した「workspace-sample.json」(TJBot Conversation)を翻訳しました。
Bluemixにログイン
https://console.bluemix.net/
日本語対応用に新しいWorkspaceを作成します。
“Create a new workspace”の「Create」をボタンをクリック。
“Name”、“Description”、“Language:Japanese”を入力後「Create」ボタンを押す。
ここでは、“Name”:TJBot会話、Description:TJBotの会話例 としました。
“Intents”の登録
「Intents」タブを選択後、「Create new」ボタンをクリック。
“Intent name”、“User Example”を登録します。
登録するIntentsは2つで、下記の通りです。
尚、User Exampleを追加するには、「+ボタン」、Intentを追加するのは「Create new」ボタンを押します。
次にDialogを登録します。
Dialogの登録
ここでは「ようこそ」nodeは使わないため削除しました。
削除方法は下記の通りです。
マークを押し、「delete」で削除。
それでは、登録します。
新しくできた「No condition set」の枠内をクリック
「冗談を言う」も「Add node」ボタンをクリックて登録します。
13-2. 変更点1:
Tjbot.jsの「Speech to Text」、「Text to Speech」、言語を英語から日本語に変更する。
~/tjbot/recipes/conversation/node_modules/tjbot/lib/tjbot.js
tjbot.jsの
152行あたり
language: 'en-US' // see TJBot.prototype.languages.listen
language: 'ja-JP' // see TJBot.prototype.languages.listen
158行あたり
language: 'en-US', // see TJBot.prototype.languages.speak
language: 'ja-JP', // see TJBot.prototype.languages.speak
13-3. 変更点2:
Tjbot名称「Watson」を全角日本語に変更する。
~/tjbot/recipes/conversation/node_modules/tjbot/lib/tjbot.js
tjbot.jsの
147行あたり
name: 'Watson'
name:’Watson’
必ず全角日本語にしないと呼びかけても認識しませんので、ご注意ください。
13-4. 変更点3:
デフォルトボイスの現「en-US_MichaelVoice」を日本の「ja-JP_EmiVoice」に変更する。
~/tjbot/recipes/conversation/node_modules/tjbot/lib/tjbot.js
tjbot.jsの
1089行あたり
var voice = "en-US_MichaelVoice";
var voice = "ja-JP_EmiVoice";
13-5. 変更点4:
“(1)追加点1:”のWatson「Conversation」会話フロー日本語対応で作成した、「Workspace Id」に変更します。
~/tjbot/recipes/conversation/config.js
config.jsの
9行あたり
exports.conversationWorkspaceId =’’“を変更登録する。
14. 日本語対応版プログラムの実行
$ cd ~/tjbot/recipes/conversation ⏎
$ sudo node conversation.js ⏎
「Watson」キーワードに続けて下記文章を言ってみてください。
TJBotが答えます。
「自己紹介をしてください」
「あなたは誰ですか」
「あなたは何者ですか」
「あなたが誰か教えてください」
「あなたについて教えてください」
「自己紹介をお願いします」
「冗談を言って」
「私に冗談を言ってみてください」
「私を笑わせて」
「私は冗談を聞きたい」
「何か面白いことを言って」