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 = """