修改了海报生成脚本,现在会重新生成拼图
This commit is contained in:
parent
98d7e55319
commit
4c146d6742
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"date": "4月29日,4月30日, 4月28日, 5月1日",
|
"date": "4月29日,4月30日, 4月28日, 5月1日",
|
||||||
"num": 1,
|
"num": 2,
|
||||||
"variants": 2,
|
"variants": 3,
|
||||||
"topic_temperature": 0.2,
|
"topic_temperature": 0.2,
|
||||||
"topic_top_p": 0.3,
|
"topic_top_p": 0.3,
|
||||||
"topic_presence_penalty": 1.5,
|
"topic_presence_penalty": 1.5,
|
||||||
@ -42,13 +42,13 @@
|
|||||||
{
|
{
|
||||||
"type": "Object",
|
"type": "Object",
|
||||||
"file_path": [
|
"file_path": [
|
||||||
"./resource/Object/美的鹭湖鹭栖台酒店.txt"
|
"./resource/Object/乌镇民宿.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Description",
|
"type": "Description",
|
||||||
"file_path": [
|
"file_path": [
|
||||||
"./resource/Object/美的鹭湖鹭栖台酒店.txt"
|
"./resource/Object/乌镇民宿.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -129,15 +129,51 @@ def get_variant_poster_config(run_dir: Path, topic_index: int, variant_index: in
|
|||||||
logger.exception(f"加载或查找变体配置时出错 {config_file}: {e}")
|
logger.exception(f"加载或查找变体配置时出错 {config_file}: {e}")
|
||||||
return None
|
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):
|
def regenerate_single_poster(generator: PosterGenerator, variant_info: dict, run_dir: Path):
|
||||||
"""重新生成单个海报"""
|
"""重新生成单个海报和拼贴图"""
|
||||||
topic_index = variant_info["topic_index"]
|
topic_index = variant_info["topic_index"]
|
||||||
variant_index = variant_info["variant_index"]
|
variant_index = variant_info["variant_index"]
|
||||||
variant_path = variant_info["path"]
|
variant_path = variant_info["path"]
|
||||||
logger.info(f"--- 开始处理: 主题 {topic_index}, 变体 {variant_index} (目录: {variant_path.name}) ---")
|
logger.info(f"--- 开始处理: 主题 {topic_index}, 变体 {variant_index} (目录: {variant_path.name}) ---")
|
||||||
|
|
||||||
# 1. 定位拼贴图
|
# 1. 确保必要的目录存在
|
||||||
collage_dir = variant_path / "collage_img"
|
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
|
collage_path = None
|
||||||
if collage_dir.is_dir():
|
if collage_dir.is_dir():
|
||||||
image_files = list(collage_dir.glob("*.png")) + list(collage_dir.glob("*.jpg")) + list(collage_dir.glob("*.jpeg"))
|
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}")
|
logger.info(f"找到拼贴图: {collage_path}")
|
||||||
else:
|
else:
|
||||||
logger.warning(f"在 {collage_dir} 中未找到拼贴图 (png/jpg/jpeg)")
|
logger.warning(f"在 {collage_dir} 中未找到拼贴图 (png/jpg/jpeg)")
|
||||||
return False
|
# 即使没有找到原始拼贴图,也继续处理,因为我们会重新生成
|
||||||
else:
|
collage_path = collage_dir / "collage.jpg" # 设置一个默认路径
|
||||||
logger.warning(f"拼贴图目录不存在: {collage_dir}")
|
logger.info(f"将使用默认拼贴图路径: {collage_path}")
|
||||||
return False
|
|
||||||
|
|
||||||
# 2. 获取该变体的海报文字配置
|
# 3. 获取该变体的海报文字配置
|
||||||
poster_config = get_variant_poster_config(run_dir, topic_index, variant_index)
|
poster_config = get_variant_poster_config(run_dir, topic_index, variant_index)
|
||||||
if poster_config is None:
|
if poster_config is None:
|
||||||
logger.warning(f"无法获取变体 {topic_index}_{variant_index} 的海报配置,跳过生成。")
|
logger.warning(f"无法获取变体 {topic_index}_{variant_index} 的海报配置,跳过生成。")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# 3. 准备 text_data
|
# 4. 准备 text_data
|
||||||
text_data = {
|
text_data = {
|
||||||
"title": poster_config.get("main_title", ""), # 保证默认是空字符串
|
"title": poster_config.get("main_title", ""), # 保证默认是空字符串
|
||||||
"subtitle": "", # 通常副标题为空
|
"subtitle": "", # 通常副标题为空
|
||||||
@ -173,14 +208,54 @@ def regenerate_single_poster(generator: PosterGenerator, variant_info: dict, run
|
|||||||
|
|
||||||
logger.debug(f"准备好的 text_data: {text_data}")
|
logger.debug(f"准备好的 text_data: {text_data}")
|
||||||
|
|
||||||
# 4. 加载拼贴图
|
# 5. 重新生成拼贴图
|
||||||
try:
|
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:
|
except Exception as e:
|
||||||
logger.exception(f"无法加载拼贴图 {collage_path}: {e}")
|
logger.exception(f"重新生成拼贴图时发生错误: {e}")
|
||||||
return False
|
# 尝试使用原始拼贴图继续
|
||||||
|
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...")
|
logger.info("调用 PosterGenerator.create_poster...")
|
||||||
try:
|
try:
|
||||||
regenerated_poster_img = generator.create_poster(collage_img, text_data)
|
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() # 打印详细错误堆栈
|
traceback.print_exc() # 打印详细错误堆栈
|
||||||
regenerated_poster_img = None # 确保设置为 None
|
regenerated_poster_img = None # 确保设置为 None
|
||||||
|
|
||||||
|
# 7. 保存重新生成的海报
|
||||||
# 6. 保存重新生成的海报
|
|
||||||
if regenerated_poster_img:
|
if regenerated_poster_img:
|
||||||
|
# 确保输出目录存在
|
||||||
poster_output_dir = variant_path / "poster"
|
poster_output_dir = variant_path / "poster"
|
||||||
poster_output_dir.mkdir(parents=True, exist_ok=True)
|
poster_output_dir.mkdir(parents=True, exist_ok=True)
|
||||||
# 假设输出文件名固定为 poster.jpg
|
# 假设输出文件名固定为 poster.jpg
|
||||||
@ -317,14 +392,14 @@ if __name__ == "__main__":
|
|||||||
# 在这里定义你要处理的运行目录列表
|
# 在这里定义你要处理的运行目录列表
|
||||||
# ==================================================
|
# ==================================================
|
||||||
run_directories = [
|
run_directories = [
|
||||||
"/root/autodl-tmp/TravelContentCreator/result/安吉/2025-04-27_12-55-40",
|
"/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_10-50-34",
|
||||||
"/root/autodl-tmp/TravelContentCreator/result/齐云山/2025-04-27_11-51-56",
|
"/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_14-03-44",
|
||||||
"/root/autodl-tmp/TravelContentCreator/result/笔架山/2025-04-27_02-02-34",
|
"/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_02-23-17",
|
||||||
"/root/autodl-tmp/TravelContentCreator/result/笔架山/2025-04-27_07-57-20",
|
"/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_09-29-20"
|
||||||
# "/root/autodl-tmp/TravelContentCreator/result/ANOTHER_RUN_ID",
|
# "/root/autodl-tmp/TravelContentCreator/result/ANOTHER_RUN_ID",
|
||||||
# 添加更多你需要处理的运行目录路径...
|
# 添加更多你需要处理的运行目录路径...
|
||||||
]
|
]
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user