Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kinectによる自然な姿勢推定の実装
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
にー兄さん
November 15, 2019
Programming
0
600
Kinectによる自然な姿勢推定の実装
coins LT #110で発表した資料
にー兄さん
November 15, 2019
Tweet
Share
More Decks by にー兄さん
See All by にー兄さん
プログラマの職能が代替可能になりつつあるこの時代でプログラムと向き合う修行を積む / dedicating myself to the discipline of programming
drumath2237
0
64
個人的3D Gaussian Splattingニュースをご紹介 / sharing 3d gaussian splatting news
drumath2237
0
370
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
480
XRエンジニアの視点から XRのイマと社会実装の実現について考える / thinking-about-xr-popularization
drumath2237
0
65
軽率にプログラミング言語のシンタックスについて考えてみよう / lets-think-about-programming-lang-syntax
drumath2237
0
96
エンジニアが軽率に趣味から始める、OSS貢献を軸とした個人活動 / oss-contribution-as-a-hoby-project
drumath2237
0
69
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
360
フォークギター with VFXの 制作を軽率に振り返ろう! / look back fork guitar with vfx
drumath2237
0
87
軽率に始まった Babylon.js勉強会運営の 1年間をふりかえって / look back babylonjs japan activity
drumath2237
0
120
Other Decks in Programming
See All in Programming
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
410
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
400
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
CSC307 Lecture 14
javiergs
PRO
0
470
Docコメントで始める簡単ガードレール
keisukeikeda
1
120
Claude Codeログ基盤の構築
giginet
PRO
7
3.4k
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
120
CSC307 Lecture 15
javiergs
PRO
0
260
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
280
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
190
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
230
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
210
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
エンジニアに許された特別な時間の終わり
watany
106
240k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
85
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
320
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
640
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
160
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Believing is Seeing
oripsolob
1
86
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
自然な姿勢推定の実現 ~軽率に始めるモーションキャプチャ~ にー兄さん@coins LT #110
アジェンダ 自己紹介 Kinectで暖をとろう 姿勢推定について FKとIK 体格の補正 フィルタによるノイズ除去 ソフトウェア設計 今後の展望
自己紹介 にー兄さん(@ninisan_drumath) coins18 xR領域に興味のあるVTuberオタク && (自称)無許可IKエンジニア(無知) 情報特別演習Ⅱ履修 主にUnityやc++と戯れることが多い。
情特Ⅱの状況 夏休みまで「バーチャルアバターによるARライブ配信システムの構築」という テーマで演習 夏休み中を全部モーキャプの実装に溶かす →これ終わらないのでは? 結果、演習テーマの変更(見直し) モーションキャプチャの実装が主なテーマになる
Kinectで暖をとろう
色々なキャプチャデバイス <以下のデバイスではフルボディトラッキングが可能> 光学式:VICON, OptiTrack, MVN 慣性式:Vive Tracker 磁気式:Perception Nueron Cameraインプット:Kinect,
Intel RealSence, iPhone 11 pro
Kinectで暖をとろう Microsoft謹製の赤外線センサー・NUIデバイス MSからサポートを切られた(最近新しいデバイスが出た) Colorセンサ、Depthカメラ、マイクなどがあり、 モーションキャプチャができる C++やUnityのSDKが公開されている
姿勢推定について
骨格情報の解析
なぜ姿勢推定が必要なの?
なぜ姿勢推定が必要なの? センサリングをする以上、ノイズ・データの欠損・精度の存在を無視することは できない Kinectのような低精度のデバイスではうまく動かない ソフトウェアで補正してやることにより自然な姿勢推定を実現することが必要 もともとはAR配信システムの一部として開発していた
FKとIK
FKとIK ボーン情報の再現手法 は主に二つ FK(順運動学: Forward Kinematics) IK(逆運動学: Inverse Kinematics)
順運動学
順運動学
順運動学
順運動学
逆運動学
逆運動学 ターゲット
逆運動学
逆運動学
逆運動学
FKとIK FK→すべてのボーンの回転情報が必要 →ローカル回転の誤差が蓄積される IK→先端のボーン(IKゴール)さえ決まっていれば 親ボーンの姿勢が推定できる →誤差が軽減できる分、計算量が増える
IKの実装 UnityのAssetStoreに超有名な有料アセットがあるが ・高い ・配布したい Unityの”Mecanim”という機能を使って自前で実装
体格の補正
キャリブレーションとレジストレーション キャリブレーション: 測定器で標準通りの値を得るために、標準器などを用いてその機器の偏りを 計測したり、正しい値になるよう調整したりすること(e-Wordsより引用) レジストレーション: 測定したボーン情報をキャリブレーションした値に基づいてHumanoidに当て はめる操作。
【悲報】体形、合わない そもそも ・ニート男子大学生 ・美少女モデル 体形が合うわけがない (足の長さが足りない)
オレオレ・レジストレーション 上半身と下半身を別々にレジストレーション 手の長さ、足の長さを補完する 胴の長さのパラメータを無視できる
フィルタによる平滑化
センサリングによるノイズ センサリングによるノイズは絶対入る →統計的に処理をしてやる →白色雑音を切るために、低周波帯 を切るようにフィルタリング →ローパスフィルタ
指数平滑化フィルタ:DEMA IIR系のローパスフィルタの 一種 低コストで高精度なフィルタ リングを実現するため、何 件か文献が見つかったの で採用
KinectのJointデータに適用した例
値を補完するために適用したもの ・IK制御 ・キャリブとレジスト ・ローパスフィルタ
ソフトウェアの設計
Unityのアセットライブラリとして提供 《要件》 ・マルチデバイスに対応させたい(Kinectだけじゃ人権なさそう) ・なるべく賢い設計にしたい ・ユーザが容易に拡張できる ・保守性の高いプロダクトにしたい ・テストを書きたい
採用したデザインパターン 全体はUniRxによるMVPパターン データ取得部分はオレオレCompositeパターン 正直オレオレって言っておけば何でも許されると思ってる
頑張って作ったものの 日々流動的に変化している
現時点での設計(ざっくり) ・データの流れが一方向 ・依存先をなるべくInterface化して疎結合化 ・債務の分離 ・各種TrackingDeviceへ拡張可能
マルチデバイス用スクリプトを書く 1. TrackngDevice抽象クラスを継承 2. 頭、胸、腰、両手首、両手足の Poseデータを取得する関数を記述する 以上。
Pose構造体について ・UnityEngineで定義 ・位置/回転のみを持つシンプルなデータ構造 ・xR開発で推奨されるらしい(?) 基本的にTransformを使うよりも軽くて速い
マルチデバイス対応での問題 Kinect.JointType HumanoidBodyBones ボーン構造の違いが ある! →アバターのボーン情報を 取得するAPIを提供すること にした
設計は大事(1,2か月溶かした)
今後の展望
今後の展望 • もっと高度なフィルタの導入 ◦ 統計の知識が足りない ... ◦ モーションデータの数理モデル化 • 他のデバイスでの実験
◦ AzureKinectやViveTrackerの対応 • MotionGANや複数台同期による補完精度の向上 ◦ サーベイした論文で殴られた() • VRMモデルへの対応強化 • 内容の共有 ◦ Qiitaのアドカレや技術書にまとめる
twitter:@ninisan_drumath qiita: @drumath2237 github: @drumath2237 ご清聴ありがとうございました