【MMD】モーションデータ自動化(05/25)

プログラム
この記事は約3分で読めます。
スポンサーリンク

とりあえず、VMD-Liftingを読み解いてみます。

実行方法

まず、ドキュメントを見ると「vmdlifting.py」を実行して画像データ/動画データからモーションデータを作成するようです。
ということは、最初に見るべきは「vmdlifting.py」となります。

usage: vmdlifting.py [-h] [--center] IMAGE_FILE VMD_FILE

「vmdlifting.py」を読み解く

まずはmainの処理から見ていきます。コマンド引数を処理してvmdlifting関数を呼び出しています。
引数としては、解析対象の画像/動画フィルと出力するVMDファイル名を指定していますね。

if name == 'main':
 parser = argparse.ArgumentParser(description='estimate 3D pose and generate VMD motion')
 parser.add_argument('--center', action='store_true', help='move center bone (experimental)')
 parser.add_argument('IMAGE_FILE')
 parser.add_argument('VMD_FILE')
 arg = parser.parse_args()
 vmdlifting(arg.IMAGE_FILE, arg.VMD_FILE, arg.center)

vmdlifting関数の処理

まず、動画/画像ファイルを読み込んでいます。
readメソッドでは1フレーム単位で読み込んでいくようです。

cap = cv2.VideoCapture(image_file_path)
while (cap.isOpened()):
  ret, image = cap.read()

次に、読み込んだデータをRGBに変換しています。
BGRは「Blue」「Green」「Red」の色の3要素ですがこの並びをかえていると思われます。

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

その後、「PoseEstimator」の初期化処理を実施しフレーム単位で画像解析をしています。
詳細はpose_estimatorの使い方を参照する必要がありますね。
画像(動画)データから3次元での関節位置情報を解析している感じですね。

その後、「refine_position」を呼び出していますが、ここはフィルタ処理を行っているのか???
処理内容は後で見てみるとしましょう。

次に「pos2vmd.py」の「positions_to_frames」を呼び出しています。
ここではボーンのひねりとかを計算して自然な人間の動きにしているようです。

最後にモーションデータのフォーマットで出力して処理完了となってます。

コメント

タイトルとURLをコピーしました