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

Kinectによる自然な姿勢推定の実装

 Kinectによる自然な姿勢推定の実装

coins LT #110で発表した資料

にー兄さん

November 15, 2019
Tweet

More Decks by にー兄さん

Other Decks in Programming

Transcript

  1. 自然な姿勢推定の実現
    ~軽率に始めるモーションキャプチャ~
    にー兄さん@coins LT #110

    View full-size slide

  2. アジェンダ
    自己紹介
    Kinectで暖をとろう
    姿勢推定について
    FKとIK
    体格の補正
    フィルタによるノイズ除去
    ソフトウェア設計
    今後の展望

    View full-size slide

  3. 自己紹介
    にー兄さん(@ninisan_drumath)
    coins18
    xR領域に興味のあるVTuberオタク && (自称)無許可IKエンジニア(無知)
    情報特別演習Ⅱ履修
    主にUnityやc++と戯れることが多い。

    View full-size slide

  4. 情特Ⅱの状況
    夏休みまで「バーチャルアバターによるARライブ配信システムの構築」という
    テーマで演習
    夏休み中を全部モーキャプの実装に溶かす
    →これ終わらないのでは?
    結果、演習テーマの変更(見直し)
    モーションキャプチャの実装が主なテーマになる

    View full-size slide

  5. Kinectで暖をとろう

    View full-size slide

  6. 色々なキャプチャデバイス
    <以下のデバイスではフルボディトラッキングが可能>
    光学式:VICON, OptiTrack, MVN
    慣性式:Vive Tracker
    磁気式:Perception Nueron
    Cameraインプット:Kinect, Intel RealSence, iPhone 11 pro

    View full-size slide

  7. Kinectで暖をとろう
    Microsoft謹製の赤外線センサー・NUIデバイス
    MSからサポートを切られた(最近新しいデバイスが出た)
    Colorセンサ、Depthカメラ、マイクなどがあり、
    モーションキャプチャができる
    C++やUnityのSDKが公開されている

    View full-size slide

  8. 姿勢推定について

    View full-size slide

  9. 骨格情報の解析

    View full-size slide

  10. なぜ姿勢推定が必要なの?

    View full-size slide

  11. なぜ姿勢推定が必要なの?
    センサリングをする以上、ノイズ・データの欠損・精度の存在を無視することは
    できない
    Kinectのような低精度のデバイスではうまく動かない
    ソフトウェアで補正してやることにより自然な姿勢推定を実現することが必要
    もともとはAR配信システムの一部として開発していた

    View full-size slide

  12. FKとIK
    ボーン情報の再現手法 は主に二つ
    FK(順運動学: Forward Kinematics)
    IK(逆運動学: Inverse Kinematics)

    View full-size slide

  13. 順運動学

    View full-size slide

  14. 順運動学

    View full-size slide

  15. 順運動学

    View full-size slide

  16. 順運動学

    View full-size slide

  17. 逆運動学

    View full-size slide

  18. 逆運動学
    ターゲット

    View full-size slide

  19. 逆運動学

    View full-size slide

  20. 逆運動学

    View full-size slide

  21. 逆運動学

    View full-size slide

  22. FKとIK
    FK→すべてのボーンの回転情報が必要
    →ローカル回転の誤差が蓄積される
    IK→先端のボーン(IKゴール)さえ決まっていれば
    親ボーンの姿勢が推定できる
    →誤差が軽減できる分、計算量が増える

    View full-size slide

  23. IKの実装
    UnityのAssetStoreに超有名な有料アセットがあるが
    ・高い
    ・配布したい
    Unityの”Mecanim”という機能を使って自前で実装

    View full-size slide

  24. 体格の補正

    View full-size slide

  25. キャリブレーションとレジストレーション
    キャリブレーション:
    測定器で標準通りの値を得るために、標準器などを用いてその機器の偏りを
    計測したり、正しい値になるよう調整したりすること(e-Wordsより引用)
    レジストレーション:
    測定したボーン情報をキャリブレーションした値に基づいてHumanoidに当て
    はめる操作。

    View full-size slide

  26. 【悲報】体形、合わない
    そもそも
    ・ニート男子大学生
    ・美少女モデル
    体形が合うわけがない
    (足の長さが足りない)

    View full-size slide

  27. オレオレ・レジストレーション
    上半身と下半身を別々にレジストレーション
    手の長さ、足の長さを補完する
    胴の長さのパラメータを無視できる

    View full-size slide

  28. フィルタによる平滑化

    View full-size slide

  29. センサリングによるノイズ
    センサリングによるノイズは絶対入る
    →統計的に処理をしてやる
    →白色雑音を切るために、低周波帯
    を切るようにフィルタリング
    →ローパスフィルタ

    View full-size slide

  30. 指数平滑化フィルタ:DEMA
    IIR系のローパスフィルタの
    一種
    低コストで高精度なフィルタ
    リングを実現するため、何
    件か文献が見つかったの
    で採用

    View full-size slide

  31. KinectのJointデータに適用した例

    View full-size slide

  32. 値を補完するために適用したもの
    ・IK制御
    ・キャリブとレジスト
    ・ローパスフィルタ

    View full-size slide

  33. ソフトウェアの設計

    View full-size slide

  34. Unityのアセットライブラリとして提供
    《要件》
    ・マルチデバイスに対応させたい(Kinectだけじゃ人権なさそう)
    ・なるべく賢い設計にしたい
    ・ユーザが容易に拡張できる
    ・保守性の高いプロダクトにしたい
    ・テストを書きたい

    View full-size slide

  35. 採用したデザインパターン
    全体はUniRxによるMVPパターン
    データ取得部分はオレオレCompositeパターン
    正直オレオレって言っておけば何でも許されると思ってる

    View full-size slide

  36. 頑張って作ったものの
    日々流動的に変化している

    View full-size slide

  37. 現時点での設計(ざっくり)
    ・データの流れが一方向
    ・依存先をなるべくInterface化して疎結合化
    ・債務の分離
    ・各種TrackingDeviceへ拡張可能

    View full-size slide

  38. マルチデバイス用スクリプトを書く
    1. TrackngDevice抽象クラスを継承
    2. 頭、胸、腰、両手首、両手足の
    Poseデータを取得する関数を記述する
    以上。

    View full-size slide

  39. Pose構造体について
    ・UnityEngineで定義
    ・位置/回転のみを持つシンプルなデータ構造
    ・xR開発で推奨されるらしい(?)
    基本的にTransformを使うよりも軽くて速い

    View full-size slide

  40. マルチデバイス対応での問題
    Kinect.JointType HumanoidBodyBones
    ボーン構造の違いが
    ある!
    →アバターのボーン情報を
    取得するAPIを提供すること
    にした

    View full-size slide

  41. 設計は大事(1,2か月溶かした)

    View full-size slide

  42. 今後の展望

    View full-size slide

  43. 今後の展望
    ● もっと高度なフィルタの導入
    ○ 統計の知識が足りない ...
    ○ モーションデータの数理モデル化
    ● 他のデバイスでの実験
    ○ AzureKinectやViveTrackerの対応
    ● MotionGANや複数台同期による補完精度の向上
    ○ サーベイした論文で殴られた()
    ● VRMモデルへの対応強化
    ● 内容の共有
    ○ Qiitaのアドカレや技術書にまとめる

    View full-size slide

  44. twitter:@ninisan_drumath
    qiita: @drumath2237
    github: @drumath2237
    ご清聴ありがとうございました

    View full-size slide