import numpy as np import gradio as gr import os import tempfile import shutil # from gradio_inter.predict_from_file import predict_from_file # from gradio_inter.create_bash_file import create_bash_file def create_bash_file(single_path_seq): ori_bash_file = "./scripts_demo/train_grab_pointset_points_dyn_s1.sh" with open(ori_bash_file) as rf: bash_string = rf.read() bash_string = bash_string.replace("./data/102_grab_all_data.npy", single_path_seq) dst_bash_file = "./scripts_demo/train_grab_pointset_points_dyn_s1.sh" with open(dst_bash_file, "w") as wf: wf.write(bash_string) return dst_bash_file # from sample.reconstruct_data_taco import reconstruct_from_file def create_temp_file(path: str) -> str: temp_dir = tempfile.gettempdir() temp_folder = os.path.join(temp_dir, "denoising") os.makedirs(temp_folder, exist_ok=True) # Clean up directory # for i in os.listdir(temp_folder): # print("Removing", i) # os.remove(os.path.join(temp_folder, i)) temp_path = os.path.join(temp_folder, path.split("/")[-1]) shutil.copy2(path, temp_path) return temp_path # from gradio_inter.predict import predict_from_data # from gradio_inter.predi def transpose(matrix): return matrix.T def predict(file_path: str): temp_file_path = create_temp_file(file_path) # predict_from_file temp_bash_file = create_bash_file(temp_file_path) os.system(f"bash {temp_bash_file}") temp_dir = tempfile.gettempdir() base_exp_dir = os.path.join(temp_dir, "quasi_sim") os.makedirs(base_exp_dir, exist_ok=True) base_exp_dir = os.path.join(base_exp_dir, "exp") os.makedirs(base_exp_dir, exist_ok=True) base_exp_dir = f"{base_exp_dir}/wmask" print(f"self.base_exp_dir:", base_exp_dir) base_exp_dir = base_exp_dir + f"_reverse_value_totviews_" os.makedirs(base_exp_dir, exist_ok=True) # self.dataset = Dataset(self.conf['dataset']) mano_pts_retar_sv_info_fn = os.path.join(base_exp_dir, f"ts_to_hand_obj_verts.npy") return mano_pts_retar_sv_info_fn # res_file_path = "/tmp/denoising/save/predicted_infos_seed_0_tag_20231104_017_jts_spatial_t_100__st_0.npy" # saved_path = reconstruct_from_file(temp_file_path) # return saved_path def create_demo(): USAGE = """## Input data format Currently, the demo accepts a `.pkl` file containing an hand-object sequence organized as the following format: ```python { "hand_pose": numpy.ndarray(seq_length, 48), # MANO pose at each frame "hand_trans": numpy.ndarray(seq_length, 3), # hand global translation at each frmae "hand_shape": numpy.ndarray(10), # MANO shape coefficients "hand_verts": numpy.ndarray(seq_length, 778, 3), # MANO hand vertices "hand_faces": numpy.ndarray(1538, 3), # MANO hand faces "obj_verts": numpy.ndarray(seq_length, num_obj_verts, 3), # object vertices at each frame "obj_faces": numpy.ndarray(num_obj_faces, 3), # object faces "obj_pose": numpy.ndarray(seq_length, 4, 4), # object pose at each frame } ``` We provide an example [here](https://drive.google.com/file/d/17oqKMhQNpRqSdApyuuCmTrPkrFl0Cqp6/view?usp=sharing). **The demo is under developing and will support more data formats in the future.** ## To run the demo, 1. Upload a `pickle` file to the left box by draging your file or clicking the box to open the file explorer. 2. Clik the `Submit` button to run the demo. 3. The denoised sequence will be output as a `.npy` file and can be downloaded from the right box. Since the model runs on CPU currently, the speed is not very fast. For instance, it takes abount 1200s to process the [example](https://drive.google.com/file/d/17oqKMhQNpRqSdApyuuCmTrPkrFl0Cqp6/view?usp=sharing) mentioned above which contains 288 frames. Please be patient and wait for the result. To run the model faster, please visit our [github repo](https://github.com/Meowuu7/GeneOH-Diffusion), follow the instructions and run the model on your own server or local machine. ## Output data format The output is a `.npy` file containing the denoised sequence organized as the following format: ```python { "predicted_info": xxx "bf_ct_verts": numpy.ndarray(seq_length, 778, 3), # denoised MANO vertices "bf_ct_rot_var": numpy.ndarray(seq_length, 3), # denoised MANO global rotation coefficients "bf_ct_theta_var": numpy.ndarray(seq_length, 45), # denoised MANO global pose coefficients "bf_ct_beta_var": numpy.ndarray(1, 10), # denoised MANO shape coefficients "bf_ct_transl_var": numpy.ndarray(seq_length, 3), # denoised hand global translation } ``` The corresponding output file of the [example](https://drive.google.com/file/d/17oqKMhQNpRqSdApyuuCmTrPkrFl0Cqp6/view?usp=sharing) mentioned above can be downloaded [here](https://drive.google.com/file/d/1Ah-qwV6LXlOyaBBe0qQRu1lN-BpKt2Y3/view?usp=sharing). """ with gr.Blocks() as demo: gr.Markdown(USAGE) # demo = # gr.Interface( # predict, # # gr.Dataframe(type="numpy", datatype="number", row_count=5, col_count=3), # gr.File(type="filepath"), # gr.File(type="filepath"), # cache_examples=False # ) input_file = gr.File(type="filepath") output_file = gr.File(type="filepath") gr.Interface( predict, # gr.Dataframe(type="numpy", datatype="number", row_count=5, col_count=3), input_file, output_file, cache_examples=False ) inputs = input_file outputs = output_file gr.Examples( examples=[os.path.join(os.path.dirname(__file__), "./data/102_grab_all_data.npy")], inputs=inputs, fn=predict, outputs=outputs, ) return demo if __name__ == "__main__": demo = create_demo() demo.launch()