LoginSignup
2
4

More than 5 years have passed since last update.

Watson TJBotをつくりました【3】マイク・スピーカーを使ってTJBOTと会話

Last updated at Posted at 2017-11-12

PDF資料はこちらからどうぞ。
http://seahorse-inc.com/QIITA/TJBot-3/Conversationセットアップ全手順_20170718.pdf

1. はじめに

TJBotは声を文字、文字を声にしたり、話しかけられた意図(意味)を理解してお話したり、色々な情報から欲しい情報を探してくれるといった、「IBM WatsonコグニティブAPI」をこれからやってみようという人にはうってつけのキットです。

厚紙や3Dプリンターでホディを作り、小さく低価格のコンピュータ(Raspberry PI)で頭脳を組み込みます。手を振ったり、LEDの色を変えたり、話しかけると答えてくれます。
機能的にはシンプルですが、反応してくれるとワクワクして楽しく、ボディは簡単に組み立てられるようになっています。

TJBotはすでに、色々な「IBM WatsonコグニティブAPI」を組み合わせた「レシピ」があります。

本投稿は、できあがっている「レシピ」を参考に、実際に作ってみた手順となっています。
使用するパーツなどの関係で、そのままの「レシピ」ではうまくいかないところや分からない点がありましたが、試行錯誤の末、ちゃんと動作することができました。
さらに、おまけとして日本語対応しました。
00.png

尚、厚紙で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. 材料

価格は変わる可能性があります。
01.png
厚紙は、ミューズ 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を使用しました。
03.png
lsusbコマンドで認識されているか確認します。

$ lsusb ⏎

04.png
“Bus 001 Device 004: ID 0d8c:0016 C-Media Electronics, Inc”で認識されています。

以下のコマンドでハードウェアデバイスを調べます。

$ arecord –l ⏎

05.png
カード番号は1です。

マイクの感度を調整します。

$ amixer sset Mic 50 -c 1 ⏎

06.png
81%の値がマイク感度です。

録音してみます。

$ 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

07.png

・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>

08.png

・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

10.png

・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 ⏎

11.png

ここまででPulseAudo関連の設定が完了しましたので、次にbluetoothctlでBluetoothデバイスを接続します。
スピーカーの電源をオン。

$ sudo bluetoothctl ⏎
[bluetooth]# power on ⏎

デバイスをスキャンし、スピーカーを探します。

[bluetooth]# scan on ⏎

Blutoothスピーカーが見つかったら、スキャンを停止します。

[bluetooth]# scan off ⏎

12.png

