読者です 読者をやめる 読者になる 読者になる

凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

Oculus Rift + PS Eye × 2個でカメラ越しに実際の世界を覗いてみた

C# Oculus

はじめに

先日、おそらく人類初の衝撃的な VR ストリーミング配信が ust にて行われました。

私は外出しており見逃してしまったので以下のリンクから拝見しました。

問題のシーンでは、Oculus Rift を思わずかなぐり捨ててしまうほどの臨場感(!?)が味わえます。ソフトの配布もされているので後述の環境整備をしたら自分で試すこともできます。

私も含め、日本ではバーチャルな流れが盛り上がっている印象がありますが、海外では Drone に載せて操縦したりと、現実の世界を2つのカメラを通して立体視する試みがされたりしています。


こういった流れに自分ものってみたいと思いやってみました。

2 眼カメラ作成

mer2 さんも使われておりましたが、PlayStationEye(以降 PS Eye)を 2 つ用います。

PlayStationEye

PlayStationEye

PS Eye は、以下の様な特徴を備えた安価で高性能なカメラです。

  • 解像度
    • 640×480 ピクセル時 60fps、320×240 ピクセル時 120fps
  • 画角
    • スタンダードビュー(56°)〜ワイドアングルビュー(75°)
  • 音声インプット
    • 4チャンネル アレイ式マイクロホン

通常の 50 度前後の WebCam では視覚野として画角が足りないため、ワイドアングルビューで高視野角を確保できる PS Eye はスグレモノです。これを2つ固定して並べてみました。

案1: 横(失敗)


カメラとカメラの間が離れすぎて像が重ならずうまく行きませんでした…。

案2: 縦(成功)


カメラ間が狭まり像が重なるようになります!水平・垂直の回転が PS Eye の機構的に角度のキャリブレがしやすいのでオススメです。mer2 さんもこの方式でした。

環境整備

PS Eye はそのままでは WebCam として認識されないため、ドライバを入れる必要があります。

上記 Code Laboratories さんより、「CL Eye Platform Driver」と「CL Eye Platform SDK」を入れます。Sample プログラムを試すか、mer2 さんが配布されている Ust 配信に使われていたアプリから動作確認ができます。サンプルプログラムは SDK をダウンロードすると以下の場所に格納されています。

  • C:\Users\YOUR_ACCOUNT_NAME\Documents\CL-Eye Platform SDK\Samples\CLEyeMulticam\C#\CLEyeMulticamWPFTest

Visual Studio 2012 for Windows Desktop から実行すると以下のように表示されます。

アプリ作成

上記 Sample から改造していっても良いのですが、すでにコレを元にして作成されたサンプルが Oculus Developer Forums にて上がっています。

henrik3141 さんによる返信のところに「OculusCamV1.zip」があるのでコレをダウンロードします。内部では、CL Eye が提供してくれている Lens Correction のパラメタをスライダからいじれたり、カメラ出力位置や大きさをキーボードで動かせるように改造されています。
まず、カメラの向きが異なるため回転処理を追記します。

MainWindow.xaml.cs 133 行目
// Create cameras, set some parameters and start capture
if (numCameras >= 1)
{
	camLeft.Device.Create(CLEyeCameraDevice.CameraUUID(0));
	camLeft.Device.Rotation = -900; // 追記
	camLeft.Device.Start();
}
if (numCameras == 2)
{
	camRight.Device.Create(CLEyeCameraDevice.CameraUUID(1));
	camRight.Device.Rotation = 900; // 追記
	camRight.Device.Start();
}

次に全画面で動作するように XAML に「WindowState」と「WindowStyle」を追記します。

MainWindow.xaml 1 行目
<Window x:Class="CLEyeMulticamWPFTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CLEyeMulticam"
    Title="OculusCam" Height="800" Width="1280" Background="Black" ResizeMode="NoResize" WindowState="Maximized" WindowStyle="None">

これで実行すると以下のようになります:

パラメタや位置を調整して、カメラの回転具合をキャリブレすれば立体で見えるようになります。横方向のズレは結構頭が補間してくれますが、縦方向はピッタリと合わせないとブレて見えます。腰のうちに置くと首がボロンと落ちたような感覚になりますし、Oculus Rift を装着している自分を見ると変な気分になって面白いです。

おわりに

次は AR と組み合わせて面白いことをしたいです。