HoloLensは深度センサで得た空間点群の特徴点を求め、そこからユーザーの視線方向・位置を決めている。だが、それ以外の画像処理・点群処理の技術を使ったアプリケーション開発は手つかずの状態で残っている。
冒頭の写真は側部の深度センサ。左右に1つずつ付いています。なお、右端は単なるヒンジです。以下は「おさわり会」の様子を3分にまとめたものです。
お断り
以下は、公式な見解のようなものではありません。一介のプログラマが体験会で他のプログラマの方々と議論しながら考えた「こんな感じでやっているのかな?」という個人的予想です。全然違っているかもしれません。
また、丁寧な概念説明や挿絵などは、やり出すとキリがないので、やめました。すいませんが適宜ググって下さい。
ともに、悪しからずご了承ください。
なお、誤りを見つけましたら @weed_7777 までご連絡いただけると大変ありがたいです。
また、HoloLensが網膜照射で映像を出力していることに関しては、すでに西田宗千佳さん等がわかりやすい記事を書いてくださっているので、触れません。
http://av.watch.impress.co.jp/docs/series/rt/20150617_707456.htmlav.watch.impress.co.jp
名古屋 HoloLens おさわり会
装着してみないとわからないため、イベントは人数限定でした。これに応募し、入れていただきました。開催してくださったsilkyfeelのみつばさん、ありがとうございます。
いきなり余談ですが、私はかみさんとカレンダーを共有しており、予定の名称は全て自動的にかみさんに伝わるようになっています。このイベントは勉強会サイト(Connpass)の自動入力でカレンダー登録したのですが、名前は「HoloLensおさわり会」でした。
「何しに行くの?」
「いや、あの、触らないとわからない新しい装置を触りに行きます」
「ふーん」
…余談でした。
1. 原理
搭載しているセンサ
HoloLensは、広い範囲を知覚するために左右に1つずつ深度センサがあり、正面に普通のRGBカメラが付いています。おそらくジャイロセンサも入っています。
深度センサによる空間形状認識と認識データの蓄積
HoloLensは指示すると自分の視野の周りの空間形状を深度センサで調べ始め、判明した形状をメモリに蓄積していきます。そして、着用者が視線を動かすのにしたがって(ここはジャイロセンサで取っていると思います)、部屋の別の部分の形状を調べ、先ほど蓄積した空間形状に追加して補完していきます(上の動画にもあったやつです)。
HoloLensの深度センサの視野はKinectよりだいぶ広く、さらにHoloLensに近い壁や物体も知覚できます(10cmでもいけるそうです。Kinectは基本的にできなっかった)。着用者がぐるっと1回転しただけでも、
- 大まかな部屋の形状と
- 机や棚などの大きな器具の表面形状
を知覚することができます。
Kinectと比較しましたが、HoloLensにはKinectで積み上げたノウハウが直結して活用されている気がします。
- Kinectの視野を広げて可視領域を大きくし、
- 使う画像処理技術(Kinectの人体部位推定にはランダム・フォレストが使われていました)を高速な特徴点抽出に切り替え、
- ノイジーな人体部位推定をやめてハンドトラッキングによるコントロールにフォーカスし、誤動作を排除してユーザー体験を高めたもの
がHoloLensであり、Kinect v3と呼んでもよいのではないかと思います。
「特徴点」とは
画像処理の世界では「特徴点」というものがよく使われています。これは、拡大縮小・回転・ひし形変形しても「同じところ」であるとわかる固有な点(群)のことです。 この技術を使うと、車などの物体が動いているシーンを撮影すると、同じ車が移動していることが認識できます。
さらに、置物などの逆に「動かない点」が映像の中でどう動いたかを調べることで、撮影カメラの動きを逆算することができます。
なお、従来の 特徴点の抽出はさほど重い作業ではなく、リアルタイムに抽出して追跡することが可能になっています。
この技術は今や映画・ドラマ制作の中でなくてはならないものとなっています。
- 背景を撮影するときにビデオカメラの動きが取れるため、あとは部屋の中でマーキングされた幕の前で俳優が演技するところを同じカメラワークで撮影すれば、後で簡単に合成することができます。
- また、先に俳優の演技(とビデオカメラの動き)を先に撮っておき、あとからその動きとマッチするCGを作って合成することで、まるでそこにいるかのような映像を合成することができます。
蓄積した点群データから特徴点を抽出
これは私やその場にいた方々の予想ですが、HoloLensは、空間形状データを撮りながら、同時に空間の中の特徴点群を収集しています。
そして、先ほど説明したビデオカメラのように、捉えている特徴点群がビデオカメラの視野の中でどう動いたかを調べます。
先ほど、
置物などの「動かない点」が映像の中でどう動いたかを調べることで、撮影カメラの動きを逆算することができる
と言いました。おそらくHoloLensも同じことをしています。 それによって、撮影カメラの動き=ユーザーの視線の動きと物理的な移動、が取得できる、というわけです。
(Google の Project Tango も同じような原理だった気がします)
特徴点群は、撮りっぱなしだとずれてくるので、常に補正し更新し続けていると考えられます。
計算負荷、消費電力
追従性がとても良いので、私は最初「これはマイクロソフト独自のPCL(Point Cloud Library:点群処理ライブラリ)の性能が良いということか」と発言しました。すると、画像処理や点群処理に詳しい参加者の方が
マイクロソフト独自のPCLではないだろう。空間をセンシングして間引いている速さがソフトではこんなに速くできない。ハードでやっているのではないか。消費電力もソフトでやっていたら、かなり食ってしまうはず。FPGAを使っているかもしれない。
とおっしゃっていました。FPGAに詳しい方、教えて下さい。なお、HoloLensのバッテリーは4時間もつそうです。
2. 可能性
HoloLensの深度センサは、
- 空間形状の把握
- 着用者の視線と位置の計算
- 手のトラッキング
の3つのみに使われています。
しかし、
- 上の3つ以外のトラッキング(例えばKinectのように人間のボーンを取る)や、
- RGBカメラによる画像処理、
- RGBカメラと深度センサを合わせた認識処理、
- および様々な点群処理アルゴリズムの利用
については手つかずの状態で残っています。
ですから現状では、例えば
Minecraftで作った城の上に、別途作ったドラゴンのオブジェクトをつまんで乗せる、
といったことができません。しかしこれは、確信ではないですが、そんなに難しい問題ではない気がします😅。空間形状から装着者の位置を計算し、HoloLensの深度センサで手の相対位置をトラッキングすれば良いのではないかと思います。
つまり、HoloLensの潜在能力の一部しか現状では発揮されておらず、今後様々な新しい応用が開発される余地があり、伸びしろの大きいデバイス、だと思います。
具体的な使い道としてみつばさんはオートバイのショールームを考えておられました。実物大のバイクを表示して、360°あらゆる方向から見ることができる、というものです。さらに、ショールームの外観も自宅の車庫に描きかえて、どんな感じになるか確かめることができそうです。
また、みつばさんは3Dモデリング「する」よりも、できあがった3Dモデルを「見る」のにHoloLensは向いているのではないか、とおっしゃっていました。
おわりに
HoloLens、自分も手に入れて触って見たいですね。私の領域(科学教育)のアプリのアイデアは具体的なものがいくつかあります。しかし、入手するのはかなり困難なようです😩
まとめます。
HoloLensは深度センサで得た空間点群の特徴点を求め、そこからユーザーの視線方向・位置を決めているようです。だが、それ以外の画像処理・点群処理の技術を使ったアプリケーション開発は手つかずの状態で残っているようです。
もしこの記事が「参考になった」のでしたら、以下のツイートに「いいね」して下さい。コメントをリプライしていただいてもOKです。今後の記事を書く参考にさせていただきます。よろしくお願いします😌
#動画#Hololens の #原理 は深度センサで得た空間点群の特徴点を求め、そこからユーザーの視線方向・位置を決めている。だが、それ以外の画像処理・点群処理の技術を使ったアプリケーション開発は手つかずの状態で残っている。https://t.co/yrqmU6VkWp
— 植田 教育系はこちらをフォローして下さい (@feelphysicsjp) 2016年5月31日
ここまで読んでいただいて、ありがとうございました!