[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/

13.png

14.png

15.png

(1)カタログより「Speech to Text」を選択
16.png

「作成」をクリック
17.png

「サービス資格情報」をクリック
18.png

「資格情報の表示」をクリック
19.png

「username」「password」を後程使用しますので、メモ帳などにコピー保存してください。
20.png
21.png

(2)カタログより「Conversation」を選択
22.png

「作成を」クリック
23.png

「サービス資格情報」をクリック
24.png

「資格情報の表示」をクリック
25.png

「username」「password」を後程使用しますので、メモ帳などにコピー保存してください
26.png
27.png

(3)カタログより「Text to Speech」を選択
28.png

「作成」をクリック
29.png

「サービス資格情報」をクリック
30.png

「資格情報の表示」をクリック
31.png

「username」「password」を後程使用しますので、メモ帳などにコピー保存してください。
32.png
33.png

7. Raspbianの最新化とNode.js、npm、のインストール

TeratermなどでSSH接続します。ID、パスワードの初期値は、
  ID:pi
  Password: raspberry
です。
34.png

以下のコマンドを実行してください。

$ 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

35.png

9. 会話フローの作成

ここでは作成済みのサンプルのデータを使用します。
データは“8.コードのダウンロードとインストール”でインストールした
「~/tjbot/recipes/conversation/workspace-samplejson」です。
SCPなどを使って、以降で操作するクライアントPCにコピーしてください。

Bluemixにログイン
https://console.bluemix.net/

36.png
37.png
38.png

「ハンバーガーメニュー」をクリック
39.png

「ダッシュボード」をクリック
40.png

「Launch tool」ボタンを押す
41.png

42.png

「import workspace」をクリック
43.png

先程コピーしたファイル「workspace-sample.json」を選択
Import「Everything」を選択し, 「Import」ボタンをクリック。
44.png

「workspace-sample.json」がインポートされました。

「ハンバーガーメニュー」をクリック
45.png

「Back to workspace」を選択してワークスペースに戻ります。
46.png

Workspace ID を取得します。

「View detail」を選択。
47.png

Workspace IDをメモ帳などにコピー。後程使用します。
48.png
49.png

尚、サンプルの“Intents”、“Entities”、“Dialog”は下記の通りです。

Intents
50.png
51.png
52.png

Entities
53.png

Dialog
54.png
55.png
56.png

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エディターを使用しました。

57.png
各項目を登録し、Ctrl+xyで保存します。

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

58.png

speakerDeviceId: "plughw:1,0"をspeakerDeviceId: "pulse" に変更して、Bluetoothスピーカが使えるようにします。
speakerDeviceId: "pulse" // for bluetooth speaker Pulse Audio

59.png

12. プログラムの実行

$ cd ~/tjbot/recipes/conversation/ ⏎
$ sudo node conversation.js ⏎

60.png

「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/

「ハンバーガーメニュー」をクリック
61.png

「ダッシュボード」をクリック
62.png

「Launch tool」をクリック
63.png

日本語対応用に新しいWorkspaceを作成します。

“Create a new workspace”「Create」をボタンをクリック。
64.png

“Name”、“Description”、“Language:Japanese”を入力後「Create」ボタンを押す。
ここでは、“Name”:TJBot会話、Description:TJBotの会話例 としました。
65.png

“Intents”の登録
「Intents」タブを選択後、「Create new」ボタンをクリック。
66.png

“Intent name”、“User Example”を登録します。
登録するIntentsは2つで、下記の通りです。
尚、User Exampleを追加するには、「+ボタン」、Intentを追加するのは「Create new」ボタンを押します。
67.png

68.png

すべて登録したら下図のような構成になります。
69.png
70.png
71.png

次にEntitiesは登録しないので、そのままで
72.png

次にDialogを登録します。

Dialogの登録

「Dialog」タブ選択後、「Create」ボタンを押す。
73.png

初期状態では、“ようこそ”“その他”が登録されています。
74.png

ここでは「ようこそ」nodeは使わないため削除しました。
削除方法は下記の通りです。
75.png マークを押し、「delete」で削除。
76.png

「Yes, delete it」ボタンを押す。
77.png

2つのnode「冗談を言う」、「自己紹介」を登録します。
78.png

登録するnodeは以下の通りです。
79.png

それでは、登録します。

「Add node」ボタンを押す。
80.png

新しくできた「No condition set」の枠内をクリック
81.png

82.png

83.png

「冗談を言う」「Add node」ボタンをクリックて登録します。

下図の通り、登録が完了しました。
84.png

85.png

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

86.png

13-3. 変更点2:

Tjbot名称「Watson」を全角日本語に変更する。
~/tjbot/recipes/conversation/node_modules/tjbot/lib/tjbot.js
tjbot.jsの
147行あたり
name: 'Watson'
name:’Watson’
必ず全角日本語にしないと呼びかけても認識しませんので、ご注意ください。

87.png

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";

88.png

13-5. 変更点4:

“(1)追加点1:”のWatson「Conversation」会話フロー日本語対応で作成した、「Workspace Id」に変更します。
~/tjbot/recipes/conversation/config.js
config.jsの
9行あたり
exports.conversationWorkspaceId =’’“を変更登録する。

89.png

14. 日本語対応版プログラムの実行

$ cd ~/tjbot/recipes/conversation ⏎
$ sudo node conversation.js ⏎

90.png

「Watson」キーワードに続けて下記文章を言ってみてください。
TJBotが答えます。
「自己紹介をしてください」
「あなたは誰ですか」
「あなたは何者ですか」
「あなたが誰か教えてください」
「あなたについて教えてください」
「自己紹介をお願いします」

「冗談を言って」
「私に冗談を言ってみてください」
「私を笑わせて」
「私は冗談を聞きたい」
「何か面白いことを言って」

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