File size: 4,916 Bytes
836b387
 
 
 
 
 
 
33f757a
 
836b387
33f757a
 
836b387
 
33f757a
 
 
 
 
 
 
 
836b387
33f757a
 
 
 
 
 
 
 
 
836b387
 
 
 
 
 
 
33f757a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
836b387
 
 
 
 
 
 
33f757a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
836b387
 
33f757a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
836b387
 
 
 
33f757a
 
836b387
 
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
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