Unity3d で IBM Watson をつかう

2016.09.16 | unity3d, watson

自然言語を理解・学習し人間の意思決定を支援するコグニティブ・コンピューティング・システムとして話題になっているIBM Watson。 難病症例患者の病名を見抜き医師に治療法を提示したりボブ・ディランとの会話のCMなどニュースでも取り上げられたりしている。
githubにUnity向けのWatson SDKが公開されているので、概要と使用について記載する。

Watsonについて

APIによっては日本語に未対応なものもあるが現時点で日本語対応済みで面白そうなものとしては、

  • 自然言語インターフェースで対話を行うことができる「Conversation
  • HTM、PDFやドキュメントをWatsonで使用できる形式に変換する「Document Conversion
  • 質問に対して適切な回答を選出する「Retrieve and Rank

もちろんTextToSpeech、SpeechToTextなどあり、APIの日本語対応状況など詳細はこのページに分かりやすく記載されている。

UnityへのWatson SDKのインストールとサービスの追加

以下、unity-sdkのreadmeに記載されているものと大まかには同じではあるが、使用までの流れを記載する。

  1. まずは、IBM Bluemixアカウントを作成する。 https://console.ng.bluemix.net……istration/
    (※IBM BluemixとはIBMが提供するクラウドをベースとしたアプリケーションを構築。実行するためのプラットホーム) +Unityのプロジェクトを作成し、最新のSDKをここから手に入れる。
  2. 手に入れた「unity-sdk」を「Watson」にリネームし、unityのプロジェクトのAssetsフォルダへ +sdkのインポートが完了すると、「Thanks for installing the Watson Unity SDK, would you like to configure your credentials?」とでるので、「Yes」を押して設定ウィンドウを開く
  3. 使用したいAPI名横の「Configure」ボタンを押すとサービスのページが表示される。
  4. 右側の「サービスの追加」から「作成」ボタンを押し、サービスを作成し表示されるサービス情報の中から「サービス資格情報」を選択し、表示されているjsonをUnityのConfigEditorのテキストエリアにコピー&ペースト。「Apply Credentials」を選択ししばらくするとサービスがグリーンになり有効になる。
  5. 他にサービスを追加したい場合は、同じようにサービスを追加していく。

参考: Configuring your service credentials

 

SDKを使用する際の注意事項として、WatsonSDKはreadmeにも記載されているがWebPlayerでは使用できない。ビルドターゲットがWebPlayerになっている場合は他のプラットフォームへの変更が必要。

また、それぞれのAPIはプランごとに金額が設定されている。
最初の100万文字は無料で、その後従量課金などあるがどれも個人で試用する分には十分な量になっている。サービスとして使用する場合は再度プランの変更と課金を考えることになるだろう。

WatsonSDKをプロジェクトにインポートした後は、メニューに「Watson」が表示されるようになり、そこから「Configuration Editor」の表示などの機能の表示・実行が可能。

Watson SDK サンプルシーンについて

「/Watson/Examples/ServiceExamples/ServiceExamples.unity」には一通りのAPIがそれぞれGameObjectとして配置されている。visibleで切り替えて実行。
それぞれのMonoBehaviourにサンプルと関数が記載されているので、それを見るとおよその機能や使い方が分かる。これらのサンプルはログ出力やサウンドによる結果の出力のみとなっている。

「/Watson/Scenes/UnitTests/Main.unity」はGUI付きのサンプルシーンの呼び出し。事前にunityのBuild Settings…でシーンを追加する必要がある。

「/Watson/Scripts/Widgets」にGameObjectにアタッチ可能なComponentが入っている。アプリケーションを作成するには、これを組み合わせて作るかサンプルを参考にしていくのが良いだろう。

雑感

ConversationやRetrieve and RankなどWatsonが得意とする自然言語による質問応答システム・意思決定支援は試すことができていないが、これらAPIを連携させることで、VRなどさまざまなインタラクションを作成していくことができそうだ。
また、SDKの「ThirdParty」に含まれサンプルプログラムでも使用されている「TouchScript」や「WebSocketSharp」も使い勝手が良さそうなので今後見ていくことにする。

参考資料

OpenCVとUnityの連携について

2015.08.13 | openCV, unity3d

OpenCVとUnityとの連携を考えたとき、

  • openCVSharpを使う
  • pluginとしてnative実装
  • nativeで実装して通信(udp等)で連携
  • openCV for Unityをつかう

などあると思うけど、それぞれのメリット・デメリットをまとめておく。

openCVSharpを使う

メリット

  • Unityのみで完結する。
  • 最終アプリも一つとなる。
  • openCV <-> Unity texture のやり取りも可能

デメリット

  • macで若干使いにくい。
  • 本家openCVからの移植なので移植までのタイムラグがある。

pluginとしてnative実装

メリット

  • 最終アプリが一つとなる。
  • openCV <-> Unity texture のやり取りも可能

デメリット

  • win, macなどそれぞれpluginを用意する必要がある。
  • デバッグ等ちょっとやりにくい。

nativeで実装して通信(udp等)で連携

メリット

  • アプリが分かれるので、認識パートと描画パートなど開発を分けやすい。
  • 通信でのやりとりなので、データ量が少なければ比較的高速なやり取りが可能。(※pluginの場合との比較は未検証)
  • 認識と描画パートが分かれるので、後からそれぞれのパートを別の実装(UnityからUE4へなど)に変えやすい。

