Spaces:
Runtime error
Runtime error
| """ | |
| Lightweight model setup utility for dwpose-editor. | |
| Provides a CLI to pre-download required ONNX models into the local cache | |
| directory used by the app (./models), without initializing ONNX sessions. | |
| """ | |
| from typing import List | |
| import os | |
| import sys | |
| try: | |
| from huggingface_hub import hf_hub_download | |
| except Exception as e: # pragma: no cover | |
| hf_hub_download = None | |
| DEFAULT_REPO_ID = "yzd-v/DWPose" | |
| DEFAULT_CACHE_DIR = "./models" | |
| REQUIRED_FILES: List[str] = [ | |
| "yolox_l.onnx", | |
| "dw-ll_ucoco_384.onnx", | |
| ] | |
| def ensure_dir(path: str) -> None: | |
| os.makedirs(path, exist_ok=True) | |
| def download_models(repo_id: str = DEFAULT_REPO_ID, cache_dir: str = DEFAULT_CACHE_DIR) -> int: | |
| """Download required model files into cache_dir. Returns 0 on success, non-zero on failure.""" | |
| if hf_hub_download is None: | |
| print("[ERROR] huggingface-hub is not installed. Run: pip install huggingface-hub") | |
| return 2 | |
| ensure_dir(cache_dir) | |
| ok = True | |
| for filename in REQUIRED_FILES: | |
| try: | |
| print(f"[SETUP] Downloading {filename} from {repo_id} → {cache_dir} ...") | |
| local_path = hf_hub_download(repo_id=repo_id, filename=filename, cache_dir=cache_dir) | |
| print(f"[SETUP] OK: {local_path}") | |
| except Exception as e: | |
| ok = False | |
| print(f"[SETUP] ERROR: failed to download {filename}: {e}") | |
| return 0 if ok else 1 | |
| def main(argv: List[str] | None = None) -> int: | |
| """CLI entry point: python -m utils.model_setup [--repo REPO] [--cache-dir DIR]""" | |
| import argparse | |
| parser = argparse.ArgumentParser(description="Pre-download DWPose models into ./models") | |
| parser.add_argument("--repo", default=DEFAULT_REPO_ID, help="Hugging Face repo id") | |
| parser.add_argument("--cache-dir", default=DEFAULT_CACHE_DIR, help="Local cache directory") | |
| args = parser.parse_args(argv) | |
| return download_models(repo_id=args.repo, cache_dir=args.cache_dir) | |
| if __name__ == "__main__": # pragma: no cover | |
| sys.exit(main()) | |