PDF資料はこちらからどうぞ。
http://seahorse-inc.com/QIITA/TJBot-2/Sentimentセットアップ全手順_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 「Watson Tone Analyzer」と「Twitter Streaming API」、Raspberry Piを使って、指定したキーワードでTwitterに流れている情報から、感情をリアルタイムで分析してLEDの色を変えます。
使用させていただいたレシピのサイト情報:
https://www.instructables.com/id/Make-Your-Robot-Respond-to-Emotions-Using-Watson/
4. 材料
価格は変わる可能性があります。
厚紙は、ミューズ KMKケントボード SS-A22mm厚を使いました。
5. H/Wセットアップ
Raspberry Pi用のOS Rasbianのインストールは割愛させていただきます。
http://qiita.com/Mitsu-Murakita/items/90907782b6aec9959328
の「3. Raspbian関連のインストール」などを参考にしてください。
5-1. LED
スイッチサイエンス社 NeoPixel スルーホールLEDを使用しました。
LEDは平らにカットされている方から
1.--- 使用しない
2.--- GND ⇒ 6番ピン
3.--- +3.3V ⇒ 1番ピン
4.--- Data in ⇒ 12番ピン
になっています。
(注意!)RaspberryPiに接続する際は、2⇒4⇒3の順番に接続する
6. Watson「Tone Analyzer」サービスの作成
Bluemixにログイン
https://console.bluemix.net/
「username」「password」を後程使用しますので、メモ帳などにコピー保存してください。
7. Twitter API 利用登録
Twitterを利用していない場合、事前にアカウント作成をしてください。
https://twitter.com/?lang=ja
次にAPI利用登録を行います。
API利用登録をして、下記4点を入手します。 https://apps.twitter.com/
・consumer_key
・consumer_secret
・access_token_key
・access_token_secret
Name:アプリケーションの名前を入力
Description:アプリケーションの説明を入力
Website:アプリケーションのURLを入力
Developer Agreement:チェックする
「Create your Twitter application」ボタンを押す
「Keys and Access Tokens」タブを選択。
後程使用しますので、メモ帳などにコピー保存してください。
Twitter API キーの取得手順
下記サイトが参考になります
http://dotnsf.blog.jp/archives/1044796238.html
8. 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 ⏎
9. コードのダウンロードとインストール
$ git clone https://github.com/ibmtjbot/tjbot.git ⏎
$ cd ~/tjbot/recipes/sentiment_analysis ⏎
$ npm install ⏎
10. 「Tone Analyzer」「Twitter API」構成情報の設定
ディレクトリを ~/tjbot/recipes/sentiment_analysis に移動します。
$ cd ~/tjbot/recipes/sentiment_analysis ⏎
インストールされたデフォルト構成ファイル「config.defaule.js」を「config.js」という名でコピーし、「config.js」を編集します。
$ cp config.default.js config.js ⏎
■“6.Watson「Tone Analyzer」サービスの作成”で取得した、「username」「password」
■“7.Twitter API 利用登録” で取得した、
・consumer_key
・consumer_secret
・access_token_key
・access_token_secret
を登録します。
ここではnanoエディターを使用しました。
各項目を登録し、 Ctrl+x ⇒ y ⇒⏎で保存します。
11. LED 色指定の問題
LEDが指定した色で光るかを確認します。
確認用プログラムをインストールし、実行します。
$ cd ~/tjbot/bootstrap/tests ⏎
$ npm install ⏎
$ sudo node test.led.js ⏎
おそらく意図したように光らなかったと思います。
これは、LEDの色設定(Data in)のPWMモジュールがピン番号12(GPIO 18)を使用していますが、内臓のオーディオ出力も同じGPIO18を使用しているため、競合状態となる為です。
回避策として、内臓のオーディオジャック出力を止める方法があり、以下のコマンドでサウンドカーネルモジュールを無効します。
ただこの場合、オーディオ出力はHDMI、USB、またはBluetooth経由でスピーカーを接続する必要があります。
$ cd ~/tjbot/bootstrap ⏎
$ sudo cp tjbot-blacklist-snd.conf /etc/modprobe.d/ ⏎
$ sudo update-initramfs -u ⏎
$ sudo reboot ⏎
raspberryが再起動したら、確認用プログラムを試して、意図した通り色が光ることを確認してください。
おそらく大丈夫と思います。
$ cd ~/tjbot/bootstrap/tests ⏎
$ sudo node test.led.js ⏎
12. プログラムの実行
$ cd ~/tjbot/recipes/sentiment_analysis/ ⏎
$ sudo node sentiment.js ⏎
キーワードの初期値は「education」です。
Twitter情報を収集し、分析後LEDの色が変わります。
(色が変わるまで、少々時間がかかります。)
13. LEDの色と感情について
<赤>---------- 怒り
<黄>---------- 喜び
<マゼンタ>----- 恐怖
<緑>---------- 嫌悪
<青>---------- 悲しみ
14. キーワードの変更方法
config.jsファイルのexports.sentiment_keywordを変更します。
$ cd ~/tjbot/recipes/sentiment_analysis/ ⏎
$ sudo nano config.js ⏎
10行目の
exports.sentiment_keyword = "education"; // keyword to monitor in Twitter
を修正します。
15. 日本語対応に変更
15-1. 変更点1:
~/tjbot/recipes/sentiment_analysis/sentiment.js
sentiment.jsの73行目
tweet = tweet.replace(/[^\x00-\x7F]/g, "");
をコメント行にする
// tweet = tweet.replace(/[^\x00-\x7F]/g, "");
16. 日本語対応版プログラムの実行
$ cd ~/tjbot/recipes/sentiment_analysis ⏎
$ sudo node sentiment.js ⏎