$30 off During Our Annual Pro Sale. View Details »

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

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

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

Kenji Asaba

June 11, 2021
Tweet

Other Decks in Technology

Transcript

  1. MocapForAllと空き家総合研究所
    の目指すところ
    2021/6/11
    トラッキング技術勉強会
    空き家総研VRラボ 麻場 健司

    View Slide

  2. 目次
    • 心: MocapForAll と 空き家総研VRラボ の目的、
    あるいは「オープンソース演劇」について
    • 技: システム構成と実装上のポイント
    • 体: 開発会社と開発者の自己紹介

    View Slide

  3. みなさん
    「モーションキャプチャシステムさえ
    お家にあればなあ…… 」
    と思ったこと、ありませんか?
    • 映像製作
    • ゲーム製作
    • VTuber活動
    etc.
    才能はあるのに、
    お金だけがない…

    View Slide

  4. MocapForAll
    =万人のためのモーションキャプチャシステム
    • 特別な装置不要
    • 2台以上のウェブカメラとPCがあればOK
    • 携帯をWi-Fiでつないでウェブカメラ化してもOK
    • 必要なPCスペックはミドルクラス
    • Surface Pro 7 で 17fps前後
    • GTX1080Ti なら 30~100fps
    • 指の動きと顔の表情も取得可能
    • ただし精度は低い & スペック要求高い
    • キャプチャ結果を公開仕様でLAN上にリアルタイム出力
    • ゲームエンジンをはじめとした任意のアプリで利用可能

    View Slide

  5. 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をご覧ください。

    View Slide

  6. MocapForAllの用途
    =モーションキャプチャがお手頃価格になることでできること
    • ゲーム製作・映像製作に使うキャラクターモーション作成
    →特にインディーゲーム開発者や小規模スタジオ向け
    (かつてインディーズアニメーションを作っていた旧友に使ってほしい…)
    • SteamVRでフルボディトラッキング
    →フルトラが当たり前の世界へ
    (Virtual Motion Tracker経由。HMDは別途必要。HMDに比べて遅延があることに注意)
    • 予算が限られている教育目的や社内利用にも
    →インタラクティブアート、アバターを使ったVRミーティング、スポーツ、etc.

    View Slide

  7. MocapForAllの真の目的
    = 演劇の大衆化のための「オープンソース演劇」構想
    • 演劇をカラオケのような気軽な遊びにできないか?
    • 演劇は見るよりやる方が楽しい(「ごっこ遊び」)
    • 演劇をやるのはとても大変(時間、金、人)
    • 演劇のパーツをデータ化し、GitHubにアップロードして、一つの演劇を作る構想
    • 演劇のパーツ
    • 演技:MocapForAllや各種VR機器で記録
    • 役者:3Dモデル
    • 大道具:3Dモデル
    • 小道具:3Dモデル
    • 音響:音声ファイル
    • 照明:ライティングの設定
    • etc...
    • これらをゲームエンジン等で実行可能な形式で公開する
    • UnityのTimelineやUE4のSequencerで実行?
    • 各種素材の権利をどう守るかに課題(特に販売も視野に入れると)

    View Slide

  8. 「オープンソース演劇」による 新しい形の演劇・体験
    • 鑑賞しつつ、登場人物の一人にもなり、それが鑑賞される体験
    • 「ロールプレイ」のゲーム
    • 不特定多数の人と協力して一つの「演劇」を作る体験
    • 地方の部員一人の演劇部でも活動できる
    • フォークして「n次創作」してもよし
    • 不特定多数の人と協力して一つの「役」を作る体験
    • 体の動きはAさん、声はBさん、表情はCさん、殺陣のシーンはDさん…
    • 参加へのハードルを下げる効果
    • (人間の仮想化…?)
    • (仮想化された人格の共有…?)
    • (他者の中に自己を見ること、自己の中に他者を見ることを、仕組みとして提供する…?)
    → UE4とUnityで、オープンソース演劇の仕様を考えたい(協力者募集)

    View Slide

  9. ここからは技術の話です

    View Slide

  10. システム構成
    ・ほぼ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

    View Slide

  11. システム構成
    ・ほぼ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
    ここと
    ここの話をします

    View Slide

  12. ChArUcoとは?(弊社通称:魔法陣)
    カメラ校正には「位置が既知の座標がカメラ画像上でどこにあるか」を知る必要がある。そこで使われるのがこれ。
    • チェスボード: 角の位置(x,yが既知でz=0の点)をカメラ画像中で精密に決定するのに便利
    • ArUco: カメラ画像中からパターンを探し出すのに便利
    → 合体させればいい!
    https://docs.opencv.org/master/d9/d6d/tutorial_table_of_content_aruco.html

    View Slide

  13. カメラ校正って具体的に何?
    • カメラには、内部パラメータと外部パラメータがあります。(ピンホールカメラモデル)
    • 内部パラメータ:
    • カメラのレンズの焦点距離𝑓𝑥
    , 𝑓𝑦
    と光軸の中心𝑐𝑥
    , 𝑐𝑦
    = カメラそれ自体の特性
    • 「カメラ画像中の座標」と「カメラ座標系での座標」の関係を記述する行列で表される
    • 外部パラメータ:
    • カメラがどこにあって𝑇、どういう向きを向いているか𝑅 = カメラと世界の関係
    • 「カメラ座標系での座標」と「世界座標系での座標」の関係を記述する行列で表される
    → これらの行列を決定し、その積である射影行列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
    𝑋𝑐𝑎𝑚𝑒𝑟𝑎
    𝑌𝑐𝑎𝑚𝑒𝑟𝑎
    𝑍𝑐𝑎𝑚𝑒𝑟𝑎
    𝑥𝑖𝑚𝑎𝑔𝑒
    𝑦𝑖𝑚𝑎𝑔𝑒
    𝑋𝑐𝑎𝑚𝑒𝑟𝑎
    𝑌𝑐𝑎𝑚𝑒𝑟𝑎
    𝑍𝑐𝑎𝑚𝑒𝑟𝑎
    𝑋𝑤𝑜𝑟𝑙𝑑
    𝑌𝑤𝑜𝑟𝑙𝑑
    𝑍𝑤𝑜𝑟𝑙𝑑
    𝑃

    View Slide

  14. 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
    𝑡𝑧

    View Slide

  15. カメラ校正結果から、
    どう三角測量する?
    • OpenCVに関数があります!
    • cv::sfm::triangulatePoints
    • In points2d,
    • In projection_matrices,
    • Out points3d
    • でも、信頼度(confidence)も使って評価したいですよね…?
    →独自実装しましょう!!
    参考: Learnable Triangulation of Human Pose
    https://github.com/karfly/learnable-triangulation-pytorch
    (いくつかの手法を比較したりも)

    View Slide

  16. システム構成(再掲)
    ・なんとなく作れそうな気がしてきたのではないでしょうか!
    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

    View Slide

  17. 最後に、
    私たちの簡単な自己紹介

    View Slide

  18. 「株式会社空き家総合研究所」??
    • 不動産屋です。
    • 空き家を
    「買って、直して、貸して、売って」
    います。
    • 社員6人の小さな会社です。

    View Slide

  19. なんで不動産屋がVRアプリやってるの?
    • 学生時代の演劇部の仲間で作った会社
    →演劇をやりたい。それ以上に、演劇をやりたい人を応援したい。
    • 演劇をデータ化することで、再利用性と収益性を高める
    →そのために、まずは演技のデータ化 = モーションキャプチャ
    …という趣味で作ってたアプリでしたが、会社としてまとまった
    お金が必要になったので販売することに
    →MocapForAllの収益のうち3000万円は、ひとり親世帯支援住宅の整備に充てられ
    る予定です。

    View Slide

  20. 開発担当者: 麻場 健司
    • 前職はいわゆるシステムインテグレータ。Javaメインでした。
    • C++、UE4、Python、AI を実製作で使ったのは今回が初めて。
    →様々な方のブログ記事、動画等を参考にさせていただきました。
    先人の皆さま、ありがとうございます (_ _)

    View Slide

  21. 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.

    View Slide

  22. ご清聴ありがとうございました!

    View Slide