From 549223ab5308c117ea3dc08fe5fdc2ba50cb8a5a Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Mon, 21 Apr 2025 09:33:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=86=E4=B8=BB=E8=A6=81?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/__pycache__/posterGen.cpython-312.pyc | Bin 29878 -> 31283 bytes core/posterGen.py | 38 +++++-- main.py | 117 +++++++++++---------- utils/tweet_generator.py | 2 +- 4 files changed, 93 insertions(+), 64 deletions(-) diff --git a/core/__pycache__/posterGen.cpython-312.pyc b/core/__pycache__/posterGen.cpython-312.pyc index 293e5a719217894c311a76e70ccf8287691c5f14..7d4de3b7ce2cd22225b7c40f38c9feefe4e440bd 100644 GIT binary patch delta 5308 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 ZE`HyCM_wVT{@g+EpK9SBn65ze{{iE= len(self.config): + print(f"警告: 索引 {index} 超出配置范围,使用默认配置") + return self.config[0] return self.config[index] class PosterGenerator: diff --git a/main.py b/main.py index 82dbeb4..273569e 100644 --- a/main.py +++ b/main.py @@ -18,8 +18,8 @@ TEXT_POSBILITY = 0.3 def main(): config_file = { - "date": "4月17日", - "num": 5, + "date": "4月24日", + "num": 10, "model": "qwenQWQ", "api_url": "vllm", "api_key": "EMPTY", @@ -42,7 +42,7 @@ def main(): ], "prompts_dir": "/root/autodl-tmp/TravelContentCreator/genPrompts", "output_dir": "/root/autodl-tmp/TravelContentCreator/result", - "variants": 5, + "variants": 10, "topic_temperature": 0.2, "content_temperature": 0.3 } @@ -133,60 +133,65 @@ def main(): content_gen = contentGen.ContentGenerator() response = content_gen.run(info_directory, poster_num, tweet_content_list) print(response) - poster_config_summary = posterGen.PosterConfig(response) - for j_index in range(config_file["variants"]): - poster_config = poster_config_summary.get_config_by_index(j_index) - img_dir = os.path.join(output_dir, f"{i+1}_{j_index+1}") - try: - # 创建输出目录 - collage_output_dir = os.path.join(img_dir, "collage_img") - os.makedirs(collage_output_dir, exist_ok=True) - poster_output_dir = os.path.join(img_dir, "poster") - os.makedirs(poster_output_dir, exist_ok=True) - - # 处理图片目录 - img_list = simple_collage.process_directory( - input_dir, - target_size=target_size, - output_count=1, - output_dir=collage_output_dir - ) - print(img_list) - - if not img_list or len(img_list) == 0: - print(f"未能生成拼贴图片,跳过海报生成") + try: + poster_config_summary = posterGen.PosterConfig(response) + for j_index in range(config_file["variants"]): + poster_config = poster_config_summary.get_config_by_index(j_index) + img_dir = os.path.join(output_dir, f"{i+1}_{j_index+1}") + try: + # 创建输出目录 + collage_output_dir = os.path.join(img_dir, "collage_img") + os.makedirs(collage_output_dir, exist_ok=True) + poster_output_dir = os.path.join(img_dir, "poster") + os.makedirs(poster_output_dir, exist_ok=True) + + # 处理图片目录 + img_list = simple_collage.process_directory( + input_dir, + target_size=target_size, + output_count=1, + output_dir=collage_output_dir + ) + print(img_list) + + if not img_list or len(img_list) == 0: + print(f"未能生成拼贴图片,跳过海报生成") + continue + + # 生成海报 + poster_gen = posterGen.PosterGenerator() + + if random.random() < TEXT_POSBILITY: + text_data = { + "title": f"{poster_config['main_title']}", + "subtitle": "", + "additional_texts": [ + {"text": f"{poster_config['texts'][0]}", "position": "bottom", "size_factor": 0.5}, + {"text": f"{poster_config['texts'][1]}", "position": "bottom", "size_factor": 0.5} + ] + } + else: + text_data = { + "title": f"{poster_config['main_title']}", + "subtitle": "", + "additional_texts": [ + {"text": f"{poster_config['texts'][0]}", "position": "bottom", "size_factor": 0.5}, + # {"text": f"{poster_config['texts'][1]}", "position": "bottom", "size_factor": 0.5} + ] + } + print(text_data) + img_path = img_list[0]['path'] + print(f"使用图片路径: {img_path}") + output_path = os.path.join(poster_output_dir, f"poster.jpg") + result_path.append(poster_gen.create_poster(img_path, text_data, output_path)) + except Exception as e: + print(f"海报生成过程中出错: {e}") + traceback.print_exc() # 打印完整的堆栈跟踪信息 continue - - # 生成海报 - poster_gen = posterGen.PosterGenerator() - - if random.random() < TEXT_POSBILITY: - text_data = { - "title": f"{poster_config['main_title']}", - "subtitle": "", - "additional_texts": [ - {"text": f"{poster_config['texts'][0]}", "position": "bottom", "size_factor": 0.5}, - {"text": f"{poster_config['texts'][1]}", "position": "bottom", "size_factor": 0.5} - ] - } - else: - text_data = { - "title": f"{poster_config['main_title']}", - "subtitle": "", - "additional_texts": [ - {"text": f"{poster_config['texts'][0]}", "position": "bottom", "size_factor": 0.5}, - # {"text": f"{poster_config['texts'][1]}", "position": "bottom", "size_factor": 0.5} - ] - } - print(text_data) - img_path = img_list[0]['path'] - print(f"使用图片路径: {img_path}") - output_path = os.path.join(poster_output_dir, f"poster.jpg") - result_path.append(poster_gen.create_poster(img_path, text_data, output_path)) - except Exception as e: - print(f"海报生成过程中出错: {e}") - traceback.print_exc() # 打印完整的堆栈跟踪信息 - continue + except Exception as e: + print(f"配置解析失败,跳过当前项目: {e}") + traceback.print_exc() # 打印完整的堆栈跟踪信息 + continue if __name__ == "__main__": main() diff --git a/utils/tweet_generator.py b/utils/tweet_generator.py index 62490c1..4719fc8 100644 --- a/utils/tweet_generator.py +++ b/utils/tweet_generator.py @@ -215,7 +215,7 @@ def prepare_topic_generation( """准备选题生成的环境和参数""" # 创建AI Agent ai_agent = AI_Agent(base_url, model_name, api_key) - + # 加载系统提示词 with open(system_prompt_path, "r", encoding="utf-8") as f: system_prompt = f.read()