強火で進め

このブログではプログラム関連の記事を中心に書いてます。

IBM の Watson を Unity から使う方法

IBM の Watson を Unity から使う方法を解説します。

Watson は米国のクイズ番組に出て、クイズ王に勝った事で話題になった AI です。

クイズ王に勝ったコンピューター | 日経 xTECH(クロステック)
http://tech.nikkeibp.co.jp/it/pc/article/trend/20110418/1031323/

Watson では何が出来るかはこの辺りが参考になります。

IBM Watson: Watson とは? - Japan
https://www.ibm.com/watson/jp-ja/what-is-watson.html

GitHub に Unity で使う時のコードが公開されていますが Asset Store でも配布されているのでそちらの方がお手軽で良いでしょう。ドキュメント部分を参照する為に観るのは良いと思います。

watson-developer-cloud/unity-sdk: Unity SDK to use the IBM Watson services.
https://github.com/watson-developer-cloud/unity-sdk

なお、この SDK は現時点では Unity の WebGL ビルドには未対応です。

前準備

Watson のサービスを使用するには IBM Cloud というサービスのアカウントを作成する必要が有ります。

アカウントをまだ持っていない場合にはこちらのページからアカウント作成して下さい。

まずは試してみるという段階では無料で使えるライト(Lite)アカウントで問題有りません。その後、必要に応じて他のプランを検討しましょう。

ライトアカウントで出来る事についてはこちらを参照。

IBM Cloudライト・アカウント (Bluemix) - Japan
https://www.ibm.com/cloud-computing/jp/ja/bluemix/lite-account/

IBM Watson Unity SDK のインストール

Asset Store にて、 「IBM Watson Unity SDK」で検索してインストールして下さい。

IBM Watson Unity SDK - Asset Store
https://assetstore.unity.com/packages/tools/ai/ibm-watson-unity-sdk-108831

IBM Watson Unity SDK で利用可能なサービス一覧はこちら(GitHub の README.mdに記載)。一部、 Deprecated (非推奨)のサービスも有るみたいです。

こちらでは日本語で確認できます。
※あくまで、 Watson API の一覧なので IBM Watson Unity SDK で利用出来ないサービスも含まれている可能性が有ります。

IBM Watson APIs サービスカタログ - Japan
https://www.ibm.com/watson/jp-ja/developercloud/services-catalog.html

テキスト→音声変換サービスを使う

ここでは Text to Speech (テキスト→音声変換)サービスの使い方を解説します。

[デモページ]

Text to Speech Demo
https://text-to-speech-demo.ng.bluemix.net/

[サービス情報]

Text to Speech - IBM Cloud
https://console.bluemix.net/catalog/services/text-to-speech/

こちらのページ経由でサーバにプロジェクトを作成します。「Get started free」ボタンを押して、プロジェクトを作成して下さい。

Watson Text to Speech
https://www.ibm.com/watson/services/text-to-speech/

後で気がついたですが、サービス情報のページの右下に有る「作成」のボタンからも作成可能でした。

アカウント情報と Web API の URL を設定

IBM Watson Unity SDK のインストール済みの Unity エディタでの作業に戻ります。

Text to Speech のサンプルコードは以下のパスに存在します。

Assets/Watson/Examples/ServiceExamples/Scripts/ExampleTextToSpeech.cs

しかし、このプログラムには以下の様に username / password / url が記述されていません。

public class ExampleTextToSpeech : MonoBehaviour
{
    private string _username = null;
    private string _password = null;
    private string _url = null;

これらの情報を確認する為に IBM Cloud のページに戻ります。

まず、 こちらのページを開きます。



すると先程作成したプロジェクトが表示されるのでクリックします。



左側のメニューから「サービス資格情報」を選択した後に「資格情報を表示」をクリックします。



ここに記載されている情報を ExampleTextToSpeech.cs に記述します( ExampleTextToSpeech.cs 記載されているものと並び順が違うので注意!!)。

例えば以下の様な場合には

{
  "url": "https://stream.watsonplatform.net/text-to-speech/api",
  "username": "aaaaaaaaaaaaaaaaaaa",
  "password": "bbbbbbbbb"
}

この様に置き換えます。

public class ExampleTextToSpeech : MonoBehaviour
{
    private string _username = "aaaaaaaaaaaaaaaaaaa";
    private string _password = "bbbbbbbbb";
    private string _url = "https://stream.watsonplatform.net/text-to-speech/api";

Herarchy に GameObject を作成し、この ExampleTextToSpeech.cs を追加します。

これで作業は完了です。 Play ボタンを押すとプログラム中に記述したテキストが Watson で音声に変換され再生されます。

なお、途中までは上手くスピーチが再生されましたが途中で以下のエラーが発生しました。
ログを読むと「 Lite プランでは使えない」との事。サンプルの後の方の処理は Lite (無料)プランでは使えない様です。

[02/21/2018 09:55:16][RESTConnector.ProcessRequestQueue()][ERROR] URL: https://stream.watsonplatform.net/text-to-speech/api/v1/customizations, ErrorCode: 400, Error: 400 Bad Request, Response: {
   "code": 400,
   "code_description": "Bad Request",
   "error": "This feature is not available for the Bluemix Lite plan. Please upgrade to a paid plan to activate this feature: https://console.bluemix.net/catalog/services/text-to-speech"
}

(2018/03/15 追記)
日本語で喋らせたい場合にはこちらのページを参照下さい。

IBM Watson の Text to Speech で日本語で喋らせる方法 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20180315/1521116773

(追記ここまで)

動作確認テクニック

こちらのサービスは curl を使ってサービスを使うことも可能です。
最終的な作品で curl を使ってアクセスする予定が無い場合でも動作確認などに使うと便利です。

curl でのアクセス方法はこちらのページが参考になります。

例として記述されているこちらのコードなどは

curl -X POST -u {username}:{password} \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--data "{\"text\":\"hello world\"}" \
--output hello_world.wav \
"https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize"

例えば自分の username が abc 、password が def の時には {username} と {password} の部分を以下の様に記述する事で実行できます。

curl -X POST -u abc:def \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--data "{\"text\":\"hello world\"}" \
--output hello_world.wav \
"https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize"

Text to Speech の使い方のドキュメントはこちらに有ります。

unity-sdk/Scripts/Services/TextToSpeech/v1 at develop · watson-developer-cloud/unity-sdk
https://github.com/watson-developer-cloud/unity-sdk/tree/develop/Scripts/Services/TextToSpeech/v1

他のサービスの使い方解説記事

Conversation(会話)
http://d.hatena.ne.jp/nakamura001/20180227/1519730520

Visual Recognition(画像解析)
http://d.hatena.ne.jp/nakamura001/20180306/1520316019

関連情報

このサービスで利用可能な SSML のエレメントはこちらで確認。

Using SSML
https://console.bluemix.net/docs/services/text-to-speech/SSML.html#ssml