Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tokyo HoloLens meets up vol.5 LT

ZuQ9Nn
September 17, 2017

Tokyo HoloLens meets up vol.5 LT

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

ZuQ9Nn

September 17, 2017
Tweet

More Decks by ZuQ9Nn

Other Decks in Technology

Transcript

  1. Tokyo HoloLens meets up vol.5 SpatialUnderstanding ” ” で 椅子

    の 検知にチャレンジしてみたよ
  2. 自己紹介  ZuQ9Nn(ずきゅーん)  普段の業務はObjective-CでiOSアプリ開発  Swift は書いてません orz.. 

    HoloLensとUnityは趣味レベル  なんちゃってホロデベロッパー
  3. ブログにも記事をちょこっと書いるよ  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)
  4. SpatialUndstandingの機能  空間検知  空間内の情報(壁、天井、床)の判断  空間内の壁、天井、床にオブジェクトを配置する

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

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

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

    子)を定義して検知している
  8. まずは定義が必要  定義はSpatialUnderstandingDllShapes.ShapeComponent と SpatialUnderstandingDllShapes.ShapeComponentConstra intを用いて行う

  9. 椅子の定義はこんな感じ SpatialUnderstandingDllShapes.ShapeComponent shapeComponents = new SpatialUnderstandingDllShapes.ShapeComponent( new List<SpatialUnderstandingDllShapes.ShapeComponentConstraint>() { 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), });
  10. 定義を書いたらAddして解析開始の処 理を記述 // 定義の追加 SpatialUnderstandingDllShapes.AddShape( "Chair", 1, HoloToolkit.Unity.SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(shapeComponents), shapeComponents.ConstraintCount, HoloToolkit.Unity.SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(shapeComponents.Constraints)

    // 解析の開始 SpatialUnderstandingDllShapes.ActivateShapeAnalysis();
  11. 解析したら結果を取得し検知した座標 にオブジェクトを配置 // 解析結果を取得 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); }
  12. 実機で実行した結果 https://www.youtube.com/wat ch?v=fgS0WH- C1zg&feature=youtu.be

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

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

  15. サンプルコードの注意点  Unity 5.6.2f1(64-bit)を使って作成しました。  HoloToolkit-Unity-v1.5.8.0.unitypackageを利用しました。  椅子の定義はMicrosoftのサンプルコードをそのまま利用、うまく表示されない 場合は各自調整してください。 

    SpatialUnderstandingDllShapes.ShapeResult[512];の部分なぜか、配 列の数字を変更すると配置するポジションがずれる現象がおきた。現在、謎の まま。  キャラクターを椅子に座らせる場合はコライダーに注意
  16. もちろん  ” ” 画像解析等を行って 椅子 を判断しているわけではなく、あくまで開発 ” ” 者の定義を

    椅子 として扱うだけなので誤検知も多いです。  空間内に定義に合致するモノが存在しなければ検知プログラムはうまく 動作しません。  椅子が白一色、黒一色だと検知しにくい。模様があった方がよい
  17. まとめ  SpatialUnderstandingはSpatialMappingの拡張パックのようなも の  開発者が独自定義すると椅子なんかも検知して扱うことができる  より多くの物理現実世界の情報を扱うことができて架空の存在に人間 の動作を再現させる(キャラクターを椅子に座らせる等)ことができる

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

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