IBM BluemixのWatson API(Language Translation, Text to Speech)を使って、多言語チャットを実現する

#短い前置き
ようこそ、コグニティブの時代へ。

WatsonはIBMが開発した質問応答システム・意思決定支援システムであり、自然言語を理解し、学習することで人間の意思決定を支援します。

そんなWatsonの機能を簡単に利用できる環境がIBM Bluemixには揃っており、なんとAPI経由でそのWatsonの機能を呼び出すことが可能となっています。即コグニティブです。

また、WatsonのAPIを利用する上で是非利用したいのがBluemixの「Node-RED」です。

Node-REDとはブロックを繋ぎ合わせるだけでアプリケーションが作成可能なツールで、もともとBluemixとIoTデバイスの連携を容易にすることに注目して開発されたものですが、その便利さから最近ではソーシャル、アナリティクス、そしてWatsonと、様々な機能追加がなされています。

そこで今回はBluemixの「Node-RED」と「Watson」を使い、チャットアプリを作成することを通して、いかに簡単にアプリケーションが作成できるかを紹介していきたいと思います。

#Watson API
WatsonのAPIには様々な種類があり、その機能は日々更新されています。
![BMblog1.png](https://qiita-image-store.s3.amazonaws.com/0/103277/60f95e55-21d9-d90c-15c9-e02975cf2768.png)
画像認識、自然言語による会話、性格診断などいろいろな機能がありますが、今回は「[Language Translation](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/language-translation.html?cm_mc_uid=51621653511814304442542&cm_mc_sid_50200000=1450142178)」と「[Text to Speech](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/text-to-speech.html?cm_mc_uid=51621653511814304442542&cm_mc_sid_50200000=1450142178)」の2つの機能を組み合わせて使ってみたいと思います。

Language Translationはその名の通り言語の翻訳をしてくれる機能で、現在62の言語を認識し、いくつかの翻訳モデルを有しています。ちなみに日本語は認識はしてはくれますが英語→日本語の翻訳モデルはまだ対応できていません。

Text to Speechは入力したテキストを音声として読み上げてくれる機能です。こちらは日本語に対応しており、API経由で利用することができます。


#作成するアプリの概要
今回はWatson APIの「[Language Translation](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/language-translation.html?cm_mc_uid=51621653511814304442542&cm_mc_sid_50200000=1450142178)」と「[Text to Speech](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/text-to-speech.html?cm_mc_uid=51621653511814304442542&cm_mc_sid_50200000=1450142178)」の機能を使って、英語で入力された文章を様々な言語に翻訳し、読み上げてくれるチャットアプリを作りたいと思います。

全体像は以下のような形を想定しています。
![BMblog3.png](https://qiita-image-store.s3.amazonaws.com/0/103277/0ebd93e1-e0bc-3f7b-77a7-74124af040f1.png)

#実装
![BMblog2.png](https://qiita-image-store.s3.amazonaws.com/0/103277/b4d7ab7b-ed34-5071-7e35-5e0c03018786.png)

まずはチャット部分を作ります。
![BMblog5.png](https://qiita-image-store.s3.amazonaws.com/0/103277/6cf7cf60-ae0d-9ecd-0876-625effc422ef.png)

チャットは[ここ](http://www.ibm.com/developerworks/jp/cloud/library/cl-rtchat-app/)を参考にし、WebSocketを用いて作成しました。Node-REDではノードを置くだけでWebSocketのサーバー側が実装されるのでとても便利で早いです。使うときはjavascriptなどでクライアント側から呼び出せばいいだけになっています。

次にLanguage Translation部分。
![BMblog6.png](https://qiita-image-store.s3.amazonaws.com/0/103277/b1342482-4aab-6319-1c2e-dcf6d35e48c6.png)

翻訳の肝となる部分であり、英語で入力された文章をLanguage Translationにそのまま入力し、outputとしてそれぞれの言語の文章をWebSocketに入力しています。

Language Translationの設定もこれだけです。非常に簡単です。
![BMblog7.png](https://qiita-image-store.s3.amazonaws.com/0/103277/b1b1c359-4443-daa6-d641-c10ea9153f1e.png)


こんなに大量のWebSocketを立てる必要はありませんが、できるだけプログラミングの手間を減らし、Node-REDの機能を利用することを考えてこのようにしました。

最後に、HTML部分です。
![BMblog8.png](https://qiita-image-store.s3.amazonaws.com/0/103277/61a9d193-436e-3ec9-e206-8bfc61960a30.png)
ここでは実際にアプリケーションがデプロイされるURLやHTMLの内容を定義します。ここでWebSocketとの連携や、APIの呼び出しを行いました。

今回Text to SpeechはこのHTMLノードの中でAPI経由で呼び出していますが、Node-REDではText to Speechのノードを利用できるようになっているため、当然そちらを使っても同じことができます。
![BMblog9.png](https://qiita-image-store.s3.amazonaws.com/0/103277/cb603445-c249-2ce7-3056-8facccdffc00.png)

#テスト
完成したチャットをテストしていきます。
![BMblog10.png](https://qiita-image-store.s3.amazonaws.com/0/103277/8e37626f-2fd5-79dd-ae5b-c24077642e60.png)
チャットボックスに英語で入力を行うと、自動でフランス語、スペイン語、ポルトガル語、アラビア語に翻訳され、右側のボックスに表示されます。

また、名前欄の下には読み上げ言語を選択するプルダウンメニューがあり、ここで選択した言語で読み上げてくれます。

#まとめ
このようにNode-REDの機能を使えばプログラミングが苦手な私でも簡単にアプリケーションを作成することが可能になります。実際にコードを書いたのはjavascriptとHTMLだけです。

Bluemix、Node-REDはアイデアをすぐに形にできる分かりやすいツールだと思いますので、アプリケーション作成に是非お役立て下さい。即コグニティブです。