デメリット

  • アプリが複数となる。
  • 画像のやりとりをする場合は、工夫が必要か。 別アプリにしたときの画像のやりとりは、 syphonを使うなどになるか。

openCV for Unityをつかう

メリット

  • さまざまなデバイスに対応
  • 最終アプリも一つとなる。
  • Unityのみで完結する。
  • openCV <-> Unity texture のやり取りも可能
  • Kinectなどのサンプルもあり

デメリット

  • 有料 $95
  • openCVの知識+アセットの学習コストが必要。(Sampleなどが充実しているのでそれほど難しくはないが)
  • packageが巨大 300Mb程度

関連外部URL

UnityでOpenCVを どう使うか – OpenCVSharp vs OpenCV dllを使う環境 vs スタティックライブラリ

異なるアプリ間で動画処理を連携 Syphon と Spout + BlackMagic

異なるアプリ間で画像のデータをやり取りする場合。
主な例としては、VJソフト上でほかのアプリで描画した内容を描画してミックスしたい時や、プロジェクションマッピングの素材として別アプリで描画したものを使用したいとき、oFで描画した内容をUnity内で表示したいときなど。

Macでの定番としては Syphon がある。

サイトを見るとわかる通り、いろいろなアプリに対応している。
Unity版は、 https://github.com/Syphon/Unity3D

これを使うことでUnityで描画した内容を MadMapper 等で補正してプロジェクションマッピングに使用したりなどできる。

このような仕組みのwindows版が Spout

こちらもいろいろなアプリに対応。vvvvとかね。
もちろんUnity版のプラグインも https://github.com/sloopidoopi……pout4Unity

MadMappaerと同じようなプロジェクションマッピングするのに便利なのが、mapio2

BlackMagic Intensity シリーズなどキャプチャボードで取得した画像をSyphonなどで使用したいときには、BlackSyphon または、 BlackSpout

blackMagicからの描画を受け取る方法として、
oFだと、下記addon。
https://github.com/kylemcdonal……Blackmagic

Unityだと有料になるけれど、AVPro Live Camera
https://www.assetstore.unity3d……ntent/3683

どちらもBlackmagic Decklinkをサポートしている。

その他/参考
DeckLink.net
Full HD映像をMacに入力してoFでリアルタイムにエフェクトをかける

UE4 to Spout Plugin
https://forums.unrealengine.co……out-Plugin
https://github.com/Allar/UE4ToSpout

Unity3d / GRAVITY DAZE

2012.03.10 | unity3d

Unity3dでGRAVITY DAZEのような重力変化ものをつくってみました。
[DEMO]

矢印キー:キャラ移動
スペース:ジャンプ
Gキー:自キャラ無重力
マウスで対象オブジェクトクリックで、その方向へ重力発生。

continue reading…

Unity3d / Trail Renderer

2011.05.08 | unity3d

Unity3dのTrailRendererを使ってみます。
メニューのComponent -> Particles -> Trail Renderer です。
見え方としてはラインの描画になるのですが、Particlesに属しています。
ラインなのにパーティクルに属しているのに違和感あるのですが、このラインはカメラに対して常に表面を向きます。
常にカメラを向くのでオブジェクトに陰影はつきません。normalsが無い状態?です。
マテリアルもParticles系を指定して使うのが使いやすいです。
そういう動作的なところはParticlesと同じような動きになります。

[ demo ]

continue reading…

Unity3d / VectorField Physic

2011.04.30 | unity3d

前回のものをちょっと変更。
前回のものはvectorFieldからの力を vel += force; みたいな感じで、計算で処理していたのですが、せっかくunityでやっているので物理エンジンを使用して動きをつけて動かすものをCubeにしています。
Left Shiftキーとマウスで若干カメラのアングルを変更。中央の四角は移動可能です。

[ demo ]

continue reading…

Unity3d / VectorField

2011.04.16 | unity3d

VectorFieldをつくってみました。
ofAmsterdam WorkShopでつくられたものからの移植です。
「d」キーでデバッグ用のUIの表示非表示切り替え。
v: ポイントにかかる力の係数
radius: ドラッグを与える範囲

[ demo ]

continue reading…

Unity3D / Flashからの移植

2010.10.03 | unity3d

unity3dで以前Flashでつくったものをつくりなおしてみます。
unity3d v3 proで作成しています。
サンプルはcubeを80個、床面とそれぞれのオブジェクトに対して影、ImageEffectsのDepth Of Fieldを使用しています。

左上のPhysicボタンで、物理エンジンのオン/オフ切り替え。
オン時にはオブジェクトに対してランダムに力が働くようにしています。

[ demo ]

continue reading…

Unity3D Study vol.4 Collision

2010.01.20 | unity3d

引き続きUnity3Dです。
Unity for Flash Developers – Tutorial 5
Unity for Flash Developers – Tutorial 6 (Basic Physics)
Unity for Flash Developers – Tutorial 7 (Basic Collision Detection)
この動画を一通りみてつくってみます。

左上の”Create Cube”でシーン上にオブジェクトを追加され、それぞれのオブジェクトが衝突判定を持っています。他のCubeと接触しているものは赤になります。
※Dragしたときの床面とCubeとのあたり判定の処理がまずいので、よい方法を調べないといけません。

continue reading…

Unity3D Study vol.3 MonoBehaviour

2010.01.12 | unity3d

前回のスクリプト内で使用した Start() や Update() は、
MonoBehaviourで定義されている関数です。
Unityでスクリプトを作成した場合は、基本的にMonoBehaviourを継承してスクリプトが作成されます。

continue reading…

pagetop