LoginSignup
4
6

More than 5 years have passed since last update.

Watson TJBotをつくりました【5】写真を撮って内容を分析

Posted at

PDF資料はこちらからどうぞ。
http://seahorse-inc.com/QIITA/TJBot-5/VisualTJ全手順_20170724.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、「Text to Speech」「Visual Recognition」とRaspberry Pi、Bluetoothスピーカー、Node-Redを使って、撮った写真について話します。

使用させていただいたレシピのサイト情報:
https://github.com/samuelvogelmann/visualtj

4. 材料

価格は変わる可能性があります。
01.png
厚紙は、ミューズ KMKケントボード SS-A22mm厚を使いました。 

5. H/Wセットアップ

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

5-1. Bluetoothスピーカー

Anker SoundCore mini コンパクト Bluetoothスピーカーを使用しました。

・BluetoothパッケージPulseAudioパッケージをインストール

・PulseAudioをsystemdに登録
nanoを使ってpulseaudio.serviceに書込みます。

$ sudo nano /etc/systemd/system/pulseaudio.service ⏎

02.png
03.png

・pulseaudio-bluetooth.confファイルを作成します。
nanoを使ってpulseaudio-bluetooth.confに書込みます。

$ sudo nano /etc/dbus-1/system.d/pulseaudio-bluetooth.conf ⏎

04.png
05.png

・system.paファイルを編集

$ sudo nano /etc/pulse/system.pa ⏎

06.png
07.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 ⏎

08.png

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

スピーカーの電源をオン。

$ sudo bluetoothctl ⏎
[bluetooth]# power on ⏎

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

[bluetooth]# scan on ⏎

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

[bluetooth]# scan off ⏎

09.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 ⏎

それでもだめだったら、スピーカのモード切替を行う。

5-2. カメラ

サインスマート Raspberry Pi 用 カメラモジュール Camera Module for ラズベリーパイを使用しました。
10.png

カメラが使えるように、Raspberry Piを設定します。

$ sudo raspi-config ⏎

「5 Interfacing Options」選択
11.png

「P1 Camera」選択
12.png

「はい」選択
13.png

「了解」選択
14.png

「Finish」選択
15.png

6. Watson「Text to Speech」、「Visual Recognition」サービスの作成

Bluemixにログイン
https://console.bluemix.net/
16.png
17.png
18.png

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

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

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

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

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

(2)カタログより「Visual Recognition」を選択
25.png

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

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

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

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

7. Rasbianの最新化とNode.js、Node-Redのインストール

TeratermなどでSSH接続します。ID、パスワードの初期値は、
  ID:pi
  Password: raspberry
です。
31.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 ⏎
$ sudo npm install -g node-red ⏎

一度Node-Redを起動してから停止します。

$ node-red ⏎

Ctl + c で停止します。

Watson Node-Redサービスをインストールします。

$ cd ~/.node-red ⏎
$ npm install node-red-node-watson ⏎

Node-Redを起動します。
$ node-red

$ node-red ⏎

32.png
終了するのは、Ctl+cです。

ブラウザーを使って、 IPアドレス:1880 でアクセスします。
Watsonノードも登録されています。

33.png

8. コードのダウンロードとインストール

$ git clone https://github.com/samuelvogelmann/visualtj.git ⏎
$ cd ~/visualtj ⏎

34.png
「flow.json」がダウンロードしたNode-Redのコードです。

9. ダウンロードしたコードをNode-Redへインポート

インポートはクリップボードを使用します。
Winscpなどを使って、「flow.json」をクライアントPCへ転送します。

Wordpad「flow.json」を開き、Ctl+aCtl+c
35.png> でクリップボードへコピーします。

Raspberry側でNode-Redが停止している場合、Node-Red起動しておきます。

$ node-red ⏎

36.png

クライアントPC側のブラウザでNode-Redにアクセス。
http://RaspberryPIのIPアドレス:1880

右上の37.png
「ハンバーガーメニュー」「読み込み」「クリップボード」
38.png

貼り付けて、「読み込み」
39.png

「VisualTJ Recipe」が読み込まれました。
40.png

10. 「Text to Speech」、「Visual Recognition」、構成情報の設定

(1)「Text to Speech」
「Text to Speech」ノード(緑色)をダブルクリック
41.png

「username」「password」を入力後、「完了」ボタンを押す。
42.png

(2)「Visual Recognition」
「Text to Speech」ノード(紫色)をダブルクリック
43.png

「API Key」を入力後、「完了」ボタンを押す。
44.png

45.png

11. 写真イメージが表示されないときに、修正する箇所

Node-Redが実行されている、Raspberryのブラウザーでプログラムを実行するには問題ないですが、別のPCのブラウザーで実行すると撮影した写真イメージが表示されません。
これは、イメージの保存場所指定のURLがlocalhostになっているためです。
ここでは、RaspberryのIPアドレスを「192.169.1.20」としてプログラムを修正します。

「JavaScript」ノードの修正。
46.png をダブルクリック
47.png
15行目「localhost」「192.168.1.20」に変更します。
var image = "<img src='http://localhost:1880/getimage?"+ new Date().getTime() + "' alt='Picture' width='480px'/>";

var image = "<img src='http://192.168.1.20:1880/getimage?"+ new Date().getTime() + "' alt='Picture' width='480px'/>";

「完了」ボタンを押す。

12. プログラムの実行

Node-Redが起動していない場合は、「$ node-red」 で起動しておきます。
48.png

PCのブラウザーからアクセス
http://192.168.1.20:1880/visualtj
ここでは、RasberryのIPアドレスを「192.168.1.20」としました。
49.png

「Take a Picture」ボタンをクリックして、写真を撮ります。
50.png

「Analyze it」ボタンをクリック、撮影した写真イメージが何かを分析します。
51.png
分析結果を表示と音声で答えます。

13. 日本語対応に変更

(1)「WebApp」ノード
52.png
・14行目
<p><b>Hi my name is TJBot! I'm an open source project designed to help you access IBM Watson Services.</b></p>

<p><b>ハーイ!TJBotです。私はIBM Watson Servicesへのアクセスを支援するように設計されたオープンソース・プロジェクトです。</b></p>

・15行目
71.png

・19行目
<div id="divbutton"><button type="button" onclick='takepic("take picture");'>Take a Picture</button></div>

<div id="divbutton"><button type="button" onclick='takepic("take picture");'>写真を撮る</button></div>

・20行目
<div id="divbutton"><button type="button" onclick='analyze("analyze picture");'>Analyze it</button></div>

<div id="divbutton"><button type="button" onclick='analyze("analyze picture");'>写真を分析</button></div>

(2)「Picture status」ノード
53.png
・1行目
<p><b>I've taken this picture. Now you can analyze it!</b></p>

<p><b>写真を撮りました。分析できますよ!</b></p>

(3)「Visual Recognition」ノード
54.png
“Language”「English」から「Japanese」へ変更

(4)「No result found」ノード
55.png
<p><b>I don't know what this is!</b></p>

<p><b>なんだか?わかりません!</b></p>

(5)「Convert class to payload」ノード
・1行目
msg.payload="This is a "+msg.class;

msg.payload="これは"+msg.class;
56.png

(6)「Text to Speech」ノード
57.png
“Language”「US English」から「Japanese」へ変更
“Voice”「Michaei」から「Emi」へ変更
58.png

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

Node-Redが起動している状態で、PCのブラウザから
http://192.168.1.20:1880/visualtj
にアクセスします。

「写真を撮る」をクリック
59.png

「写真を分析」をクリック
60.png

61.png
分析結果を日本語表示と音声で答えます。

4
6
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
4
6