下のビデオのように、表示ビデオを上下左右にシフトさせるためにどのテクニックを使用すればよいか、誰にもわかりませんか? Kinectでこれを実現したいのですが、別のアイデアがあります。
前もって感謝します。
下のビデオのように、表示ビデオを上下左右にシフトさせるためにどのテクニックを使用すればよいか、誰にもわかりませんか? Kinectでこれを実現したいのですが、別のアイデアがあります。
前もって感謝します。
編集:
目が覚めたので、これについて詳しく説明します(目が覚めるまでに1週間かかったようです)。
そのため、Winscape プロジェクトは、現実世界のウィンドウを仮想世界に与えることで、現実世界と仮想世界を結びつけます。これを行う方法は、現実世界が仮想世界の一部であるかのように振る舞い、モニター (窓のように偽装) の表示を変更して、仮想世界に存在する場合に人が見るはずのビューを再現します。
仮想世界を想像してみてください。必ずしも終わりがあるわけではありませんが、何かをレンダリングしようとするのをやめるポイントがあるので、レンダリングされたすべての要素を含むボックスに世界が囲まれているとしましょう. Winscape が行うことは、仮想世界が実際に現実世界に存在するように見せかけ、モニターを通してそれを見ることができるようにすることです。
最初のステップは、明らかに仮想世界を作成することです。手始めに、リテラル ボックスを作成することをお勧めします。各壁を異なる色にするか、壁に色のグラデーションを付けます。簡単なものを作ります。これを処理する 3D フレームワークをまだ決めていない場合は、XNA をお勧めします。これは、Kinect SDK で動作する C# であり、オンラインで役立つチュートリアルがたくさんあります。ワールドを作成したら、XNA を使用してボックス内にカメラを配置し、カメラを回転させる簡単なコントロールをいくつか追加します。これにより、ボックスを内側から見て、レンダリングが期待どおりに機能していることを確認できます。
それが終わったら、窓を置く場所を決める必要があります。これらは、3D シーンの視点になります。この概念を説明するために、XNA カメラ チュートリアルから取った写真を次に示します。
実際のチュートリアルを読んでも、私とまったく同じことを言っているわけではないことに注意してください。したがって、(0,0,0) ポイントは「目」の場所です。ピンクの四角形はウィンドウを表します。窓を見ると、目元からピンク色の窓の隅まで4本の線が引かれています。これらの 4 つの線は、背景と衝突するまで前方に延長され、緑色の長方形が作成されます。これは、窓から見える四角形になります。
XNA が実際にこれを処理することに注意してください。仮想シーンにカメラを作成して移動し、計算を行ってウィンドウに直接向けるだけです。現実世界での自分の位置を表す方法で、そのカメラを仮想空間に配置する必要があります。これを行うには、Kinect を使用して、それ自体に関連する現実世界の座標を取得し、アプリケーションを構成して、Kinect がウィンドウに関連してどこにあるかを認識します。そのデータを組み合わせることで、現実世界のモニターに対する目の位置を取得できます。モニターは仮想世界のウィンドウで表されるため、仮想世界のどこにいるのかを把握できます。仮想世界であなたの頭がある場所に仮想カメラを配置し、窓に向けます。
元の半明快な暴言:
よし、これを撮ってみよう(もうすぐ午前 1 時なので、うまくいかなかった場合はお知らせください。目が覚めたら戻ってきます)。
まず、かなりの数の数学が含まれますが、ざっと目を通します。基本的に、3 つのレイヤーがあります。
人物 ---- 「窓」 (モニター) ---- シーン
もちろん、シーンは実際には存在しません。その人物を仮想世界に組み込む必要があり、実際には平面的なイメージであるシーンが壁の後ろに存在します。人がそのシーンを見ることができる唯一の方法は、実際にはモニターによって偽装されている壁の窓を通してです。
だから、ここに数学があります。Kinect は、部屋のどこに立っているか、さらに重要なことに、頭がどこにあるかを計算できます。これにより、自分の目がどこにあるかの大まかな感覚をつかむことができます。この点 (あなたの目) を取り、仮想世界で使用している座標に変換する必要があります。次に、これらの目が仮想ウィンドウを通して何を見ることができるかを計算します。これを行うには、目からウィンドウの各隅まで、「シーン」画像に当たるまで線を投影します。各ウィンドウは、背景画像の長方形の領域に対応します。この四角形は、画面に描画する必要があるものです。
最も難しい部分は、現実世界をほぼ完全に模倣するように仮想世界を設定することです. 基本的に、多くの構成が必要です (「わかりました、このウィンドウは Kinect の 1.5 メートル上にあります..そしてその左に .25 メートルです..」)。また、シーンの写真をどこまで戻せばよいかもわかりません。何か思いついたら、これに戻りますが、実際に試してみて、セットアップに適した距離を見つけてください。
待てよ、距離を測れなかった理由が分かった。その例が 3D シミュレーションを使用しているためです。かなり気の利いた。したがって、シミュレーションでウィンドウを再生する場所などを把握する必要があります。
使用するセットアップ (KinectDSK、libfreenect、OpenNI など) とこれをどれだけ正確にするかに基づいて、複数の手法があります。
たとえば、 OpenNI には、使用可能なユーザーの重心を返すGetCoMという関数があります (この時点でスケルトンを追跡する必要はありません)。ビデオでは OpenNI が使用されているようですが、まだ古いバージョンが使用されています。新しいバージョンでは、「psi」(ψ) ポーズなしでスケルトン トラッキングが可能です。
ユーザーの頭の方向を向いているようには見えないことに注意してください。たとえば、体がある方向を向いていて、頭が別の方向を向いている可能性があります。G.Fanelli と彼のチームは、この分野でかなりの調査を行いました。Kinect については、Consumer Depth Cameras からのリアルタイム ヘッド ポーズ推定をご覧ください。
KinectSDK と Kinect for Windows を少し使ってみたところ、Face Trackerが含まれていることに気付きました。
最終的に、トラッキングをどの程度緩くするか正確にするか、理想的な設定 (最大距離、使用するコンテンツなど) に基づいて、どの SDK/ライブラリが最適かを判断できます。また、これはプログラミングの経験にも少し依存すると思います。その場合は、取り組みやすいラッパー (Unity、MaxMSP/Jitter、Processing、openFrameworks など) も探してください。