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

MocapForAllと空き家総研の目指すところ

 MocapForAllと空き家総研の目指すところ

2021/6/11 トラッキング技術勉強会 #tratech

Kenji Asaba

June 11, 2021
Tweet

Other Decks in Technology

Transcript

  1. 目次 • 心: MocapForAll と 空き家総研VRラボ の目的、 あるいは「オープンソース演劇」について • 技:

    システム構成と実装上のポイント • 体: 開発会社と開発者の自己紹介
  2. MocapForAll =万人のためのモーションキャプチャシステム • 特別な装置不要 • 2台以上のウェブカメラとPCがあればOK • 携帯をWi-Fiでつないでウェブカメラ化してもOK • 必要なPCスペックはミドルクラス

    • Surface Pro 7 で 17fps前後 • GTX1080Ti なら 30~100fps • 指の動きと顔の表情も取得可能 • ただし精度は低い & スペック要求高い • キャプチャ結果を公開仕様でLAN上にリアルタイム出力 • ゲームエンジンをはじめとした任意のアプリで利用可能
  3. MocapForAllの全体構成 Windows 10 PC MocapForAll.exe カメラ カメラ … 画像 PC

    Windows 10 PC PC Unreal Engine 4 MocapForAll Plugin for UE4 Actors トラッキング位置 または BoneのTransform (VMTフォーマット) Transforms ※Virtual Motion Tracker Steam VR VR Apps Tracker signal Tracker Unity MocapForAll Plugin for Unity Game Objects Transforms ※ “Virtual Motion Tracker” は gpsnmeajp様 により作成されたものです。 詳細は “https://github.com/gpsnmeajp/VirtualMotionTracker” をご覧ください。 メッセージのフォーマットはMocapForAllのReadme.txtをご覧ください。
  4. MocapForAllの真の目的 = 演劇の大衆化のための「オープンソース演劇」構想 • 演劇をカラオケのような気軽な遊びにできないか? • 演劇は見るよりやる方が楽しい(「ごっこ遊び」) • 演劇をやるのはとても大変(時間、金、人) •

    演劇のパーツをデータ化し、GitHubにアップロードして、一つの演劇を作る構想 • 演劇のパーツ • 演技:MocapForAllや各種VR機器で記録 • 役者:3Dモデル • 大道具:3Dモデル • 小道具:3Dモデル • 音響:音声ファイル • 照明:ライティングの設定 • etc... • これらをゲームエンジン等で実行可能な形式で公開する • UnityのTimelineやUE4のSequencerで実行? • 各種素材の権利をどう守るかに課題(特に販売も視野に入れると)
  5. 「オープンソース演劇」による 新しい形の演劇・体験 • 鑑賞しつつ、登場人物の一人にもなり、それが鑑賞される体験 • 「ロールプレイ」のゲーム • 不特定多数の人と協力して一つの「演劇」を作る体験 • 地方の部員一人の演劇部でも活動できる

    • フォークして「n次創作」してもよし • 不特定多数の人と協力して一つの「役」を作る体験 • 体の動きはAさん、声はBさん、表情はCさん、殺陣のシーンはDさん… • 参加へのハードルを下げる効果 • (人間の仮想化…?) • (仮想化された人格の共有…?) • (他者の中に自己を見ること、自己の中に他者を見ることを、仕組みとして提供する…?) → UE4とUnityで、オープンソース演劇の仕様を考えたい(協力者募集)
  6. システム構成 ・ほぼApache2.0ライセンスとMITライセンスの要素で構築(UE4は除く) ・OpenCVはUE4とメモリ管理で競合しないように改造 ・UE4のエンジン改造はなし UE4 Webcam OpenCV Onnx Runtime Webcam

    GPU CUDA TensorRT CPU DNN models OpenCV 1€ Filter IK Character 画像 射影行列 (Projection matrix) 画像 二次元 位置 三次元 位置 OpenCV (ChArUcoによるカメラ校正) (Affine変換) (DNNによる 推論実行) ・Baseline ・MediaPipe ・MoveNet (三角測量) (速度に比例して カットオフ周波数 が増加するローパ スフィルタ) (リターゲット) ChArUco 画像 VRM4U VRM
  7. システム構成 ・ほぼApache2.0ライセンスとMITライセンスの要素で構築(UE4は除く) ・OpenCVはUE4とメモリ管理で競合しないように改造 ・UE4のエンジン改造はなし UE4 Webcam OpenCV Onnx Runtime Webcam

    GPU CUDA TensorRT CPU DNN models OpenCV 1€ Filter IK Character 画像 射影行列 (Projection matrix) 画像 二次元 位置 三次元 位置 OpenCV (ChArUcoによるカメラ校正) (Affine変換) (DNNによる 推論実行) ・Baseline ・MediaPipe ・MoveNet (三角測量) (速度に比例して カットオフ周波数 が増加するローパ スフィルタ) (リターゲット) 画像 VRM4U VRM ChArUco ここと ここの話をします
  8. カメラ校正って具体的に何? • カメラには、内部パラメータと外部パラメータがあります。(ピンホールカメラモデル) • 内部パラメータ: • カメラのレンズの焦点距離𝑓𝑥 , 𝑓𝑦 と光軸の中心𝑐𝑥

    , 𝑐𝑦 = カメラそれ自体の特性 • 「カメラ画像中の座標」と「カメラ座標系での座標」の関係を記述する行列で表される • 外部パラメータ: • カメラがどこにあって𝑇、どういう向きを向いているか𝑅 = カメラと世界の関係 • 「カメラ座標系での座標」と「世界座標系での座標」の関係を記述する行列で表される → これらの行列を決定し、その積である射影行列Pを求めるのがカメラ校正 • 「カメラ画像中の座標」と「世界座標系での座標」の関係がわかる! 𝑋𝑐𝑎𝑚𝑒𝑟𝑎 𝑌𝑐𝑎𝑚𝑒𝑟𝑎 𝑍𝑐𝑎𝑚𝑒𝑟𝑎 = 𝑟11 𝑟12 𝑟13 𝑡𝑥 𝑟21 𝑟22 𝑟23 𝑡𝑦 𝑟31 𝑟32 𝑟33 𝑡𝑧 𝑋𝑤𝑜𝑟𝑙𝑑 𝑌𝑤𝑜𝑟𝑙𝑑 𝑍𝑤𝑜𝑟𝑙𝑑 1 𝑠 𝑥𝑖𝑚𝑎𝑔𝑒 𝑦𝑖𝑚𝑎𝑔𝑒 1 = 𝑓 𝑥 0 𝑐𝑥 0 𝑓 𝑦 𝑐𝑦 0 0 1 𝑋𝑐𝑎𝑚𝑒𝑟𝑎 𝑌𝑐𝑎𝑚𝑒𝑟𝑎 𝑍𝑐𝑎𝑚𝑒𝑟𝑎 𝑠 𝑥𝑖𝑚𝑎𝑔𝑒 𝑦𝑖𝑚𝑎𝑔𝑒 1 = 𝑓 𝑥 0 𝑐𝑥 0 𝑓𝑦 𝑐𝑦 0 0 1 𝑟11 𝑟12 𝑟13 𝑡𝑥 𝑟21 𝑟22 𝑟23 𝑡𝑦 𝑟31 𝑟32 𝑟33 𝑡𝑧 𝑋𝑤𝑜𝑟𝑙𝑑 𝑌𝑤𝑜𝑟𝑙𝑑 𝑍𝑤𝑜𝑟𝑙𝑑 1 𝑋𝑐𝑎𝑚𝑒𝑟𝑎 𝑌𝑐𝑎𝑚𝑒𝑟𝑎 𝑍𝑐𝑎𝑚𝑒𝑟𝑎 𝑥𝑖𝑚𝑎𝑔𝑒 𝑦𝑖𝑚𝑎𝑔𝑒 𝑋𝑐𝑎𝑚𝑒𝑟𝑎 𝑌𝑐𝑎𝑚𝑒𝑟𝑎 𝑍𝑐𝑎𝑚𝑒𝑟𝑎 𝑋𝑤𝑜𝑟𝑙𝑑 𝑌𝑤𝑜𝑟𝑙𝑑 𝑍𝑤𝑜𝑟𝑙𝑑 𝑃
  9. ChArUcoでカメラ校正、どう実装する? • OpenCVに関数があります! • cv::aruco::detectMarkers • インプット画像からArUcoマーカー座標を見つける • cv::aruco::interpolateCornersCharuco •

    ArUcoマーカー座標からチェスボードの角の座標を見つける • cv::aruco::calibrateCameraCharuco • チェスボードの角の座標から、カメラ内部パラメータ行列を求める。n枚の画像が必要。 • cv::aruco::​ estimatePoseCharucoBoard • チェスボードの角の座標から、カメラ外部パラメータ行列を求める • カメラ内部パラメータ行列とカメラ外部パラメータ行列の積が、求める射影行列(Projection matrix)! 𝑓𝑥 0 𝑐𝑥 0 𝑓𝑦 𝑐𝑦 0 0 1 𝑟11 𝑟12 𝑟13 𝑡𝑥 𝑟21 𝑟22 𝑟23 𝑡𝑦 𝑟31 𝑟32 𝑟33 𝑡𝑧
  10. カメラ校正結果から、 どう三角測量する? • OpenCVに関数があります! • cv::sfm::triangulatePoints • In points2d, •

    In projection_matrices, • Out points3d • でも、信頼度(confidence)も使って評価したいですよね…? →独自実装しましょう!! 参考: Learnable Triangulation of Human Pose https://github.com/karfly/learnable-triangulation-pytorch (いくつかの手法を比較したりも)
  11. システム構成(再掲) ・なんとなく作れそうな気がしてきたのではないでしょうか! UE4 Webcam OpenCV Onnx Runtime Webcam GPU CUDA

    TensorRT CPU DNN models OpenCV 1€ Filter IK Character 画像 射影行列 (Projection matrix) 画像 二次元 位置 三次元 位置 OpenCV (ChArUcoによるカメラ校正) (Affine変換) (DNNによる 推論実行) ・Baseline ・MediaPipe ・MoveNet (三角測量) (速度に比例して カットオフ周波数 が増加するローパ スフィルタ) (リターゲット) ChArUco 画像 VRM4U VRM
  12. Reference • Open CV https://opencv.org/ • ONNX Runtime https://www.onnxruntime.ai/ •

    YOLOv4 https://github.com/AlexeyAB/darknet • Pytorch-YOLOv4 https://github.com/Tianxiaomo/pytorch-YOLOv4 • Learnable Triangulation of Human Pose https://github.com/karfly/learnable-triangulation-pytorch • MediaPipe https://mediapipe.dev/ • MediaPipe in PyTorch https://github.com/zmurez/MediaPipePyTorch • facemesh.pytorch https://github.com/thepowerfuldeez/facemesh.pytorch • irislandmarks.pytorch https://github.com/cedriclmenard/irislandmarks.pytorch • MoveNet https://tfhub.dev/google/movenet/singlepose/thunder/3 https://tfhub.dev/google/movenet/singlepose/lightning/3 • PINTO_model_zoo https://github.com/PINTO0309/PINTO_model_zoo • One Euro Filter plugin for Unreal https://github.com/DarioMazzanti/OneEuroFilterUnreal • Open Asset Import Library (assimp) https://github.com/assimp/assimp • VRM loader for UnrealEngine4 (VRM4U) https://github.com/ruyo/VRM4U • Virtual Motion Tracker https://github.com/gpsnmeajp/VirtualMotionTracker • アプリ明朝 https://flopdesign.booth.pm/items/1028558 • MocapForAll uses Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc. in the United States of America and elsewhere. Unreal® Engine, Copyright 1998 – 2021, Epic Games, Inc. All rights reserved.