はじめに
Ovrvision SDK v0.7 がリリースされました!
アップデート内容に関して簡単に調べてみましたのでご紹介します。
更新点
今回の更新点は次のようになっています。
- The configuration XMLfile reading system was changed into a TEMP folder.
- Unity Inspector of the Ovrvision control has changed sharply.
- The distortion compensation function of the camera was changed. (intrinsics.yml config file)
- Fixed a bug in the camera control of the Unity Pro.
設定ファイル
設定ファイルが TEMP フォルダに保存されるようになりました。書き換えは実行時と終了時に行われるため、実行時および編集時のスライダの値の変更が保存されるようになります。
処理としては、Windows であれば、C:\Users\USER_NAME\AppData\Local\Temp
に ovrvision_config.xml
という以下の様な設定ファイルが保存されるようになります。
<?xml version="1.0" encoding="utf-8"?> <ovrvision> <cameraparam> <p set="exposure">Auto</p> <p set="whitebarance">Auto</p> <p set="contrast">32</p> <p set="saturation">40</p> <p set="brightness">100</p> <p set="sharpness">2</p> <p set="gamma">7</p> <p set="ipd-horizontal">0.00000</p> <p set="ipd-vertical">0.00000</p> </cameraparam> </ovrvision>
実行時は Ovrvision.Awake()
内の OvrvisionProperty.AwakePropSaveToXML()
で DLL 内の SaveParamXMLtoTempFile()
を呼び出して書き出ししています。終了時はどこか見当たらないので、Ovrvision.OnDestroy()
の ovClose()
内でやってるのかなぁ、と推測しています。
インスペクタの変更点
デフォルト値が設定されるようになった点と、カメラキャリブ用のファイルの設定が追加された点が変更点になります。
カメラの補正
カメラのキャリブデータの入力が可能になりました。データは OpenCV に準拠した形で YAML 形式で与えます。
%YAML:1.0 LeftCameraInstric: !!opencv-matrix rows: 3 cols: 3 dt: d data: [ 4.0781384509765246e+002, 0., 3.0354362331402490e+002, 0., 4.0681921278864587e+002, 2.1476481472578010e+002, 0., 0., 1. ] LeftCameraDistortion: !!opencv-matrix rows: 1 cols: 5 dt: d data: [ -4.3033426952578735e-001, 2.5186381334873753e-001, 1.4230015038428666e-004, 5.8724582307503469e-004, -9.1939409664307470e-002 ] RightCameraInstrics: !!opencv-matrix rows: 3 cols: 3 dt: d data: [ 4.0620808845966502e+002, 0., 3.2244279521779976e+002, 0., 4.0549297233063805e+002, 2.3292530943361234e+002, 0., 0., 1. ] RightCameraDistortion: !!opencv-matrix rows: 1 cols: 5 dt: d data: [ -4.1923438677328939e-001, 2.1476404664086707e-001, 7.5242604644903716e-004, 6.6822998564754937e-004, -5.8073543368349696e-002 ]
OpenCV のキャリブ周りについては以下をご参照下さい:
本パラメタの抽出には @izm さんの以下のツールが利用されているようです。
Ovrvisionの左右カメラの内部、外部パラメータのあれこれをキャリブレーションするソフト出来ました。
α版扱いです。
https://t.co/xoNwm0GIWc
pic.twitter.com/3LQNc6Bv3y
OvrvisionのSDKで読めないので現時点では使い道無いです
— izm @電脳フィギュア (@izm) 2014, 5月 10
intrinsics.yml
は Assets
化にあるのですが、ビルドによる書き出しの際は、これを {AppName}_Data
フォルダ以下に手動でコピーする必要があります(Ovrvision
のエディタ部にも書いてあります)。ここについては改善案を後述します。
テクスチャ取得部の別スレッド化(undocumented)
テクスチャ取得部が別スレッド化されたことで高速化されました。これは以下のエントリの内容を反映してくださったようです。
undistorted 画の取得(undocumented)
これまでは、画を取ってくる関数は以下のようになっていました。
[DllImport("ovrvision", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)] static extern void ovGetCamImageForUnityColor32(System.IntPtr pImagePtr_Left, System.IntPtr pImagePtr_Right, System.IntPtr pImagePtr_LeftUndistort, System.IntPtr pImagePtr_RightUndistort);
今回から、カメラ補正を指定したパラメタベースで行うようになったため、この undistorted な画の計算は AR 処理の直前で行われるようになったと思われ、以下の様な形になりました、
[DllImport("ovrvision", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)] static extern void ovGetCamImageForUnityColor32(System.IntPtr pImagePtr_Left, System.IntPtr pImagePtr_Right);
これまで undsitorted 画を渡していた OvrvisionEx.Render()
には、distorted 画を渡す形になっています。
ステレオカメラ間の微妙な時間のズレの低減
Twitter で @Wizapply さんがつぶやかれてました。
Ovrvision SDK v0.7公開しました!! カメラ歪み補正機能のほか、Unity内のOvrvisionEditor全体的に改修しました。ステレオカメラ間の微妙な時間のずれを極力少なくなるようにしました。... http://t.co/sg4H0LKi2t
— ウィザプライ (@Wizapply) 2014, 5月 23
未検証ですが嬉しいアップデートです。
ビルド時のキャリブファイル自動移動
StreamingAssets
ディレクトリを利用します。
Assets
ディレクトリ下に StreamingAssets
ディレクトリを作成し、そこへ intrinsics.yml
を移動します。そして、Ovrvision.Awake()
に以下の 1 行を追記します。
void Awake() {
intrinsicsFilePath = System.IO.Path.Combine(Application.streamingAssetsPath, intrinsicsFilePath);
...
}
これでビルド後も自動でファイルがコピーされて読み込まれるようになります。
おわりに
今回は堅実なアップデートがなされ、着実に完成度が高くなっていて嬉しいですね!次回のアップデートは6月2周目、OpenCV 画像解析系、ハンド2Dトラッキングとのことでとても楽しみです!
Ovrvision 1 : Stereo camera for Oculus Rift
- 出版社/メーカー: 株式会社しのびや.com
- メディア: エレクトロニクス
- この商品を含むブログを見る