2016/9/2に開催されたUnity勉強会(https://atnd.org/events/78121)での発表スライドです。内容はHoloLensの向けアプリ開発についてです。
The presentation was for Unity community workshop at 2rd Sep, 2016.
The main theme was HoloLens app development.
The slide shows followings:
- What is HoloLens?
- How to setup environment for app development
- Tips for HoloLens app
- My app "HoloShooter" screen shot.
2016/9/2に開催されたUnity勉強会(https://atnd.org/events/78121)での発表スライドです。内容はHoloLensの向けアプリ開発についてです。
The presentation was for Unity community workshop at 2rd Sep, 2016.
The main theme was HoloLens app development.
The slide shows followings:
- What is HoloLens?
- How to setup environment for app development
- Tips for HoloLens app
- My app "HoloShooter" screen shot.
5. レーザーポインター認識:三つの「壁」
5
① HoloLensカメラデータの取得 ③ レーザーポインター3D座標の特定
カメラ Intrincs,
Extrincs?
Raycast 精度?
② レーザーポインター認識
解像度?
性能?
距離?
ライブラリー?
API?
データ形式?
OpenCV (for Unity) (X,Y,Z)?
(x,y,z)?
6. ① HoloLensカメラデータの取得
6
タスク ライブラリー
開発環境 Unity 2019.4 LTS
GUI MRTK 2.4.0
画像処理 OpenCV for Unity 2.3.9
HoloLensカメラへのアクセス HoloLensCameraStream for Unity
カメラ?OpenCV画像形式への変換 HoloLens With OpenCVForUnity
Example
?HoloLensCameraStream と
?HoloLens With OpenCVForUnity Exampleは、
コンパイルすることができなかったため、
ソースコードを単純化し、ビルドできるように更新した。
ソースコード
https://github.com/abist-co-ltd/hololens-opencv-laserpointer
なぜか、Unity
2019.4 / MRTK 2.4.0
では動かない!
7. ② レーザーポインター認識
7
ガイド光
(x,y) ?
カメラの画像の中でガイド光の2D 座標 (x,y) を求める
y
x
1080
0
1920
発見したいモノ:
? 赤い
? 小さい
? 周りより明るい
? OpenCV の力を生かしてみよう!
r
x
x
x
0
r r
Laplace(r) =
Laplace(r) << 0
の画素を検知
周りより r が高い
? Laplace(r) < 0
8. ③ レーザーポインターの3D座標の特定
8
intrinsics extrinsics
知りたい
3D ? 2D 投射:
ガイド光の
? 2D 座標 (u,v)
? カメラの姿勢(~extrinsics)
? 性質 (intrinsics):
? カメラの焦点距離
? カメラの工学的中心
? 歪みなど
から該当する (X,Y,Z) 座標を求める
認識した
(u,v) 座標
該当する
(X,Y,Z)?
Raycast
u
v
ちょっと数学が必要ではあるが、
大変な計算は、Windows.Media Runtime API に任せよう
OpenCV で認識した
レーザーポインター 座標
Locatable Camera
Windows Runtime API
? VideoMediaFrame
? MediaFrameReference
Windows Media: 右手座標系 Unity: 左手座標系
z
z
座標系が一致
しなくて
ややこしい!
9. 処理の流
9
Windows Media Runtime API
Unity C# Wrapper
HoloLensCameraStream
OpenCV for Unity Utils OpenCV for Unity
レーザーポインター
認識
3D座標の特定
Unity Scripting API
Unity Scene Update
frame
Mat
変換
frame
Mat
レーザーポインター (u,v)
レーザーポインター
認識
カメラ
[intrinsics]
[extrinstics]
Physics.Raycast
camIntrinsics.UnprojectAtUnitDepth
レーザーポインター (X,Y,Z)
11. 関連情報
11
? Mixed Reality Locatable Camera
https://docs.microsoft.com/en-us/windows/mixed-reality/locatable-
camera
? 別方法:リモートの画像処理:
Introduction to Using OpenCV With Unity
https://www.raywenderlich.com/5475-introduction-to-using-opencv-with-unity