From 0e16650301ccdc60be753d85cb826f9c9ae4f4ef Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Fri, 18 Apr 2025 15:52:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E6=B5=B7=E6=8A=A5?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=9A=84=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SelectPrompt/systemPrompt.txt | 2 +- SelectPrompt/userPrompt.txt | 2 +- core/__pycache__/ai_agent.cpython-312.pyc | Bin 6799 -> 7084 bytes core/__pycache__/posterGen.cpython-312.pyc | Bin 29828 -> 29878 bytes .../simple_collage.cpython-312.pyc | Bin 29748 -> 29780 bytes core/ai_agent.py | 9 ++- core/posterGen.py | 10 ++-- core/simple_collage.py | 2 +- genPrompts/systemPrompt.txt | 2 +- main.py | 54 ++++++++++++------ .../resource_loader.cpython-312.pyc | Bin 10669 -> 10669 bytes .../tweet_generator.cpython-312.pyc | Bin 15057 -> 15057 bytes 12 files changed, 52 insertions(+), 29 deletions(-) diff --git a/SelectPrompt/systemPrompt.txt b/SelectPrompt/systemPrompt.txt index 414e618..35812f3 100644 --- a/SelectPrompt/systemPrompt.txt +++ b/SelectPrompt/systemPrompt.txt @@ -8,7 +8,7 @@ 输出注意点: 1.不需要创作标题和正文,只需要按日期先后顺序罗列选题即可 - 2.千万不要虚构景区信息没有的设施设备和活动信息,不要虚构活动赠送信息;任何活动信息以用户所给明确资料为准 + 2.千万不要虚构景区信息没有的设施设备和活动信息,不要虚构活动赠送信息,如果材料中没有提到,不要创造价格信息,任何活动信息以用户所给明确资料为准 3.输出内容中,场景要符合自然规律,不要出现不合理的场景;也要符合社会道德规范和法律规范 4.策划选题时,按长假节日优先的原则进行选题策划,春节、寒暑假、国庆、五一这四个假期,要提前一个月进行选题策划,举例:9月初就要对国庆进行预热,其他几个以此类推 即对用户影响较大的节日优先选题 diff --git a/SelectPrompt/userPrompt.txt b/SelectPrompt/userPrompt.txt index 16ccbc4..e7aa0f5 100644 --- a/SelectPrompt/userPrompt.txt +++ b/SelectPrompt/userPrompt.txt @@ -3,7 +3,7 @@ 选题风格:根据选题标题,根据我给你的各种文案提示词风格,按用户需求有逻辑的选择不同的风格和面对的用户人群即可,注意只可以在给你的资料中选择,并严谨摘取文件名称,不要自己创作 输出注意点: 1.不需要创作标题和正文,只需要按日期先后顺序罗列选题即可 - 2.千万不要虚构景区信息没有的设施设备和活动信息,不要虚构活动赠送信息;任何活动信息以用户所给明确资料为准 + 2.千万不要虚构景区信息没有的设施设备和活动信息,不要虚构活动赠送信息,如果材料中没有指明,不要创造价格信息,任何活动信息以用户所给明确资料为准 3.输出内容中,场景要符合自然规律,不要出现不合理的场景;也要符合社会道德规范和法律规范 4.策划选题时,按长假节日优先的原则进行选题策划,春节、寒暑假、国庆、五一这四个假期,要提前一个月进行选题策划,举例:9月初就要对国庆进行预热,其他几个以此类推 即对用户影响较大的节日优先选题 diff --git a/core/__pycache__/ai_agent.cpython-312.pyc b/core/__pycache__/ai_agent.cpython-312.pyc index 57a5f52d435eff67f625ba8b113b84510abe0c26..1e5f7320f63d4a2814d369fbf30e555f15b0f981 100644 GIT binary patch delta 1064 zcmbu7O-vI(6vtUCl2Zbd-p^%Kr}JI2(6On&BTK#2NF-tEEfE_Im!OsoA>_nX5Q?~9(&fI zuDV<@pd6F8bp!qpcHgODe3|x9u~5wt7S^QGU61yYok~LLN%JEPwDu001kR z`rm@(_GWM76U=4;$`a?vI#So;MiwPwhB1;Atbv3+94DKu%jCSe4I|`C(SZ8{cFxK( z@`LvI&|HX|TEn&LnT4Xy+=bS#x33#4Nj>V>5P0eHF}9XdzEXL{P}tem$uCQgs+N^- z6P>IaXOopqp0QhsH1exrk0(;kzph7-#>__PIRu+CH9iv_9sK#U>|5k0dHQXgq?iY3 zVA|o|Ve;&+OhPaLMnMqv2RX}46szz-^N)( zWW!%sS4{=eV8apKa=4M4Z|H}pIe&#ykvCtp4{30#g-0dC8#r*OnJTST2E-6!V0+mI t{f@ih!}_h5(QPGYjCGJ?ukjlXAdk^`=7;UWi1@_^A^{sSNk(t!W~ delta 759 zcmbV}&1(}u6u@V8cV;)6X4{fYwyD9yrlF)#s)A`DVn{`*wT*bpUfRF}>XO*HiJ+2# zLJl63D(|2-JqdybHG&=l1wUG%|A37`@TPc>EA?3R^+o*bCp&YSnOK(<@Lxd?aG019^FPIWMYO)fnif*G7}oul$h8+CSejMWrS0{L{rM+H%~<2 zDTRyDca70C%H%baPqXTODZs2&(5YQK$5tv^QtfP|v_-1rQfU?LYQJy>?(`RN zr`b2~ML478j5!0n9+}Z*!|3h7AR=CvUU_vcfB9pP90DsrS0cr={LJV3Vd2knpp;z8zv zYLugaK1#Ws6eMbQJdep_cS+EQ(Tj)4B8K#ySYg^(GUctaEobycxUC$itgs8^(owt2 i6PWj^^R7QcjBy+JKBGt*`P(S)lja4yh`Y%BxPsr%KBIjA diff --git a/core/__pycache__/posterGen.cpython-312.pyc b/core/__pycache__/posterGen.cpython-312.pyc index 04bda80286f67c311478187f2703f0a8da21f22b..293e5a719217894c311a76e70ccf8287691c5f14 100644 GIT binary patch delta 3522 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 diff --git a/core/__pycache__/simple_collage.cpython-312.pyc b/core/__pycache__/simple_collage.cpython-312.pyc index 3a0d0c7e4bec577e3f36831214c7e918ad6c6cb9..c651d30627b1172907445af7eedd0fdfa91a11dd 100644 GIT binary patch delta 3374 zcma)8ZERE58ScIQ%ojK*Ax`YZ4he)COw=TWgb*MFR1}hh5a>WtiMh3}<4bH`bFN*I zbc20#E2SG%d(0z)Ou+T&vgkD{GR?vEcn!Ge%(h38LkPwUu6N z{!49F6X}*~FeLy<*l{;rg~{t6weu^{L&`S(-)PiZCfU`o)V>B|YY7}*!eohzVLSf3 zmC>1HCRro@sAFR&h*2-ob4e@fcoS*MOc;{ddfvTZVuSF2+sYd`+QZ5{Vz7ea)${b8 zWWo(2{MijRlu`aBJ#o%;+FoA@tc z1KI%+!QD0srj-+EVk6fozK%v&8)l#5xrvU_@KzNmwyXC$YO`?X^BAkzG|B&b?qJ4Dx!j;tQ8t14w;OZw`ERgO}7RHi*KRL z|2nv_1x#fT*QU%&HlAWS1^WTsJ=CM@=hH*mCD*T&E)LxU*NemJ+}o;LGqn68`qASa zW#A)7JIaJ)EonfVk!Gcg!jvU*9eIF4amO{z`OSBlp$UfR1wc8=JWv~fECv4 zr+BSK^9WvjfTIMIhsA=P$*1*dLa<#l@Hy_8SlP%4$TE&s61kij{)CaEdWg?E6={L} z8lOYWIqsyXXB~G|x97-{J)=A7M815T#um5mj{b1z!e~S#XI|br=o^PK$p`<$@@p#q z$IX8CIXuefY)U-dQT8iLfSYIOM^F7ILkP;H!ea-wdEw$>D-Q>P{MosHY(qQN%u-;QU4zrzOa0j>hxC$Pf= z{P4tjesaR=lfC2{rQF1I7x{JX)Kw)Ql2r7Ob}X9W?bF@DIqVW2pWc4kB&*V2FL?}@w&3tY@PGRG#$2F_x+21i8LAy0dczuAt;eSeoB(29wHL-HK$TEJAbO!B<_Ya%B_R{I(1?& zjHNC*j;kgM=@Zh6L+hyKTE^vWc?24iou*LXJUQ1J2|*)L=OCmRKpOBI;2gg`7i;m* z7nu)GOR#ho3uCN}hcah}g^249I|cZVK=ZRTki|s-_e^F18Uam!y8-J;S2FLabOo@i zP|GILIBVtAk;*-j(Pxb~o8#ZJn%ltFX{ad8T+*1AXT8m@S%)5iNo*K9io_9S3xkDM zZ44{`MBVI$bRO^o0bTAcKo(!GF9#}N6{*{ZxCHs5`L;n(-iW2VR)cG$)0MA!PGg=~ z3B$H=Q>9y$#THnwbT#i)4+wuKteK3Y_^dK12(9YWJgnP>Oc0o}5_pnv)Y9=2;;r_5 zVYu4y$Kz1N<61y&cbc^9JU8u~8unu$Km#BEkfEYE|M8Dd#uhWiZWiV5+X**D{s$Jx B`%M4< delta 3382 zcmai0YiwKP8SXiDZ0FX-X`M8&Nu0DLJ!u-X$#UssiAhICn?TzX+G?zIPMzcUG`5fR z9lIo%R0gGGWfzb>32EI5kp^sG+>JK2AE->5wlT)E+n@7elh8DXv>`O9(u7oP@AIC- z4i=On`SE++?{ePfy?x(bK2To&K&k&-eSOV3dc^(fQV+jc{~c9b3dn2f7JtGNiL_xC z-&ChON?5l09#?a zT|4Wojbd~FFeqaUk>))lE_(nz0!60;ejc+j&D&L9tK%x}m!{ z2JsHS7=gB4xZjq6;7;G2P#={0f@8|Kybx?A1D*`N3FNG_ zE-Z6eY?SYHYzwzS=@WW(+R8Y-M9MM~hD&R+?ChLS_DZWW?2BRjhUG9V8rzPMh9g%HA-9-A((D)>i-jDGLn#|Cx7aAo7>9m=%-Q3a| z*Tx5n7XdD5`Ol$k&EV-4a!t}qXW~hrQ_Sy@ox|PAL3#J^pv&}OnzpdB#Ps>$zk%tM zy_>uPZV6zUEW!KqqsJR#aw1ByqfEGgbUBem*-udFXx6BrGd}zm2bsae;;ky z1!p;dgps9^h|iUzdGSl^&h5}UZR#1vo6+rA^5VAG9@l>tX~M#elK(En+Ew!3vtvX4 zarlpDe}pamSOWNJ=IVFxD6yF&Kfajw1tuVEX6Q#xU5vfHQYfBF5q*RAr> z;VIXF>@3ubco9(HPxc}^b&5tEe<5ooEkS)sSb5a{R@ROkI&dHT98X4{WB-z5X1RJC zKRO%rC-ES*=bYr8-LbBn=tXXoh8M?s8(hztnVGn4E*PRqzBQg{_${`28}NI;yK-b= zo9oU;=zUG|cx>V|j~5jscW-Peo;X@m8aOMtheWYni7fU~3Uu zty(-sf8vJ()Y*-ksf!;$u1}dWsd&O7H`6I8mZ0;WH_wvq^N#lcU1Y>_^3=)OSBXAy za`aTWZ*XL|c~s;oyDAFrQBQNyHez#;+VwJ}5In0p|Im!W?J@G9Un0GEB8jGx)%=H{cMTyrS=~0B71&`RCc52%IE*^hFT>)DkSM6Zjw* z)|9>wVzCDAX~16r>x=KEudCG0AGgBI+ezbWaIcTl0n%xG#)ylIe9H>8f{IhWsx-6H z#vCWF$jgtcBVWbW1e<&Zw!I2qTi9WFyenC{X_(?9uNe$ YQJ|F{2li7k7ShIu=#c-m6I`|b2Q8@jR{#J2 diff --git a/core/ai_agent.py b/core/ai_agent.py index c1c4c44..a78ef37 100644 --- a/core/ai_agent.py +++ b/core/ai_agent.py @@ -37,7 +37,7 @@ class AI_Agent(): print(f"\nAPI Key: {self.api}") print(f"Base URL: {self.base_url}") print(f"Model: {self.model_name}") - + time.sleep(random.random()) retry_count = 0 max_retry_wait = 10 # 最大重试等待时间(秒) @@ -146,4 +146,9 @@ class AI_Agent(): time_end = time.time() time_cost = time_end - time_start - return result, system_prompt, user_prompt, file_folder, result_file, tokens, time_cost \ No newline at end of file + return result, system_prompt, user_prompt, file_folder, result_file, tokens, time_cost + + def close(self): + self.client.close() + ## del self.client + del self \ No newline at end of file diff --git a/core/posterGen.py b/core/posterGen.py index 6aa6f6f..0d61f83 100644 --- a/core/posterGen.py +++ b/core/posterGen.py @@ -38,7 +38,9 @@ class PosterGenerator: self.frame_dir = os.path.join(self.base_dir, "frames") # 边框素材目录 self.sticker_dir = os.path.join(self.base_dir, "stickers") # 贴纸素材目录 self.text_bg_dir = os.path.join(self.base_dir, "text_backgrounds") # 文本框底图目录 - + + self.img_frame_posbility = 0.7 + self.text_bg_posbility = 0.7 # 设置输出目录 if output_dir: self.output_dir = output_dir @@ -217,9 +219,9 @@ class PosterGenerator: f"宽={self.title_area['width']}, 高={self.title_area['height']}") # 2. 检查是否使用文本框底图 - use_text_bg = os.environ.get('USE_TEXT_BG', 'True').lower() in ('true', '1', 't', 'yes') + use_text_bg = random.random() < self.text_bg_posbility print(f"环境变量USE_TEXT_BG设置为: {os.environ.get('USE_TEXT_BG', 'True')}, 是否使用文本框底图: {use_text_bg}") - + if use_text_bg and self.text_bgs: print("根据环境变量设置,使用文本框底图") # 随机选择文本背景 @@ -591,7 +593,7 @@ class PosterGenerator: # 使用模10的余数决定是否添加边框 # 每十张中的第1、5、9张添加边框(余数为1,5,9) - add_frame_flag = (self.poster_count % 10) in (1, 5, 9) + add_frame_flag = random.random() < self.img_frame_posbility if add_frame_flag: final_image = self.add_frame(final_image, target_size) diff --git a/core/simple_collage.py b/core/simple_collage.py index 93b1504..6b2c1fe 100644 --- a/core/simple_collage.py +++ b/core/simple_collage.py @@ -18,7 +18,7 @@ class ImageCollageCreator: "grid_2x2", # 标准2x2网格 "asymmetric", # 非对称布局 "filmstrip", # 胶片条布局 - "circles", # 圆形布局 + # "circles", # 圆形布局 "overlap", # 重叠风格 "mosaic", # 马赛克风格 3x3 "fullscreen", # 全覆盖拼图样式 diff --git a/genPrompts/systemPrompt.txt b/genPrompts/systemPrompt.txt index f8bb0d2..57eb093 100644 --- a/genPrompts/systemPrompt.txt +++ b/genPrompts/systemPrompt.txt @@ -17,7 +17,7 @@ 输出注意点: 1.按要求输出标签+正文+TAG标签 2.正文直白清楚围绕产品,比喻和过度联想不要出现 - 3.千万不要虚构景区信息没有的设施设备和活动信息 + 3.千万不要虚构景区信息没有的设施设备和活动信息,如果材料中没有指明,不要提及价格信息;如果没有明确的产品价格或者优惠活动信息,不要提及价格和优惠 4.输出内容中,场景要符合自然规律,不要出现不合理的场景;也要符合社会道德规范和法律规范 5.TAG标签要按照从景区所在地到景区名称到景点名称到具体特色活动到面向人群的顺序进行罗列 diff --git a/main.py b/main.py index 07a3317..82dbeb4 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ import time from datetime import datetime import argparse import sys +import traceback from core.ai_agent import AI_Agent from core.topic_parser import TopicParser @@ -12,10 +13,13 @@ import core.simple_collage as simple_collage from utils.resource_loader import ResourceLoader from utils.tweet_generator import prepare_topic_generation, generate_topics, generate_single_content import random + +TEXT_POSBILITY = 0.3 + def main(): config_file = { "date": "4月17日", - "num": 10, + "num": 5, "model": "qwenQWQ", "api_url": "vllm", "api_key": "EMPTY", @@ -59,6 +63,7 @@ def main(): os.makedirs(output_dir, exist_ok=True) tweet_topic_record.save_topics(os.path.join(output_dir, "tweet_topic.json")) tweet_topic_record.save_prompt(os.path.join(output_dir, "tweet_prompt.txt")) + ai_agent.close() # raise Exception("选题生成失败,退出程序") if not run_id or not tweet_topic_record: print("选题生成失败,退出程序") @@ -79,12 +84,15 @@ def main(): for i in range(len(tweet_topic_record.topics_list)): tweet_content_list = [] for j in range(config_file["variants"]): + time.sleep(random.random()) + ai_agent = AI_Agent(config_file["api_url"], config_file["model"], config_file["api_key"]) tweet_content, gen_result = generate_single_content( ai_agent, content_system_prompt, tweet_topic_record.topics_list[i], config_file["prompts_dir"], config_file["resource_dir"], output_dir, run_id, i+1, j+1, config_file["content_temperature"] ) tweet_content_list.append(tweet_content.get_json_file()) + ai_agent.close() if not tweet_content: print(f"生成第{i+1}篇文章的第{j+1}个变体失败,跳过") continue @@ -108,7 +116,6 @@ def main(): if not os.path.exists(img_dir_path): print(f"图片目录不存在:{img_dir_path},跳过该对象") continue - img_dir = os.path.join(output_dir, f"{i+1}_{j_index+1}") info_directory = [ f"/root/autodl-tmp/sanming_img/相机/{object_name}/description.txt" ] @@ -126,7 +133,10 @@ 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") @@ -138,7 +148,7 @@ def main(): img_list = simple_collage.process_directory( input_dir, target_size=target_size, - output_count=poster_num, + output_count=1, output_dir=collage_output_dir ) print(img_list) @@ -149,27 +159,33 @@ def main(): # 生成海报 poster_gen = posterGen.PosterGenerator() - poster_config = posterGen.PosterConfig(response) - for index, item in enumerate(poster_config.get_config()): - if index >= len(img_list): - print(f"配置项数量大于图片数量,跳过后续配置") - break - + if random.random() < TEXT_POSBILITY: text_data = { - "title": f"{item['main_title']}", - "subtitle": "", - "additional_texts": [ - {"text": f"{item['texts'][0]}", "position": "bottom", "size_factor": 0.5}, - {"text": f"{item['texts'][1]}", "position": "bottom", "size_factor": 0.5} - ] + "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} + ] } - img_path = img_list[index]['path'] - print(f"使用图片路径: {img_path}") - output_path = os.path.join(poster_output_dir, f"img_{i+1}_{j_index+1}_{index}.jpg") - result_path.append(poster_gen.create_poster(img_path, text_data, output_path)) + 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 if __name__ == "__main__": diff --git a/utils/__pycache__/resource_loader.cpython-312.pyc b/utils/__pycache__/resource_loader.cpython-312.pyc index 2e3fb7f725713bc67f47c50a72bbd9a30335f5f1..c6322c913269c39929f9bfa4be4b9a8e2899bebe 100644 GIT binary patch delta 19 ZcmZ1*yf&EYG%qg~0}z-T-pI9B6976W1$Y1e delta 19 ZcmZ1*yf&EYG%qg~0}z;O*~qn66975g1!({P diff --git a/utils/__pycache__/tweet_generator.cpython-312.pyc b/utils/__pycache__/tweet_generator.cpython-312.pyc index 10277107320777f7148af6ddce69dbd313ad07ec..75d49d90b44e45be5463a64f566cacceb43353a4 100644 GIT binary patch delta 19 Zcmcauda;!2G%qg~0}$*vvytn#6#z$a2Fd^c delta 19 Zcmcauda;!2G%qg~0}xC;u#xMy6#zy+29*E+