のしメモ アプリ開発ブログ

Unityアプリとかロボットとか作ってるときに困ったこととかメモ

THETA Sでカメラ撮影して画像をUnityで表示させる

THETA Sついに発売されましたね

PTPからHTTP通信になったので、かなり触りやすいですね。
さっそくWifiでのライブストリーミングを使ってみましたvine.co

ライブストリーミングの処理はごちゃっとしているので、今回は撮影に絞って紹介します。

THETA v2 APIリファレンス
https://developers.theta360.com/ja/docs/v2/api_reference/

API呼び出しは基本的にはWWWクラスで問題ありませんが、_getLivePreviewに関してはストリーミングになるので別のクラスを使用した方がいい感じです。

とりあえず公式にもある撮影の流れをメモります
(※これは前のTHETAでもできましたが、手法が変わったのでメモっときます)
公式の説明はこちら

1. セッション開始API実行

API:/osc/commands/execute
name:camera.startSession

APIの呼び出しはWWWクラスで、Jsonは今回LitJsonを使用しました。

基本的にこんな感じで呼び出します。
(jsonは外で作ってます)

// set header
Dictionary<string, string> header = new Dictionary<string, string> ();
header.Add ("Content-Type", "application/json;charset=utf-8");
		
// set url and data
string url = httpHead + ipAddress + ":" + httpPort + "/osc/commands/execute";
byte[] postBytes = Encoding.Default.GetBytes (json);
Debug.Log (url);
		
// 送信開始
WWW www = new WWW (url, postBytes, header);

 

2. ステータス取得API実行

API:/osc/state
Fingerprintを取得しておく

3. キャプチャAPI実行

API:/osc/commands/execute
name:camera.takePicture

4. CheckForUpdatesAPI実行

API:/osc/checkForUpdates
レスポンスのFingerprintが更新されないかチェック
更新されていないなら4.を繰り返し実行

5. 更新されたら、ステータス取得APIを実行

API:/osc/state
_latestFileUriを取得

6. _latestFileUriからファイル取得APIJPEGバイナリ取得

API:/osc/commands/execute
name:camera.getImage

7. 下記コードな感じでテクスチャ作成
Texture2D texture = new Texture2D(2048, 1024);
texture.LoadImage(www.bytes);
8.textureをマテリアルに貼ったり、保存したり、バイナリをサーバーに飛ばしたり..

その場でキャプチャした画像が使える!!
しかもワンコードでiOSAndroid、PCで動作します。便利!