修改了海报生成脚本,现在会重新生成拼图

This commit is contained in:
jinye_huang 2025-04-27 23:36:49 +08:00
parent 98d7e55319
commit 4c146d6742
4 changed files with 102 additions and 27 deletions

View File

@ -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"
]
},
{

View File

@ -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:
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}")
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",
# 添加更多你需要处理的运行目录路径...
]