import subprocess import sys import os import argparse import time from datetime import datetime import signal def signal_handler(sig, frame): print("\nInterrupted by user, shutting down...") if 'pool' in locals() and pool is not None: pool.terminate() pool.join() sys.exit(0) signal.signal(signal.SIGINT, signal_handler) def parse_arguments(): parser = argparse.ArgumentParser(description="Run the complete video-to-BVH pipeline") # parser.add_argument('-v', '--video', required=True, help="Path to the input video file") return parser.parse_args() def run_command(command, description): """Run a command and show its output.""" try: start_time = time.time() script_dir = os.path.dirname(command[1]) current_dir = os.getcwd() os.chdir(script_dir) subprocess.run(command, check=True) os.chdir(current_dir) end_time = time.time() execution_time = end_time - start_time return True except subprocess.CalledProcessError as e: os.chdir(current_dir) return False except Exception as e: if 'current_dir' in locals(): os.chdir(current_dir) return False def main(): args = parse_arguments() base_dir = os.path.dirname(os.path.abspath(__file__)) gen_skes_path = os.path.join(base_dir, "VideoToNPZ", "gen_skes.py") convert_obj_path = os.path.join(base_dir, "convertNPZtoBVH", "conver_obj.py") convert_bvh_path = os.path.join(base_dir, "convertNPZtoBVH", "conver_bvh.py") for script_path in [gen_skes_path, convert_obj_path, convert_bvh_path]: if not os.path.exists(script_path): return 1 pipeline_steps = [ { "command": [sys.executable, gen_skes_path], }, { "command": [sys.executable, convert_obj_path], }, { "command": [sys.executable, convert_bvh_path], } ] successful = 0 failed = 0 for step in pipeline_steps: if run_command(step["command"], ""): successful += 1 else: failed += 1 return 0 if failed == 0 else 1 if __name__ == "__main__": sys.exit(main())