Watson TJBotをつくりました【２】ツイッターの感情をLEDの色で表示

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

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

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

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

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

尚、厚紙でTJBotのボディ作成は割愛させていただきますが、下記URLを参考に作ってみてください。
https://www.youtube.com/watch?v=UEnuF--LA-0
https://www.instructables.com/id/Build-TJ-Bot-Out-of-Cardboard/

厚紙、３Dプリンター用の図面は下記URLです。
https://ibmtjbot.github.io/#gettj

ちなみに私は、A2サイズ２mmの厚紙にpdf印刷出力の図面を貼り、デザインナイフでカットしました。
デザインナイフでカットすると、かなり時間と労力を要しますので、レーザーカットをお勧めします。
レーザーカッターを時間制で使えるサービスもあるようです。

厚紙とRaspberry Pi、マイク、スピーカー、LED、モーターでTJBotを組み立て、Watson Cognitive APIを使って、色々なレシピが生まれています。
本投稿は、各レシピを実際に作成し、日本語化を行ってみた際の手順内容となっています。

# ２.  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/


# ３.   今回作成するレシピ
Watson 「Watson Tone Analyzer」と「Twitter Streaming API」、Raspberry Piを使って、指定したキーワードでTwitterに流れている情報から、感情をリアルタイムで分析してLEDの色を変えます。

使用させていただいたレシピのサイト情報：
https://www.instructables.com/id/Make-Your-Robot-Respond-to-Emotions-Using-Watson/

