Python
MMD
OpenPose
3d-pose-baseline

MMDモーショントレース自動化への挑戦【序章】

MMDモーショントレースとは

MMDモーショントレースとは、動画(映像)から、人物または物体の動作(モーション)をMikumikuDance用にMMDデータ化することである。

MMDモーショントレースとは - ニコニコ大百科

基本的には、動画から人物等の動きを目視で真似て、フレーム登録をしていきます。
Kinectによるモーショントレースも可能ですが、こちらは道具が色々と必要になります。
目視トレースは、ひたすら地道にやるしかありません。(色々TIPSはありますが)
特に体幹のトレースは地味に難しいです。
その辺をもう少し楽にできないかなー、というのが今回の発端です。

プロモーション動画

MMDモーショントレース自動化への挑戦

自動化手順

  1. 素材となる動画を30fpsで用意する
  2. OpenPose で二次元の人物骨格データを取得する
  3. 3d-pose-baseline-vmd で二次元から三次元の人物関節データに変換し、関節データファイルを生成する
  4. VMD-3d-pose-baseline-multi で関節データファイルを読み込み、vmd(MMDモーションデータ)ファイルを生成する
  5. 生成したvmdファイルをMMDでモデルに読み込む

使用技術概要

OpenPose

OpenPose represents the first real-time multi-person system to jointly detect human body, hand, and facial keypoints (in total 130 keypoints) on single images.

画像から人体の骨格を検出するアルゴリズム。複数人数の検知や動画からの検知も可能。

3d-pose-baseline

We provide a strong baseline for 3d human pose estimation that also sheds light on the challenges of current approaches. Our model is lightweight and we strive to make our code transparent, compact, and easy-to-understand.

2Dの人体モデルから3Dの人体モデルを生成するアルゴリズム

ArashHosseini/3d-pose-baseline

3d-pose-baseline から fork されたプログラム。
OpenPose で検出された人体の骨格構造から、3Dの人体モデルを生成する。

miu200521358/3d-pose-baseline-vmd

ArashHosseini/3d-pose-baseline から私がforkし、改造したプログラム。

改造点

  • 学習データのパスがWindowsだと260文字制限に引っかかるので、パス簡略化
  • 3Dの人体モデルを生成する際に、関節データを出力する
  • 複数人数のOpenPoseデータを解析できるよう改造
    • 正確には、解析対象人物Indexを指定できるように改造

VMD-Lifting

VMD-Lifting がやっていること - Qiita

写真から人のポーズを推定し、VMDフォーマットのモーション(ポーズ)データを出力するプログラムです。 ポーズ推定には Lifting from the Deep (https://github.com/DenisTome/Lifting-from-the-Deep-release) のプログラムを使用しています。

このプログラムが公開されていなければ、自動化はできませんでした。多謝。

miu200521358/VMD-3d-pose-baseline-multi

VMD-Lifting から私がforkし、改造したプログラム。

改造点

  • 3d-pose-baseline-vmd の出力パスを引数にできるよう変更
  • 複数フレームの出力に対応

導入手順

【目次】MMDモーショントレース自動化への挑戦 から各ページをご参照ください。

今後の予定

  • センターを移動させたい
    • 左足と右足の角度から求められそうな…
  • 前傾姿勢になるのを直したい
    • Lifting と計算式が違うためか、全体的にX軸方向に20度ほど前傾姿勢になってしまうのを直したい
  • 足首を接地させたい
    • 理論的には、地面と膝以下のベクトルの交差で求められる気がする…
  • フレームの間引き
    • 一定距離範囲内の移動であれば、そのフレームを登録しないで間引きしたい
  • 首の回転
    • 現在、頭のみの回転になっているが、これを首と頭に分散させたい(トレーサーとしての好みです)
  • 足をIK化
    • その方が汎用的だしモーション修正もやりやすいと思うんだけど、計算式がさっぱり
  • 指のモーショントレース自動化
    • 3d-pose-baseline の指版が出来ないと無理かなぁ…

共同開発者募集中!

Twitter(@miu200521358)よりお気軽にご連絡ください。