Slide 1

Slide 1 text

Tokyo HoloLens meets up vol.5 SpatialUnderstanding ” ” で 椅子 の 検知にチャレンジしてみたよ

Slide 2

Slide 2 text

自己紹介  ZuQ9Nn(ずきゅーん)  普段の業務はObjective-CでiOSアプリ開発  Swift は書いてません orz..  HoloLensとUnityは趣味レベル  なんちゃってホロデベロッパー

Slide 3

Slide 3 text

ブログにも記事をちょこっと書いるよ  ZuQ9->Nn To 辛周(ズキューンとからまわり) (http://zuq9nn.blogspot.jp/)  HoloLens 開発 SpatialUnderstanding 事始め 空間検知と空間内の情報(天 井、床、壁) の判定まで ( http://zuq9nn.blogspot.jp/2017/06/hololens-spatialunderstanding.htm)  HoloLens の開発 SpatialUnderstandingDllTopologyで壁にオブジェクト配置 してみる (http://zuq9nn.blogspot.jp/2017/09/hololensspatialunderstandingdlltopol ogy.htm)

Slide 4

Slide 4 text

SpatialUndstandingの機能  空間検知  空間内の情報(壁、天井、床)の判断  空間内の壁、天井、床にオブジェクトを配置する

Slide 5

Slide 5 text

ぶっちゃけ  同じことはSpatianMapping でも、できます!

Slide 6

Slide 6 text

そもそも  SpatialUnderstindgは単体で用いるものではな く、SpatioalMappingと共に用いる  いわばSpatialUnderstaindingはSpatialMapping ” ” の 拡張パック のようなもの

Slide 7

Slide 7 text

それじぁ何がおいしいの?  SpatialUnderstandingは壁、天井、床以外にも開発者が独自定義 ” ” すれば 椅子 なんかも検知できる  MicrrosoftのサンプルではChair(椅子)、Couch(ソファーのような長椅 子)を定義して検知している

Slide 8

Slide 8 text

まずは定義が必要  定義はSpatialUnderstandingDllShapes.ShapeComponent と SpatialUnderstandingDllShapes.ShapeComponentConstra intを用いて行う

Slide 9

Slide 9 text

椅子の定義はこんな感じ SpatialUnderstandingDllShapes.ShapeComponent shapeComponents = new SpatialUnderstandingDllShapes.ShapeComponent( new List() { SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_SurfaceHeight_Between(0.25f, 0.6f), SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_SurfaceCount_Min(1), SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_SurfaceArea_Min(0.035f), SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_IsRectangle(), SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleLength_Between(0.1f, 0.5f), SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleWidth_Between(0.1f, 0.4f), });

Slide 10

Slide 10 text

定義を書いたらAddして解析開始の処 理を記述 // 定義の追加 SpatialUnderstandingDllShapes.AddShape( "Chair", 1, HoloToolkit.Unity.SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(shapeComponents), shapeComponents.ConstraintCount, HoloToolkit.Unity.SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(shapeComponents.Constraints) // 解析の開始 SpatialUnderstandingDllShapes.ActivateShapeAnalysis();

Slide 11

Slide 11 text

解析したら結果を取得し検知した座標 にオブジェクトを配置 // 解析結果を取得 ShapeResultは配列で512から変更するとresultsShape[i].positionがずれた?謎?? SpatialUnderstandingDllShapes.ShapeResult resultsShape[] = new SpatialUnderstandingDllShapes.ShapeResult[512]; // 検知された椅子の座標にオブジェクト配置 IntPtr resultsShapePtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(resultsShape); if (SpatialUnderstandingDllShapes.QueryShape_FindShapeHalfDims( "Chair", resultsShape.Length, ResultsShapePtr) <= 1) { Instantiate(prefab, resultsShape[0].position, prefab.transform.rotation); }

Slide 12

Slide 12 text

実機で実行した結果 https://www.youtube.com/wat ch?v=fgS0WH- C1zg&feature=youtu.be

Slide 13

Slide 13 text

プロジェクトはGithubにも出しました https://github.com/ZuQ9Nn/C hairDetection

Slide 14

Slide 14 text

プロジェクトはGithubにも出しました https://github.com/ZuQ9Nn/C hairDetection

Slide 15

Slide 15 text

サンプルコードの注意点  Unity 5.6.2f1(64-bit)を使って作成しました。  HoloToolkit-Unity-v1.5.8.0.unitypackageを利用しました。  椅子の定義はMicrosoftのサンプルコードをそのまま利用、うまく表示されない 場合は各自調整してください。  SpatialUnderstandingDllShapes.ShapeResult[512];の部分なぜか、配 列の数字を変更すると配置するポジションがずれる現象がおきた。現在、謎の まま。  キャラクターを椅子に座らせる場合はコライダーに注意

Slide 16

Slide 16 text

もちろん  ” ” 画像解析等を行って 椅子 を判断しているわけではなく、あくまで開発 ” ” 者の定義を 椅子 として扱うだけなので誤検知も多いです。  空間内に定義に合致するモノが存在しなければ検知プログラムはうまく 動作しません。  椅子が白一色、黒一色だと検知しにくい。模様があった方がよい

Slide 17

Slide 17 text

まとめ  SpatialUnderstandingはSpatialMappingの拡張パックのようなも の  開発者が独自定義すると椅子なんかも検知して扱うことができる  より多くの物理現実世界の情報を扱うことができて架空の存在に人間 の動作を再現させる(キャラクターを椅子に座らせる等)ことができる

Slide 18

Slide 18 text

つまり  嫁がコードで進化する!!

Slide 19

Slide 19 text

最後に  ご清聴ありがとうございました