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」も使い勝手が良さそうなので今後見ていくことにする。

参考資料

UE4 でcppを使用する

2016.05.26 | unreal engine 4

UPROPERTY 変数や関数にマクロをつけることでBPへの公開などが可能

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Damage")
UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Transient, Category = "Damage")

ブループリントで使用可能な関数

UFUNCTION(BlueprintCallable, Category = "Damage")

ブループリントでcppのイベントを取得する

UFUNCTION(BlueprintImplementableEvent, Category = "Damage")

※ヘッダに記載する。

オーバーライド可能な関数

void ACppActor::PostInitProperties()
初期値の設定などに使用する。 コンストラクタの後に適用される。


#if WITH_EDITOR
void ACppActor::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
}
#endif

エディタ上でプロパティの変更時に実行される。

コンポーネントからのcppのイベントをBP側で受ける

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FTestDelegate);
UPROPERTY(BlueprintAssignable, Category = "Test")
FTestDelegate OnTestDelegate;

OnTestDelegate.Broadcast();

動的デリゲート
https://docs.unrealengine.com/……index.html

C++ Event dispatchers: How do we implement them?
https://forums.unrealengine.co……ement-them

String Conversions: FString to FName, FString to Int32, Float to FString
https://wiki.unrealengine.com/……to_FString

参考

UE4 の C++ プログラミング入門
https://docs.unrealengine.com/……index.html

C++ プログラミングのチュートリアル
https://docs.unrealengine.com/……index.html

プラグイン
https://docs.unrealengine.com/……index.html

HARLEY-DAVIDSON Street750 + UE4 + Oculus + Arduino = JumpStart eXstream

2015.08.16 | oculus, unreal engine 4

ちょっと書くのが遅くなりましたが、、
2015年5月23日、24日、富士スピードウェイにて行われた HARLEY-DAVIDSON BLUE SKY HEAVEN にて UE4 + Oculus + Arduino + HARLEY-DAVIDSON Street750 という、実車とVR体験を組み合わせたコンテンツ「JumpStart eXstream」を展示しました。

概要等はprototypeのサイトに記載していますが、特徴としては HARLEY-DAVIDSON Street750 実車にエンジンをかけているということです。
以前の横浜ホットロッドショーバージョンでは、室内での展示ということもあり、バイクはエンジンが動いていない状態で、ハンドルやクラッチをカメラを使用しOpenCVを使いセンシングしていましたが、今回の展示では富士スピードウェイで野外ということもあり、実車のエンジンをかけることができます。
さらに、バイクをJumpStartというローラー台にのせることにより、エンジンをかけたバイクの後輪を空転させることができます。
また、最近のバイクは電子制御されている部分が多く、速度や回転数、アクセル・ブレーキの状態などをリアルタイムに取得することができます。
それらの走行情報をArduinoで取得し、描画用のPCへOSCで送信しOculus上のVR空間での走行へと反映しています。

バイクを電気系統をHackしてその情報をVR空間へ反映させています。バイクのセンシングは弊社のハードの得意なバイカーがArduinoで実装しています。

continue reading…

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

UE4+Oculus+oFで展示コンテンツをつくった

Unreal Engine 4 (UE4) Advent Calendar 2014 – Qiitaの15日目の記事です。

先日、パシフィコ横浜にてYokohama ホットロッドカスタムカーショーに、UE4+Oculusを使ったコンテンツを展示してきました。
初めてのUE4とOculusでコンテンツを作ったのでそのことについて書きます。
概要については、「横浜ホットロッドカスタムショーにGodSpeed VRを展示してきた」を。

今回使用したUEのバージョンはwindowsのUnreal Engine 4.5.1です。
UEを触り始めて間もないので、間違いなどあれば指摘ください。

■システム概要
スライド1

まずシステムの概要から、シーン描画はUE4を使用しOculusに表示しています。
センシング用のアプリケーションはoFでOpenCVを使い実装しています。
4つのカメラ入力がありそれぞれのセンシング位置についたマーカーの位置の変化に応じて、アクセル、フロント・リアブレーキ、クラッチ、ギア入力の値をoscでシーン描画PCに送信しています。
受け取った値を元に、描画PCではVR上のバイクの動作を変化させ、Oculusのヘッドトラッキング位置と合わせて、ライダーのボーンを実際のユーザーの動きに近くなるように制御しています。
バイクの速度変化に合わせて、工業用扇風機の風力を変化させるためにセンシングPC内のDoctorMXに対してOSCで風量を送信し、DoctorMX からDMXで調光器から工業用扇風機を制御しています。
バイクには振動装置を2台つけて、ローパスフィルタを通った低音で筐体となるバイクを振動させています。

continue reading…

横浜ホットロッドカスタムショーにGodSpeed VRを展示してきた

横浜ホットロッドカスタムショー(12月7日 パシフィコ横浜)にGodSpeed VRとして、UE+Oculus+センシングを使用したコンテンツを展示してきました。

写真 2014-12-06, 18 14 49

アクセルブレーキ入力などをセンシングしたバイクにoculusをかぶってまたがりソルトフラッツで開催される、最高速を競うボンネビルスピードウィークをVR空間内で体感するコンテンツです。

continue reading…

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…

pagetop