DynamicScene/DynamicGeneration
8
1from pathlib import Path2import uuid3import pickle as pkl4from dynamic_utils import Sampler, get_layout5from utils import clean_temp_dir, get_scene_data, get_scene_dir_path6from video_utils import Video_Generator7from utils import get_video_path, read_character8 9 10def generate_schedules(scene_file_name, character_files):11 scene_dir = get_scene_dir_path(scene_file_name)12 house_info = get_scene_data(scene_dir)13 14 activity_base_list = []15 character_info_list = []16 schedule_list = []17 for character_file in character_files:18 activity_base, character_info, schedule = read_character(character_file)19 activity_base_list.append(activity_base)20 character_info_list.append(character_info)21 schedule_list.append(schedule)22 23 #set sampler24 sampler = Sampler()25 sampler.set_activity(character_info_list, activity_base_list, schedule_list)26 scene_layout = get_layout(house_info)27 sampler.set_scene_layout(scene_layout)28 schedules, _, _ = sampler.sample()29 return schedules30 31def save_vedio(schedules, scene_id, vedio_path):32 video_generator = Video_Generator()33 video_generator.generate(schedules, scene_id, vedio_path)34 35def generate_video(scene_file_name: str, character_files: list[dict|str|Path], max_try_num: int=5) -> Path:36 for _ in range(max_try_num):37 try:38 schedules = generate_schedules(scene_file_name, character_files)39 clean_temp_dir()40 video_path = get_video_path()41 save_vedio(schedules, scene_file_name, video_path)42 return video_path43 except:44 continue45 return None46 47 