import textwrap import subprocess import shutil import os from pathlib import Path import torch import gradio as gr from huggingface_hub import hf_hub_download REPO_ID = "kbrodt/sketch2pose" API_TOKEN = os.environ["sketch2pose"] ASSET_DIR = Path("./assets") filename = "models_smplx_v1_1.zip" smpl_path = hf_hub_download( repo_id=REPO_ID, repo_type="model", filename=filename, use_auth_token=API_TOKEN, cache_dir=ASSET_DIR, ) if not (ASSET_DIR / filename).is_file(): shutil.copy(smpl_path, ASSET_DIR) subprocess.run("bash ./scripts/download.sh".split()) subprocess.run("bash ./scripts/prepare.sh".split()) SAVE_DIR = "output" CMD = textwrap.dedent(""" python src/pose.py --save-path {} --img-path {} """) def main(): save_dir = Path(SAVE_DIR) save_dir.mkdir(parents=True, exist_ok=True) def pose(img_path, bone_lengths=True, foreshortening=True, self_contacts=False, naturalness=True): if bone_lengths == False: foreshortening = False cmd = CMD.format(save_dir, img_path) if bone_lengths: cmd = cmd + " --use-cos" if foreshortening: cmd = cmd + " --use-angle-transf" if self_contacts: cmd = cmd + " --use-contacts" if naturalness: cmd = cmd + " --use-natural" out_dir = (save_dir / Path(img_path).name).with_suffix("") mesh_path = out_dir / "us.glb" if not mesh_path.is_file(): subprocess.call(cmd.split()) return str(mesh_path) examples = [] for img_path in Path("./data/images").glob("*"): examples.append([str(img_path), True, True, False, True]) break demo = gr.Interface( fn=pose, inputs=[ gr.Image(type="filepath"), gr.Checkbox(value=True), gr.Checkbox(value=True), gr.Checkbox(value=False, interactive=torch.cuda.is_available()), gr.Checkbox(value=True), ], outputs=gr.Model3D(), examples=examples, ) demo.launch() if __name__ == "__main__": main()