Spaces:
Running
Running
File size: 2,804 Bytes
27763e5 88aa0dc 27763e5 88aa0dc 27763e5 |
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 |
import json
import time
import uvicorn
from pathlib import Path
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from fastapi.staticfiles import StaticFiles
from dataset.tracks_motion import TracksMotion
from GPS import GPS
import gradio as gr
def _synthesis(synthesis_setting, motion_data):
model = GPS(
init_mode=f"random_synthesis/{synthesis_setting['frames']}",
noise_sigma=synthesis_setting["noise_sigma"],
coarse_ratio=0.2,
pyr_factor=synthesis_setting["pyr_factor"],
num_stages_limit=-1,
silent=True,
device="cpu",
)
synthesized_motion = model.run(
motion_data,
mode="match_and_blend",
ext={
"criteria": {
"type": "PatchCoherentLoss",
"patch_size": synthesis_setting["patch_size"],
"stride": synthesis_setting["stride"]
if "stride" in synthesis_setting.keys()
else 1,
"loop": synthesis_setting["loop"],
"coherent_alpha": synthesis_setting["alpha"]
if synthesis_setting["completeness"]
else None,
},
"optimizer": "match_and_blend",
"num_itrs": synthesis_setting["num_steps"],
},
)
return synthesized_motion
def synthesis(data):
data = json.loads(data)
# create track object
data["setting"]["coarse_ratio"] = -1
motion_data = TracksMotion(data["tracks"], scale=data["scale"])
start = time.time()
synthesized_motion = _synthesis(data["setting"], [motion_data])
end = time.time()
data["time"] = end - start
data["tracks"] = motion_data.parse(synthesized_motion)
return data
intro = """
<h1 style="text-align: center;">
Example-based Motion Synthesis via Generative Motion Matching
</h1>
<h3 style="text-align: center; margin-bottom: 7px;">
<a href="http://weiyuli.xyz/GenMM" target="_blank">Project Page</a> | <a href="https://huggingface.co/papers/2306.00378" target="_blank">Paper</a> | <a href="https://github.com/wyysf-98/GenMM" target="_blank">Code</a>
</h3>
"""
with gr.Blocks() as demo:
gr.HTML(intro)
gr.HTML(
"""<iframe src="/GenMM_demo/" width="100%" height="700px" style="border:none;">"""
)
json_in = gr.JSON(visible=False)
json_out = gr.JSON(visible=False)
btn = gr.Button("Synthesize", visible=False)
btn.click(synthesis, inputs=[json_in], outputs=[json_out], api_name="predict")
app = FastAPI()
static_dir = Path("./GenMM_demo")
app.mount("/GenMM_demo", StaticFiles(directory=static_dir, html=True), name="static")
app = gr.mount_gradio_app(app, demo, path="/")
# serve the app
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=7860)
|