一、温故知新
回顾前面几篇文章,我们分别对文生图的案例演示和RAG Query改写做了详细介绍,今天我们再趣味性的强化一下两者的应用途径,结合两个模型Qwen-Turbo和Qwen-Image同时使用,将自然语言处理与计算机视觉完美结合,发现两者的奥妙之处。
二、系统介绍
先看看展示界面:
示例关键词:北极光, 日出
示例生成的文案:极光在晨曦中缓缓舞动,淡绿色与紫色的光带如丝绸般飘荡在深蓝色的天空。太阳刚刚升起,金色的光芒从地平线洒下,照亮了覆盖着薄霜的雪原。冰湖倒映着绚丽的极光与初升的太阳,整个画面充满神秘与宁静,空气中弥漫着清冷而纯净的气息。
生成的图片:
看系统界面,清楚我们使用Gradio构建的一个演示界面,该界面将展示如何使用Qwen-Turbo生成提示词,然后使用Qwen-Image生成图像。 我们将按照之前的设计,将流程分为两个主要步骤:先生成提示词,然后生成图像。在提示词生成成功之前,直接生成图像将会给出提示先生成提示词。
系统的核心在于三个主要功能模块:关键词管理、提示词生成和图像处理。关键词管理系统提供了结构化的选择方式,用户可以从多个类别中选择感兴趣的关键词,系统会自动将这些关键词组合成有意义的查询。
提示词生成引擎是系统的智能核心,它不仅简单拼接关键词,而是理解用户的创作意图,生成富有创意和细节的图像描述。图像处理模块则负责将文本描述转换为视觉内容,支持多种风格和尺寸的定制。
系统主要包含以下功能:
1. 关键词选择:使用选项卡和复选框组让用户选择关键词。
2. 参数设置:下拉菜单选择尺寸和风格,文本框输入负面提示词。
3. 生成提示词:点击按钮调用Qwen-Turbo生成提示词,并显示在文本框中。
4. 生成图像:只有在提示词生成后才可点击,调用Qwen-Image生成图像并显示。
5. 状态显示:显示操作的状态信息(成功、错误、进行中)。
6. 清除和下载功能:清除所有选择,下载生成的图像。
三、系统流程
实际操作过程简单直观:首先在界面左侧选择相关的关键词,这些关键词按主题分类,方便快速查找和选择。接着设置图像参数,包括尺寸、风格等可选设置。
点击"生成提示词"后,系统调用Qwen-Turbo生成详细的图像描述。获得满意的提示词后,可以点击"生成图像"按钮,系统将调用Qwen-Image创建最终的视觉作品。整个过程通常只需要几分钟,具体时间取决于图像复杂度和服务器负载。
1. 流程图
2. 流程介绍
2.1 应用启动与初始化
- 用户启动应用,加载Gradio界面
- 系统初始化API连接和参数设置
- 生成图像按钮初始状态为禁用
2.2 提示词生成
- 用户选择关键词和参数
- 点击生成提示词按钮
- 系统验证输入有效性
- 调用Qwen-Turbo API生成详细图像描述
- 处理API响应,显示生成的提示词或错误信息
- 成功生成提示词后启用生成图像按钮
2.3 图像生成
- 点击生成图像按钮
- 系统验证提示词存在且有效
- 调用Qwen-Image API生成图像
- 异步处理API响应
- 下载生成的图像并显示在界面
四、代码参考与解析
import dashscope from dashscope import ImageSynthesis import requests import tempfile import os import time from PIL import Image import io import base64 import json import gradio as gr # 设置您的 DashScope API Key DASHSCOPE_API_KEY = os.environ.get("DASHSCOPE_API_KEY", "") # 请替换为您的实际API Key # 初始化 DashScope dashscope.api_key = DASHSCOPE_API_KEY # DashScope Qwen-Image 支持的风格参数 SUPPORTED_STYLES = { "自动": "auto", "3D卡通": "<3d cartoon>", "动漫": "<anime>", "油画": "<oil painting>", "水彩": "<watercolor>", "素描": "<sketch>", "中国画": "<chinese painting>", "扁平插画": "<flat illustration>", "摄影": "<photography>", "肖像": "<portrait>" } # DashScope Qwen-Image 支持的尺寸参数 SUPPORTED_SIZES = { "正方形 (1024x1024)": "1024*1024", "横屏 (1280x720)": "1280*720", "竖屏 (720x1280)": "720*1280" } # 多组关键词选项 KEYWORD_GROUPS = { "自然": ["森林", "河流", "山脉", "星空", "湖泊", "海洋", "沙漠", "冰川", "草原", "瀑布", "峡谷", "岛屿", "火山", "洞穴", "森林小径", "珊瑚礁", "热带雨林", "北极光", "温泉", "绿洲"], "城市": ["高楼", "街道", "公园", "夜景", "桥梁", "广场", "地铁", "商业区", "住宅区", "地标建筑", "咖啡馆", "博物馆", "美术馆", "火车站", "机场", "港口", "书店", "餐厅", "购物中心", "体育场"], "人物": ["儿童", "老人", "情侣", "家庭", "学生", "医生", "艺术家", "运动员", "上班族", "旅行者", "科学家", "教师", "音乐家", "舞蹈家", "演员", "作家", "摄影师", "厨师", "农民", "消防员", "解放军"], "动物": ["猫咪", "小狗", "熊猫", "老虎", "狮子", "大象", "海豚", "鸟类", "蝴蝶", "兔子", "猴子", "长颈鹿", "斑马", "企鹅", "考拉", "袋鼠", "熊", "狐狸", "狼", "马"], "植物": ["樱花", "玫瑰", "竹子", "松树", "向日葵", "仙人掌", "荷叶", "枫叶", "薰衣草", "郁金香", "百合", "牡丹", "菊花", "桂花", "茉莉花", "桃花", "杜鹃花", "梅花", "向日葵", "绿萝"], "物品": ["礼帽", "手杖", "书本", "咖啡杯", "吉他", "相机", "钟表", "花瓶", "雨伞", "背包", "眼镜", "围巾", "手套", "项链", "耳环", "戒指", "手表", "钱包", "手机", "笔记本电脑"], "天气": ["晴天", "雨天", "雪天", "雾天", "日落", "日出", "彩虹", "雷电", "阴天", "微风", "大风", "暴雨", "暴雪", "冰雹", "台风", "霜冻", "露水", "雾霾", "多云", "晴朗"], "场景": ["咖啡馆", "图书馆", "博物馆", "海滩", "山脉", "森林", "花园", "未来城市", "赛博朋克", "太空站", "海底世界", "古代城堡", "乡村小屋", "豪华别墅", "小木屋", "沙漠帐篷", "雪山营地", "太空飞船", "阅兵式"] } def generate_prompt_with_qwen(keywords_dict, style=None): """ 使用通义千问Turbo模型根据关键词生成详细的图像描述提示词 """ url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {DASHSCOPE_API_KEY}" } # 构建风格提示 style_prompt = "" if style and style != "自动": style_name = style style_prompt = f",风格为{style_name}" # 从字典中提取所有选中的关键词 all_keywords = [] for group, keywords in keywords_dict.items(): if keywords: all_keywords.extend(keywords) # 如果没有选择任何关键词,返回错误 if not all_keywords: return None, "请至少选择一个关键词" # 将关键词列表组合成字符串 keywords_str = ",".join(all_keywords) # 构建请求体 payload = { "model": "qwen-turbo", "input": { "messages": [ { "role": "system", "content": "你是一个专业的图像描述生成助手。你的任务是根据用户提供的关键词,生成一段150字以内的详细、生动、富有想象力的图像描述,用于AI文生图模型。描述应该包含场景、主体、动作、环境、光线、色彩、情绪等细节,使AI能够生成高质量的图像。" }, { "role": "user", "content": f"请根据以下关键词生成一段详细的图像描述{style_prompt},描述应该具体、生动,包含足够的细节,适合用于AI文生图:{keywords_str}。请直接给出描述文本,不要包含任何解释或其他内容。" } ] }, "parameters": { "temperature": 0.8, "top_p": 0.8, "result_format": "message" } } try: print(f"发送请求到Qwen-Turbo API: {json.dumps(payload, ensure_ascii=False)}") response = requests.post(url, headers=headers, json=payload) response_data = response.json() print(f"Qwen-Turbo API响应: {json.dumps(response_data, ensure_ascii=False, indent=2)}") if response.status_code == 200 and "output" in response_data: # 提取生成的提示词 generated_prompt = response_data["output"]["choices"][0]["message"]["content"] return generated_prompt, None else: error_msg = f"Qwen-Turbo API调用失败,状态码: {response.status_code}" if "message" in response_data: error_msg += f", 错误信息: {response_data['message']}" return None, error_msg except Exception as e: error_msg = f"调用Qwen-Turbo时发生异常: {str(e)}" print(error_msg) import traceback traceback.print_exc() return None, error_msg def generate_image_direct(prompt, size, style=None, negative_prompt=None): """ 直接使用HTTP请求调用DashScope API,避免dashscope库的问题 """ if not DASHSCOPE_API_KEY or DASHSCOPE_API_KEY == "": return "请先设置您的 DashScope API Key" url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {DASHSCOPE_API_KEY}", "X-DashScope-Async": "enable" # 启用异步调用 } # 构建请求体 payload = { "model": "wanx-v1", "input": { "prompt": prompt }, "parameters": { "size": size, "n": 1 } } # 添加风格参数(如果提供且不是"自动") if style and style != "自动": # 将中文风格名称转换为API支持的格式 style_code = SUPPORTED_STYLES.get(style, "auto") payload["parameters"]["style"] = style_code # 添加负面提示(如果提供) if negative_prompt and negative_prompt.strip(): payload["parameters"]["negative_prompt"] = negative_prompt try: print(f"发送请求到DashScope API: {json.dumps(payload, ensure_ascii=False)}") response = requests.post(url, headers=headers, json=payload) response_data = response.json() print(f"API响应: {json.dumps(response_data, ensure_ascii=False, indent=2)}") if response.status_code == 200: # 检查是否为异步任务 if "output" in response_data and "task_status" in response_data["output"]: task_id = response_data["output"]["task_id"] print(f"异步任务已创建,任务ID: {task_id}") # 轮询任务状态 return poll_task_result(task_id) elif "output" in response_data and "results" in response_data["output"]: # 同步响应,直接获取结果 if len(response_data["output"]["results"]) > 0: image_url = response_data["output"]["results"][0]["url"] return download_and_save_image(image_url) else: return "API响应中未包含有效结果" else: return "API响应格式不正确" else: error_msg = f"API调用失败,状态码: {response.status_code}" if "message" in response_data: error_msg += f", 错误信息: {response_data['message']}" return error_msg except Exception as e: error_msg = f"发生异常: {str(e)}" print(error_msg) import traceback traceback.print_exc() return error_msg def poll_task_result(task_id, max_attempts=30, delay=2): """ 轮询异步任务结果 """ if not DASHSCOPE_API_KEY or DASHSCOPE_API_KEY == "": return "请先设置您的 DashScope API Key" url = f"https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}" headers = { "Authorization": f"Bearer {DASHSCOPE_API_KEY}" } attempt = 0 while attempt < max_attempts: try: print(f"轮询任务状态,尝试 {attempt + 1}/{max_attempts}") response = requests.get(url, headers=headers) response_data = response.json() print(f"任务状态响应: {json.dumps(response_data, ensure_ascii=False, indent=2)}") if response.status_code == 200: if "output" not in response_data: return "API响应格式不正确,缺少output字段" task_status = response_data["output"].get("task_status", "UNKNOWN") if task_status == "SUCCEEDED": if ("output" in response_data and "results" in response_data["output"] and len(response_data["output"]["results"]) > 0): image_url = response_data["output"]["results"][0]["url"] return download_and_save_image(image_url) else: return "任务成功但未包含有效结果" elif task_status in ["FAILED", "CANCELED"]: error_msg = f"任务失败,状态: {task_status}" if "message" in response_data["output"]: error_msg += f", 错误信息: {response_data['output']['message']}" return error_msg else: # 任务仍在处理中,等待后再次尝试 time.sleep(delay) attempt += 1 else: return f"获取任务状态失败,状态码: {response.status_code}" except Exception as e: error_msg = f"轮询任务时发生异常: {str(e)}" print(error_msg) time.sleep(delay) attempt += 1 return "任务处理超时" def download_and_save_image(image_url): """ 下载图像并保存到临时文件 """ try: img_response = requests.get(image_url) if img_response.status_code == 200: # 创建临时文件保存图像 with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as f: f.write(img_response.content) image_path = f.name print("图像下载成功!") return image_path else: return f"下载图像失败,状态码: {img_response.status_code}" except Exception as e: return f"下载图像时发生异常: {str(e)}" # 创建 Gradio 界面 def create_interface(): with gr.Blocks(title="Qwen-Image 智能文生图演示", theme=gr.themes.Soft()) as demo: gr.Markdown("# 🎨 Qwen-Turbo 关键字生成文本 + Qwen-Image 智能文生图演示") gr.Markdown("使用通义千问Turbo模型将关键词转换为详细描述,再用通义万相生成图像 ") # 创建关键词选项卡 keyword_components = {} with gr.Row(): with gr.Column(scale=1): # 关键词选项卡 - 移除了不支持的label参数 with gr.Tabs(): for group_name, keywords in KEYWORD_GROUPS.items(): with gr.Tab(group_name): # 为每组关键词创建多选框,并存储在字典中 keyword_components[group_name] = gr.CheckboxGroup( choices=keywords, label=f"{group_name}类关键词", interactive=True ) # 使用gr.Row()将图像尺寸和图像风格合并成一行显示 with gr.Row(): with gr.Column(scale=1): # 使用支持的尺寸选项 size = gr.Dropdown( choices=list(SUPPORTED_SIZES.keys()), value="横屏 (1280x720)", label="图像尺寸" ) with gr.Column(scale=1): # 使用支持的风格选项 style = gr.Dropdown( choices=list(SUPPORTED_STYLES.keys()), value="自动", label="图像风格" ) negative_prompt = gr.Textbox( label="负面提示词 (可选)", placeholder="请输入不希望出现在图像中的内容", lines=1 ) with gr.Row(): generate_prompt_btn = gr.Button("Qwen-Turbo 生成提示词", variant="primary") generate_image_btn = gr.Button("Qwen-Image 生成图像", variant="secondary") # 生成的提示词显示 generated_prompt = gr.Textbox( label="生成的详细提示词", placeholder="这里将显示通义千问生成的详细提示词", lines=3, interactive=True ) with gr.Column(scale=1): # 将已选关键词显示框移到生成的图像上方 selected_keywords_display = gr.Textbox( label="已选关键词", placeholder="这里将显示所有已选择的关键词", lines=1, interactive=False ) output_image = gr.Image( label="生成的图像", interactive=False ) status_text = gr.Textbox( label="状态信息", interactive=False, lines=1 ) with gr.Row(): download_btn = gr.Button("下载图像", variant="primary") clear_btn = gr.Button("清除", variant="stop") # 将使用说明移到主Row外部,实现全屏显示 with gr.Row(): with gr.Column(): gr.Markdown("### 使用说明") gr.Markdown(""" __1.__ 在左侧选项卡中选择您想要图像的关键词,可以从多组不同类型中选择关键词 __2.__ 选择图像尺寸和风格 __3. 可选:__ 在负面提示词框中输入不希望出现在图像中的内容 __4.__ 点击"生成提示词"按钮生成详细描述 __5.__ 点击"生成图像"按钮根据提示词生成图像 __6.__ 注意使用前必须先设置好 __DashScope API Key__。 """) # 添加一个函数,用于即时更新已选关键词显示 def update_selected_keywords_display(*args): # args包含所有关键词选择组件的当前值 all_selected_keywords = [] for selected in args: if selected: all_selected_keywords.extend(selected) # 将已选关键词格式化为字符串显示 keywords_display = ", ".join(all_selected_keywords) return keywords_display # 处理生成提示词按钮点击事件 def on_generate_prompt_click(*args): # 前 len(KEYWORD_GROUPS) 个参数是每组关键词的选择结果 selected_keywords_dict = {} all_selected_keywords = [] for i, group_name in enumerate(KEYWORD_GROUPS.keys()): selected_keywords_dict[group_name] = args[i] # 收集所有已选关键词 if args[i]: all_selected_keywords.extend(args[i]) # 下一个参数是尺寸,再下一个是风格 style = args[len(KEYWORD_GROUPS) + 1] if not any(selected_keywords_dict.values()): yield None, "", "⚠️ 警告:请至少选择一个关键词!" return if not DASHSCOPE_API_KEY or DASHSCOPE_API_KEY == "您的API_KEY": yield None, "", "⚠️ 警告:请先设置您的 DashScope API Key!" return # 更新状态 status = "正在使用通义千问生成详细提示词..." # 将已选关键词格式化为字符串显示 keywords_display = ", ".join(all_selected_keywords) yield None, keywords_display, status # 使用通义千问生成详细提示词 prompt, error = generate_prompt_with_qwen(selected_keywords_dict, style) if error: yield None, keywords_display, f"❌ 生成提示词失败: {error}" else: yield prompt, keywords_display, "✅ 提示词生成成功!" # 处理生成图像按钮点击事件 def on_generate_image_click(prompt, size, style, negative_prompt): if not prompt.strip(): yield None, "⚠️ 异常提醒:请先生成提示词!" return if not DASHSCOPE_API_KEY or DASHSCOPE_API_KEY == "您的API_KEY": yield None, "⚠️ 异常提醒:请先设置您的 DashScope API Key!" return # 更新状态 status = "正在生成图像,这可能需要一些时间..." yield None, status # 将用户友好的尺寸名称转换为API格式 api_size = SUPPORTED_SIZES.get(size, "1024*1024") # 调用API生成图像 result = generate_image_direct(prompt, api_size, style, negative_prompt) # 检查结果是图像路径还是错误信息 if isinstance(result, str) and result.endswith('.png') and os.path.exists(result): yield result, "✅ 图像生成成功!" else: yield None, f"❌ 生成图像失败: {result}" # 处理清除按钮点击事件 def on_clear_click(): # 清除关键词选择 clear_keywords = [[] for _ in range(len(KEYWORD_GROUPS))] # 清除其他组件 return clear_keywords + [None, "", "已清除图像和提示词"] # 准备输入参数列表:所有关键词组件 + [尺寸, 风格] generate_prompt_inputs = list(keyword_components.values()) + [size, style] generate_prompt_btn.click( fn=on_generate_prompt_click, inputs=generate_prompt_inputs, outputs=[generated_prompt, selected_keywords_display, status_text] ) generate_image_btn.click( fn=on_generate_image_click, inputs=[generated_prompt, size, style, negative_prompt], outputs=[output_image, status_text], api_name="generate_image", show_progress=True ) # 处理下载按钮点击事件 def on_download_click(image): if image is None: return "没有可下载的图像" # 获取当前时间作为文件名 timestamp = int(time.time()) filename = f"qwen_image_{timestamp}.png" try: # 如果图像是文件路径 if isinstance(image, str) and os.path.exists(image): import shutil shutil.copy2(image, filename) return f"图像已保存为 {filename}" else: return "无法保存图像:无效的图像路径" except Exception as e: return f"保存图像时发生错误: {str(e)}" download_btn.click( fn=on_download_click, inputs=output_image, outputs=status_text ) # 准备清除按钮的输出参数 clear_outputs = list(keyword_components.values()) + [output_image, generated_prompt, selected_keywords_display, status_text] clear_btn.click( fn=on_clear_click, inputs=None, outputs=clear_outputs ) # 为每个关键词选择组件添加事件监听,实现即时更新已选关键词显示 for component in keyword_components.values(): component.change( fn=update_selected_keywords_display, inputs=list(keyword_components.values()), outputs=selected_keywords_display ) return demo # 启动 Gradio 应用 if __name__ == "__main__": # 检查API密钥是否已设置 if not DASHSCOPE_API_KEY or DASHSCOPE_API_KEY == "您的API_KEY": print("警告: 请先设置您的 DashScope API Key") print("您可以在代码中设置 DASHSCOPE_API_KEY 变量") # 创建并启动 Gradio 界面 demo = create_interface() demo.launch( server_name="0.0.0.0", # 允许外部访问 server_port=7861, # 设置端口 share=False, # 不创建公开链接 debug=True # 启用调试模式 )
结构分析:
1. 导入和初始化
import dashscope from dashscope import ImageSynthesis import requests import tempfile import os import time from PIL import Image import io import base64 import json import gradio as gr # 设置API密钥 DASHSCOPE_API_KEY = os.environ.get("DASHSCOPE_API_KEY", "") dashscope.api_key = DASHSCOPE_API_KEY
- 导入必要的库,包括DashScope SDK、HTTP请求、文件处理、图像处理和Gradio界面库
- 从环境变量获取API密钥并进行初始化
2. 参数配置
# 支持的风格和尺寸参数 SUPPORTED_STYLES = {...} SUPPORTED_SIZES = {...} # 多组关键词选项 KEYWORD_GROUPS = { "自然": ["森林", "河流", ...], "城市": ["高楼", "街道", ...], # ... 其他类别 }
- 定义了API支持的图像风格和尺寸选项
- 创建了分类的关键词库,方便用户选择
3. 核心功能函数
3.1 提示词生成函数
def generate_prompt_with_qwen(keywords_dict, style=None):
- 使用Qwen-Turbo模型根据用户选择的关键词生成详细的图像描述
- 构建系统提示词,指导模型生成适合AI绘画的描述
- 处理API响应并提取生成的提示词
- 输入:用户选择的关键词和风格参数
处理:构建API请求,调用Qwen-Turbo模型
输出:生成的详细图像描述提示词
3.2 图像生成函数
def generate_image_direct(prompt, size, style=None, negative_prompt=None):
- 直接使用HTTP请求调用DashScope API生成图像
- 支持异步任务处理和轮询机制
- 处理风格、尺寸和负面提示词参数
- 输入:生成的提示词和用户设置的参数
处理:构建API请求,调用Qwen-Image模型
输出:图像URL或任务ID(异步任务)
3.3 辅助函数
def poll_task_result(task_id, max_attempts=30, delay=2): def download_and_save_image(image_url):
- 实现异步任务状态轮询
- 下载生成的图像并保存到临时文件
4. Gradio界面构建
def create_interface():
- 创建多选项卡关键词选择界面
- 设计图像参数配置区域(尺寸、风格、负面提示词)
- 设置提示词生成和图像生成按钮
- 添加状态显示和结果展示区域
5. 事件处理逻辑
def on_generate_prompt_click(*args): def on_generate_image_click(prompt, size, style, negative_prompt): def on_clear_click(): def on_download_click(image):
- 处理用户交互事件
- 协调提示词生成和图像生成流程
- 实现状态更新和结果反馈
6. 函数的执行流程
这是一个简化流程图,清晰地展示了Qwen-Turbo和Qwen-Image协同工作的核心流程
五、应用场景与案例赏析
这一技术在实际应用中展现出巨大价值。在创意设计领域,设计师可以快速生成概念图、灵感素材;在内容创作方面,自媒体工作者能够为文章配图、制作吸引人的封面;在教育领域,教师可以创建教学插图、可视化教材。
商业应用案例同样丰富:电商企业可以用其生成产品展示图,营销团队可以创作广告素材,甚至房地产行业也能用于生成房产概念图。这些应用不仅提高了工作效率,更重要的是开启了新的创作可能性。
- 案例1
关键词:森林, 绿洲, 日落, 乡村小屋
生成的文案:夕阳西下,金色的余晖洒在宁静的森林中,一片绿洲悄然浮现。绿洲中央矗立着一座古朴的乡村小屋,屋顶覆盖着青苔,木窗透出温暖的灯光。小屋前的小径铺满落叶,微风轻拂,树叶沙沙作响。天空染上橙红与紫罗兰的渐变色彩,映照在绿洲的水面上,波光粼粼,宛如梦境。整个画面充满温馨与安宁,仿佛时间在此静止。
生成的图片:
- 案例2
关键词:山脉, 星空, 摄影师, 晴朗
生成的文案:摄影师伫立在巍峨的山脉之巅,夜空如墨,繁星点点,银河横跨天际,璀璨夺目。他专注地调整着相机参数,镜头对准那片神秘的星空,脸上带着沉静而兴奋的神情。四周寂静无声,只有微风轻拂山岩,月光洒落在雪峰之上,银白与深蓝交织,营造出宁静而壮丽的氛围。
生成的图片:
- 案例3
关键词:森林小径, 手机, 古代城堡
生成的文案:幽深的森林小径蜿蜒穿过茂密的树影,青苔覆盖的石板上残留着昨夜的露水。一位旅人手持老旧手机,神情专注地查看屏幕,仿佛在寻找某种指引。远处,一座古老的城堡矗立在薄雾中,尖顶刺破灰蓝色的天空,墙壁爬满藤蔓,散发着神秘与沧桑的气息。阳光透过树叶洒下斑驳光影,营造出一种静谧而略带忧郁的氛围。
生成的图片:
- 案例4
关键词:高楼, 暴雪, 赛博朋克
生成的文案:高楼在暴雪中闪烁着冷艳的霓虹光芒,赛博朋克风格的灯光在白色雪花中投下斑斓的光影。街道上行人稀少,穿着厚重羽绒服的影子在闪烁的广告屏下匆匆而过。巨大的全息投影在空中浮现,模糊的数字代码在风雪中若隐若现,整个城市仿佛被冻结在未来的梦境之中。
生成的图片:
六、总结
为了获得最佳效果,我们也应该掌握一些实用技巧:在关键词选择时,尽量选择相关性强、具体的词汇;在提示词生成后,可以适当编辑优化;对于图像生成,可以尝试不同的风格参数组合。
代码性能方面,通过合理的API调用策略和缓存机制,可以优化提高响应速度。同时,还应该了解各种参数对生成结果的影响,以便更好地控制输出质量。
随着AI技术的不断发展,这一领域仍有巨大提升空间。未来的版本可能会支持更复杂的提示词结构、更精细的风格控制、更快的生成速度。同时,应用场景也将进一步扩展,可能涵盖视频生成、3D模型创建等更复杂的视觉内容生产。
Qwen-Turbo与Qwen-Image的组合不仅是一次思维的风暴,也是AI内容创作的实际落地。双模型架构不仅技术先进,更重要的是实用性强,能够真正解决实际创作中的痛点。