# ４.  材料
価格は変わる可能性があります。
![01.png](http://seahorse-inc.com/QIITA/TJBot-2/01.png)
厚紙は、ミューズ　ＫＭＫケントボード　ＳＳ－Ａ２２ｍｍ厚を使いました。　


# ５.  H/Wセットアップ
Raspberry Pi用のOS Rasbianのインストールは割愛させていただきます。
http://qiita.com/Mitsu-Murakita/items/90907782b6aec9959328
の「3. Raspbian関連のインストール」などを参考にしてください。

## ５-１.   LED
スイッチサイエンス社 NeoPixel スルーホールLEDを使用しました。
![03.png](http://seahorse-inc.com/QIITA/TJBot-2/03.png)![04.png](http://seahorse-inc.com/QIITA/TJBot-2/04.png)


LEDは平らにカットされている方から
1.--- 使用しない
2.--- GND　	⇒　　6番ピン
3.--- +3.3V 	⇒　　1番ピン
4.--- Data in	⇒　12番ピン
になっています。
（注意！）RaspberryPiに接続する際は、２⇒４⇒３の順番に接続する
![05.png](http://seahorse-inc.com/QIITA/TJBot-2/05.png)


# ６.  Watson「Tone Analyzer」サービスの作成
Bluemixにログイン
https://console.bluemix.net/

![06.png](http://seahorse-inc.com/QIITA/TJBot-2/06.png)

![07.png](http://seahorse-inc.com/QIITA/TJBot-2/07.png)

![08.png](http://seahorse-inc.com/QIITA/TJBot-2/12.png)

カタログより<font color="blue">「Tone Analyzer」</font>を選択
![09.png](http://seahorse-inc.com/QIITA/TJBot-2/09.png)

<font color="blue">「作成」</font>をクリック
![10.png](http://seahorse-inc.com/QIITA/TJBot-2/10.png)

<font color="blue">「サービス資格情報」</font>をクリック
![11.png](http://seahorse-inc.com/QIITA/TJBot-2/11.png)

<font color="blue">「資格情報の表示」</font>をクリック
![27.png](http://seahorse-inc.com/QIITA/TJBot-2/27.png)

<font color="red">「username」「password」を後程使用しますので、メモ帳などにコピー保存してください。</font>
![13.png](http://seahorse-inc.com/QIITA/TJBot-2/13.png)
![14.png](http://seahorse-inc.com/QIITA/TJBot-2/14.png)

# ７. Twitter API 利用登録
Twitterを利用していない場合、事前にアカウント作成をしてください。
　https://twitter.com/?lang=ja　

次にAPI利用登録を行います。
API利用登録をして、下記４点を入手します。　https://apps.twitter.com/　
<font color="blue">・consumer_key
・consumer_secret
・access_token_key
・access_token_secret</font>

<font color="blue">「Create New App」</font>ボタンを押す。
![15.png](http://seahorse-inc.com/QIITA/TJBot-2/15.png)

![16.png](http://seahorse-inc.com/QIITA/TJBot-2/16.png)
<font color="blue">Name：アプリケーションの名前</font>を入力
<font color="blue">Description：アプリケーションの説明</font>を入力
<font color="blue">Website：アプリケーションのURL</font>を入力
<font color="blue">Developer Agreement：チェック</font>する
<font color="blue">「Create your Twitter application」</font>ボタンを押す

<font color="blue">名前の箇所</font>をクリック。
![17.png](http://seahorse-inc.com/QIITA/TJBot-2/17.png)

<font color="blue">「Keys and Access Tokens」</font>タブを選択。
![18.png](http://seahorse-inc.com/QIITA/TJBot-2/18.png)![19.png](http://seahorse-inc.com/QIITA/TJBot-2/19.png)
<font color="red">後程使用しますので、メモ帳などにコピー保存してください。</font>

<font color="green">Twitter API キーの取得手順</font>
下記サイトが参考になります
http://dotnsf.blog.jp/archives/1044796238.html


# ８. Raspbianの最新化とNode.js、npm、のインストール
TeratermなどでSSH接続します。ID、パスワードの初期値は、
　　<font color="blue">ID:pi
　　Password: raspberry です。</font>
![20.png](http://seahorse-inc.com/QIITA/TJBot-2/20.png)

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

```Command:
$ 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 ⏎
```

# ９. コードのダウンロードとインストール
```Command:
$ git clone https://github.com/ibmtjbot/tjbot.git ⏎
$ cd ~/tjbot/recipes/sentiment_analysis ⏎
$ npm install ⏎
```

インストールしたプログラムなど
![21.png](http://seahorse-inc.com/QIITA/TJBot-2/21.png)


# １０. 「Tone Analyzer」「Twitter API」構成情報の設定
ディレクトリを　<font color="blue">~/tjbot/recipes/sentiment_analysis</font> に移動します。

```Command:
$ cd ~/tjbot/recipes/sentiment_analysis ⏎
```

インストールされたデフォルト構成ファイル<font color="blue">「config.defaule.js」</font>を<font color="blue">「config.js」</font>という名でコピーし、<font color="blue">「config.js」</font>を編集します。

```Command:
$ cp config.default.js config.js ⏎
```

■<font color="green">“６．Watson「Tone Analyzer」サービスの作成”</font>で取得した、<font color="blue">「username」「password」</font>
■<font color="green">“７．Twitter API 利用登録” </font>で取得した、
    <font color="blue">・consumer_key
    ・consumer_secret
    ・access_token_key
    ・access_token_secret</font>
を登録します。

ここではnanoエディターを使用しました。
![22.png](http://seahorse-inc.com/QIITA/TJBot-2/22.png)
各項目を登録し、	<font color="blue">Ctrl+x</font> ⇒ <font color="blue">y</font> ⇒<font color="blue">⏎</font>で保存します。

# １１. LED 色指定の問題
LEDが指定した色で光るかを確認します。
確認用プログラムをインストールし、実行します。

```Command:
$ cd ~/tjbot/bootstrap/tests ⏎ 
$ npm install ⏎
$ sudo node test.led.js ⏎
```
![23.png](http://seahorse-inc.com/QIITA/TJBot-2/23.png)

おそらく<font color="red">意図したように光らなかった</font>と思います。
これは、LEDの色設定(Data in)のPWMモジュールがピン番号12（GPIO 18）を使用していますが、内臓のオーディオ出力も同じGPIO18を使用しているため、競合状態となる為です。
回避策として、内臓のオーディオジャック出力を止める方法があり、以下のコマンドでサウンドカーネルモジュールを無効します。
ただこの場合、オーディオ出力はHDMI、USB、またはBluetooth経由でスピーカーを接続する必要があります。

```Command:
$ cd ~/tjbot/bootstrap ⏎
$ sudo cp tjbot-blacklist-snd.conf /etc/modprobe.d/ ⏎
$ sudo update-initramfs -u ⏎
$ sudo reboot ⏎
```

raspberryが再起動したら、確認用プログラムを試して、意図した通り色が光ることを確認してください。
おそらく大丈夫と思います。

```Command:
$ cd ~/tjbot/bootstrap/tests ⏎
$ sudo node test.led.js ⏎
```

# １２. プログラムの実行
```Command:
$ cd ~/tjbot/recipes/sentiment_analysis/ ⏎
$ sudo node sentiment.js ⏎
```
![24.png](http://seahorse-inc.com/QIITA/TJBot-2/24.png)
キーワードの初期値は<font color="green">「education」</font>です。
Twitter情報を収集し、分析後LEDの色が変わります。
<font color="orange">（色が変わるまで、少々時間がかかります。）</font>

# １３. LEDの色と感情について
＜赤＞---------- 怒り
＜黄＞---------- 喜び
＜マゼンタ＞----- 恐怖
＜緑＞---------- 嫌悪
＜青＞---------- 悲しみ

# １４. キーワードの変更方法
<font color="blue">config.js</font>ファイルの<font color="blue">exports.sentiment_keyword</font>を変更します。

```Command:
$ cd ~/tjbot/recipes/sentiment_analysis/ ⏎
$ sudo nano config.js ⏎
```

10行目の
exports.sentiment_keyword = <font color="green">"education"</font>;       // keyword to monitor in Twitter
を修正します。
![25.png](http://seahorse-inc.com/QIITA/TJBot-2/25.png)


# １５. 日本語対応に変更
## １５－１. 変更点１：
~/tjbot/recipes/sentiment_analysis/sentiment.js
sentiment.jsの73行目
tweet = tweet.replace(/[^\x00-\x7F]/g, "");
をコメント行にする
<font color="red">// tweet = tweet.replace(/[^\x00-\x7F]/g, "");</font> 


# １６. 日本語対応版プログラムの実行
```Command:
$ cd ~/tjbot/recipes/sentiment_analysis ⏎
$ sudo node sentiment.js ⏎
```

![26.png](http://seahorse-inc.com/QIITA/TJBot-2/26.png)
Twitter情報が少なくて、LEDの色が変わらない場合は、<font color="red">キーワードを変更して</font>、試してください。