from test import * import copy import gradio as gr class merge_config_then_run(): def __init__(self) -> None: # Load the tokenizer self.pretrained_model_path = '/home/xianyang/Data/code/FateZero/ckpt/stable-diffusion-v1-5' # load controlnet def run( self, user_input_video, num_layouts, layout_file1, layout_file2, layout_file3, layout_file4, layout_file5, prompt, model_id, n_sample_frame, start_sample_frame, sampling_rate, control_type, dwpose_options, controlnet_conditioning_scale, use_pnp, pnp_inject_steps, flatten_res, ): # , ] = inputs default_edit_config='config/demo_config.yaml' Omegadict_default_edit_config = OmegaConf.load(default_edit_config) dataset_time_string = get_time_string() config_now = copy.deepcopy(Omegadict_default_edit_config) config_now['pretrained_model_path'] = self.pretrained_model_path print(f"config_now['pretrained_model_path'] = model_id {self.pretrained_model_path}") #==========update datset_config===============# # 将所有 layout 文件放入列表中 all_layout_files = [layout_file1, layout_file2, layout_file3, layout_file4, layout_file5] # 根据 num_layouts 转换为整数,并只使用前 N 个 n_layouts = int(num_layouts) layout_files = all_layout_files[:n_layouts] config_now['dataset_config']['prompt'] = '' config_now['dataset_config']['path'] = user_input_video config_now['dataset_config']['n_sample_frame'] = n_sample_frame config_now['dataset_config']['start_sample_frame'] = start_sample_frame config_now['dataset_config']['sampling_rate'] = sampling_rate config_now['dataset_config']['layout_files'] = layout_files if user_input_video is None: raise gr.Error('You need to upload a video or choose a provided video') if user_input_video is not None: if isinstance(user_input_video, str): config_now['dataset_config']['path'] = user_input_video elif hasattr(user_input_video, 'name') and user_input_video.name is not None: config_now['dataset_config']['path'] = user_input_video.name # 检查每个 layout file 是否存在 layout_files_checked = [] for idx, lf in enumerate(layout_files): if lf is None: raise gr.Error(f'Layout file {idx+1} is missing') if isinstance(lf, str): lf_path = lf elif hasattr(lf, 'name') and lf.name is not None: lf_path = lf.name else: raise gr.Error(f'Layout file {idx+1} is invalid') if not os.path.exists(lf_path): raise gr.Error(f'Layout file "{lf_path}" does not exist') layout_files_checked.append(lf_path) config_now['dataset_config']['layout_files'] = layout_files_checked #==========update datset_config===============# #==========update control_config===============# config_now['control_config']['control_type'] = control_type config_now['control_config']['controlnet_conditioning_scale'] = float(controlnet_conditioning_scale) config_now['control_config']['hand'] = 'hand' in dwpose_options config_now['control_config']['face'] = 'face' in dwpose_options if control_type == "depth_midas": pretrained_controlnet_path = "/home/xianyang/Data/code/controlvideo/sd-controlnet-depth" elif control_type == "depth_zoe": pretrained_controlnet_path = "/home/xianyang/Data/code/FateZero/ckpt/control_v11f1p_sd15_depth" elif control_type == "dwpose": pretrained_controlnet_path = "/home/xianyang/Data/code/FateZero/ckpt/control_v11p_sd15_openpose" #==========update control_config===============# #==========update editing_config===============# config_now['editing_config']['use_pnp'] = [use_pnp] config_now['editing_config']['inject_step'] = int(pnp_inject_steps) config_now['editing_config']['flatten_res'] = [int(x) for x in flatten_res] config_now['editing_config']['editing_prompts'] = [[x.strip() for x in prompt.split(',')]] print('editing prompt', prompt) #==========update editing_config===============# logdir = default_edit_config.replace('config', 'result').replace('.yml', '').replace('.yaml', '')+f'_{dataset_time_string}' config_now['logdir'] = logdir print(f'Saving at {logdir}') save_path = test(config = config_now, **config_now) mp4_path = save_path.replace('_0.gif', '_0_0_0.mp4') return mp4_path