| |
| |
| """ |
| Validate get_motion_information only (no LHM++ model required). |
| |
| Usage: |
| # motion_path: path to smplx_params directory (e.g. motion_video/Dance_I/smplx_params) |
| python scripts/test/test_get_motion_information.py --motion_path ./motion_video/Dance_I/smplx_params |
| |
| # or derive from motion video path (same logic as app.py prepare_input_and_output) |
| python scripts/test/test_get_motion_information.py --motion_video ./motion_video/Dance_I/Dance_I.mp4 |
| |
| Note: Remove pdb.set_trace() in get_motion_information (app_utils) and prepare_motion_seqs_eval (infer/utils) |
| for uninterrupted run if present. |
| """ |
|
|
| import argparse |
| import os |
| import sys |
|
|
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) |
|
|
| from omegaconf import OmegaConf |
|
|
| from core.utils.app_utils import get_motion_information |
| from scripts.download_motion_video import motion_video_check |
|
|
|
|
| def _resolve_motion_path(motion_path: str = None, motion_video: str = None) -> str: |
| """Resolve motion_path (smplx_params dir) from args.""" |
| if motion_path: |
| return os.path.abspath(motion_path) |
| if motion_video and os.path.isfile(motion_video): |
| base_vid = os.path.basename(motion_video).split(".")[0] |
| motion_dir = os.path.dirname(motion_video) |
| return os.path.join(motion_dir, "smplx_params") |
| raise ValueError( |
| "Provide --motion_path (path to smplx_params dir) or --motion_video (path to motion .mp4)." |
| ) |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser( |
| description="Validate get_motion_information only (no LHM model)" |
| ) |
| parser.add_argument( |
| "--motion_path", |
| type=str, |
| default=None, |
| help="Path to smplx_params directory", |
| ) |
| parser.add_argument( |
| "--motion_video", |
| type=str, |
| default=None, |
| help="Path to motion video (derive motion_path from parent/smplx_params)", |
| ) |
| parser.add_argument( |
| "--motion_size", |
| type=int, |
| default=120, |
| help="Number of motion frames", |
| ) |
| parser.add_argument( |
| "--render_size", |
| type=int, |
| default=420, |
| help="Render size (default 420)", |
| ) |
| args = parser.parse_args() |
|
|
| motion_video_check(save_dir=".") |
|
|
| motion_path = _resolve_motion_path(args.motion_path, args.motion_video) |
| if not os.path.isdir(motion_path): |
| raise FileNotFoundError(f"smplx_params dir not found: {motion_path}") |
|
|
| cfg = OmegaConf.create({ |
| "render_size": args.render_size, |
| "motion_img_need_mask": False, |
| "vis_motion": False, |
| }) |
|
|
| print(f"[1/2] Calling get_motion_information(motion_path={motion_path}, motion_size={args.motion_size})") |
| motion_name, motion_seqs = get_motion_information( |
| motion_path, cfg, motion_size=args.motion_size |
| ) |
| video_size = len(motion_seqs["motion_seqs"]) |
|
|
| print(f"[2/2] OK. motion_name={motion_name}, frames={video_size}") |
| print(f" Keys: {list(motion_seqs.keys())}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|