From 4c146d6742ee85ecd9effb8fbd55a7346be86a66 Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Sun, 27 Apr 2025 23:36:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=B5=B7=E6=8A=A5?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=84=9A=E6=9C=AC=EF=BC=8C=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E4=BC=9A=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90=E6=8B=BC=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/__pycache__/poster_gen.cpython-312.pyc | Bin 37588 -> 37588 bytes poster_gen_config.json | 8 +- scripts/regenerate_img.py | 121 ++++++++++++++---- .../poster_notes_creator.cpython-312.pyc | Bin 29886 -> 29886 bytes 4 files changed, 102 insertions(+), 27 deletions(-) diff --git a/core/__pycache__/poster_gen.cpython-312.pyc b/core/__pycache__/poster_gen.cpython-312.pyc index 6ae451a193f599151191b299774fe70c4d32d301..818b5726db78993d67dffed0aac2532939722bdb 100644 GIT binary patch delta 22 ccmcbzl 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 80700e7a1e0397c0a31b16b5d7c5a8d9dc587f1a..aedd0de1c4cad9535930b3e0ce9a5b411169b001 100644 GIT binary patch delta 22 ccmdn@l5yWlM()$Ryj%=Gu%U}*BlqSK09~60bN~PV delta 22 ccmdn@l5yWlM()$Ryj%=G5Oa}tBlqSK09^hDXaE2J