Spaces:
Running
Running
File size: 3,594 Bytes
f43c9b7 aff3e71 f43c9b7 aff3e71 f43c9b7 aff3e71 f43c9b7 aff3e71 f43c9b7 c01aad0 f43c9b7 c01aad0 f43c9b7 c01aad0 f43c9b7 c01aad0 f43c9b7 c01aad0 f43c9b7 be3490d f43c9b7 483d460 f43c9b7 c01aad0 2e55dd7 f43c9b7 c01aad0 f43c9b7 c01aad0 aff3e71 f43c9b7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
import os
import shutil
import subprocess
import textwrap
from pathlib import Path
import gradio as gr
import torch
from huggingface_hub import hf_hub_download
REPO_ID = "kbrodt/sketch2pose"
API_TOKEN = os.environ["sketch2pose"]
ASSET_DIR = Path("./assets")
SAVE_DIR = "output"
CMD = textwrap.dedent("""
python src/pose.py
--save-path {}
--img-path {}
""")
TITLE = "Sketch2Pose: Estimating a 3D Character Pose from a Bitmap Sketch"
DESCRIPTION = '''
<table>
<th>
<ul>
<li><strong>Project</strong> <a href="http://www-labs.iro.umontreal.ca/~bmpix/sketch2pose/">sketch2pose</a></li>
<li><strong>Code</strong> <a href="https://github.com/kbrodt/sketch2pose">kbrodt/sketch2pose</a>
<li><strong>Paper</strong> <a href="https://dl.acm.org/doi/10.1145/3528223.3530106">ACM</a>
</ul>
<iframe src="https://ghbtns.com/github-btn.html?user=kbrodt&repo=sketch2pose&type=star&count=true&v=2&size=small" frameborder="0" scrolling="0" width="100" height="20"></iframe>
</th>
<th>
<video controls autoplay muted loop>
<source src="http://www-labs.iro.umontreal.ca/~bmpix/sketch2pose/sketch2pose.webm" type="video/mp4">
</video>
</th>
</table>
<details>
<summary>Citation</summary>
```
@article{brodt2022sketch2pose,
author = {Kirill Brodt and Mikhail Bessmeltsev},
title = {Sketch2Pose: Estimating a 3D Character Pose from a Bitmap Sketch},
journal = {ACM Transactions on Graphics},
year = {2022},
month = {7},
volume = {41},
number = {4},
doi = {10.1145/3528223.3530106},
}
```
</details>
'''
def prepare():
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())
def main():
prepare()
save_dir = Path(SAVE_DIR)
save_dir.mkdir(parents=True, exist_ok=True)
def pose(img_path, use_cos=True, use_angle_transf=True, use_contacts=False, use_natural=True):
if use_cos == False:
use_angle_transf = False
cmd = CMD.format(save_dir, img_path)
if use_cos:
cmd = cmd + " --use-cos"
if use_angle_transf:
cmd = cmd + " --use-angle-transf"
if use_contacts:
cmd = cmd + " --use-contacts"
if use_natural:
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", label="Image"),
gr.Checkbox(value=True, label="Bone lenghts"),
gr.Checkbox(value=True, label="Foreshortening"),
gr.Checkbox(value=False, label="Self-contacts (available with cuda)", interactive=torch.cuda.is_available()),
gr.Checkbox(value=True, label="Pose naturalness"),
],
outputs=gr.Model3D(clear_color=[0.0, 0.0, 0.0, 0.0], label="SMPL 3D pose"),
examples=examples,
title=TITLE,
description=DESCRIPTION,
)
demo.launch()
if __name__ == "__main__":
main()
|