diff --git a/core/__pycache__/poster_gen.cpython-312.pyc b/core/__pycache__/poster_gen.cpython-312.pyc index 6ae451a..818b572 100644 Binary files a/core/__pycache__/poster_gen.cpython-312.pyc and b/core/__pycache__/poster_gen.cpython-312.pyc differ diff --git a/poster_gen_config.json b/poster_gen_config.json index 02628fd..0f87d73 100644 --- a/poster_gen_config.json +++ b/poster_gen_config.json @@ -1,7 +1,7 @@ { "date": "4月29日,4月30日, 4月28日, 5月1日", - "num": 1, - "variants": 2, + "num": 2, + "variants": 3, "topic_temperature": 0.2, "topic_top_p": 0.3, "topic_presence_penalty": 1.5, @@ -42,13 +42,13 @@ { "type": "Object", "file_path": [ - "./resource/Object/美的鹭湖鹭栖台酒店.txt" + "./resource/Object/乌镇民宿.txt" ] }, { "type": "Description", "file_path": [ - "./resource/Object/美的鹭湖鹭栖台酒店.txt" + "./resource/Object/乌镇民宿.txt" ] }, { diff --git a/scripts/regenerate_img.py b/scripts/regenerate_img.py index 179196b..223077a 100644 --- a/scripts/regenerate_img.py +++ b/scripts/regenerate_img.py @@ -129,15 +129,51 @@ def get_variant_poster_config(run_dir: Path, topic_index: int, variant_index: in logger.exception(f"加载或查找变体配置时出错 {config_file}: {e}") return None +def get_hotel_img_dir(run_dir_path: str) -> Path: + """从运行目录路径中提取主题信息,并返回对应的酒店图片目录 + + Args: + run_dir_path: 运行目录路径,例如 "/root/autodl-tmp/TravelContentCreator/result/安吉银润锦江城堡酒店/2025-04-27_12-55-40" + + Returns: + Path: 对应的酒店图片目录路径,例如 "/root/autodl-tmp/TravelContentCreator/hotel_img/安吉银润锦江城堡酒店" + """ + try: + # 从运行目录路径中提取主题名称 + # 例如从 "/root/autodl-tmp/TravelContentCreator/result/安吉银润锦江城堡酒店/2025-04-27_12-55-40" + # 提取出 "安吉银润锦江城堡酒店" + run_path = Path(run_dir_path) + hotel_name = run_path.parent.name + + # 构建酒店图片目录路径 + hotel_img_dir = Path("/root/autodl-tmp/TravelContentCreator/hotel_img") / hotel_name + + # 检查目录是否存在 + if not hotel_img_dir.exists(): + logger.warning(f"酒店图片目录不存在: {hotel_img_dir}") + return None + + logger.info(f"找到酒店图片目录: {hotel_img_dir}") + return hotel_img_dir + except Exception as e: + logger.exception(f"获取酒店图片目录时出错: {e}") + return None + def regenerate_single_poster(generator: PosterGenerator, variant_info: dict, run_dir: Path): - """重新生成单个海报""" + """重新生成单个海报和拼贴图""" topic_index = variant_info["topic_index"] variant_index = variant_info["variant_index"] variant_path = variant_info["path"] logger.info(f"--- 开始处理: 主题 {topic_index}, 变体 {variant_index} (目录: {variant_path.name}) ---") - # 1. 定位拼贴图 + # 1. 确保必要的目录存在 collage_dir = variant_path / "collage_img" + poster_dir = variant_path / "poster" + collage_dir.mkdir(parents=True, exist_ok=True) + poster_dir.mkdir(parents=True, exist_ok=True) + logger.info(f"确保目录存在: collage_dir={collage_dir}, poster_dir={poster_dir}") + + # 2. 定位拼贴图 collage_path = None if collage_dir.is_dir(): image_files = list(collage_dir.glob("*.png")) + list(collage_dir.glob("*.jpg")) + list(collage_dir.glob("*.jpeg")) @@ -146,18 +182,17 @@ def regenerate_single_poster(generator: PosterGenerator, variant_info: dict, run logger.info(f"找到拼贴图: {collage_path}") else: logger.warning(f"在 {collage_dir} 中未找到拼贴图 (png/jpg/jpeg)") - return False - else: - logger.warning(f"拼贴图目录不存在: {collage_dir}") - return False + # 即使没有找到原始拼贴图,也继续处理,因为我们会重新生成 + collage_path = collage_dir / "collage.jpg" # 设置一个默认路径 + logger.info(f"将使用默认拼贴图路径: {collage_path}") - # 2. 获取该变体的海报文字配置 + # 3. 获取该变体的海报文字配置 poster_config = get_variant_poster_config(run_dir, topic_index, variant_index) if poster_config is None: logger.warning(f"无法获取变体 {topic_index}_{variant_index} 的海报配置,跳过生成。") return False - # 3. 准备 text_data + # 4. 准备 text_data text_data = { "title": poster_config.get("main_title", ""), # 保证默认是空字符串 "subtitle": "", # 通常副标题为空 @@ -173,14 +208,54 @@ def regenerate_single_poster(generator: PosterGenerator, variant_info: dict, run logger.debug(f"准备好的 text_data: {text_data}") - # 4. 加载拼贴图 + # 5. 重新生成拼贴图 try: - collage_img = Image.open(collage_path).convert('RGBA') + from core.simple_collage import ImageCollageCreator + collage_creator = ImageCollageCreator() + + # 获取酒店图片目录 + hotel_img_dir = get_hotel_img_dir(str(run_dir)) + if not hotel_img_dir: + logger.warning(f"无法获取酒店图片目录,尝试使用原始拼贴图继续") + if collage_path and collage_path.exists(): + collage_img = Image.open(collage_path).convert('RGBA') + else: + logger.error("无法获取酒店图片目录且原始拼贴图不存在,跳过生成") + return False + else: + # 重新生成拼贴图 + new_collage, used_images = collage_creator.create_collage_with_style( + str(hotel_img_dir), + style=None, # 随机选择样式 + target_size=(900, 1200) + ) + + if new_collage: + # 保存新生成的拼贴图 + regenerated_collage_path = collage_dir / "regenerated_collage.jpg" + # 在保存为 JPEG 之前转换为 RGB 格式 + if new_collage.mode == 'RGBA': + new_collage = new_collage.convert('RGB') + new_collage.save(regenerated_collage_path) + logger.info(f"成功重新生成并保存拼贴图到: {regenerated_collage_path}") + collage_img = new_collage + else: + logger.warning("拼贴图重新生成失败,尝试使用原始拼贴图继续") + if collage_path and collage_path.exists(): + collage_img = Image.open(collage_path).convert('RGBA') + else: + logger.error("拼贴图重新生成失败且原始拼贴图不存在,跳过生成") + return False except Exception as e: - logger.exception(f"无法加载拼贴图 {collage_path}: {e}") - return False + logger.exception(f"重新生成拼贴图时发生错误: {e}") + # 尝试使用原始拼贴图继续 + if collage_path and collage_path.exists(): + collage_img = Image.open(collage_path).convert('RGBA') + else: + logger.error("处理拼贴图时发生错误且原始拼贴图不存在,跳过生成") + return False - # 5. 调用生成器创建海报 + # 6. 调用生成器创建海报 logger.info("调用 PosterGenerator.create_poster...") try: regenerated_poster_img = generator.create_poster(collage_img, text_data) @@ -189,9 +264,9 @@ def regenerate_single_poster(generator: PosterGenerator, variant_info: dict, run traceback.print_exc() # 打印详细错误堆栈 regenerated_poster_img = None # 确保设置为 None - - # 6. 保存重新生成的海报 + # 7. 保存重新生成的海报 if regenerated_poster_img: + # 确保输出目录存在 poster_output_dir = variant_path / "poster" poster_output_dir.mkdir(parents=True, exist_ok=True) # 假设输出文件名固定为 poster.jpg @@ -317,14 +392,14 @@ if __name__ == "__main__": # 在这里定义你要处理的运行目录列表 # ================================================== run_directories = [ - "/root/autodl-tmp/TravelContentCreator/result/安吉/2025-04-27_12-55-40", - "/root/autodl-tmp/TravelContentCreator/result/乌镇/2025-04-27_10-50-34", - "/root/autodl-tmp/TravelContentCreator/result/齐云山/2025-04-27_11-51-56", - "/root/autodl-tmp/TravelContentCreator/result/长鹿/2025-04-27_14-03-44", - "/root/autodl-tmp/TravelContentCreator/result/笔架山/2025-04-27_02-02-34", - "/root/autodl-tmp/TravelContentCreator/result/笔架山/2025-04-27_02-23-17", - "/root/autodl-tmp/TravelContentCreator/result/笔架山/2025-04-27_07-57-20", - "/root/autodl-tmp/TravelContentCreator/result/笔架山/2025-04-27_09-29-20" + "/root/autodl-tmp/TravelContentCreator/result/安吉银润锦江城堡酒店/2025-04-27_12-55-40", + "/root/autodl-tmp/TravelContentCreator/result/乌镇民宿/2025-04-27_10-50-34", + "/root/autodl-tmp/TravelContentCreator/result/齐云山度假酒店/2025-04-27_11-51-56", + "/root/autodl-tmp/TravelContentCreator/result/长鹿旅游休博园/2025-04-27_14-03-44", + "/root/autodl-tmp/TravelContentCreator/result/笔架山居森林度假酒店/2025-04-27_02-02-34", + "/root/autodl-tmp/TravelContentCreator/result/笔架山居森林度假酒店/2025-04-27_02-23-17", + "/root/autodl-tmp/TravelContentCreator/result/笔架山居森林度假酒店/2025-04-27_07-57-20", + "/root/autodl-tmp/TravelContentCreator/result/笔架山居森林度假酒店/2025-04-27_09-29-20" # "/root/autodl-tmp/TravelContentCreator/result/ANOTHER_RUN_ID", # 添加更多你需要处理的运行目录路径... ] diff --git a/utils/__pycache__/poster_notes_creator.cpython-312.pyc b/utils/__pycache__/poster_notes_creator.cpython-312.pyc index 80700e7..aedd0de 100644 Binary files a/utils/__pycache__/poster_notes_creator.cpython-312.pyc and b/utils/__pycache__/poster_notes_creator.cpython-312.pyc differ