Qwen Pixel Art实战案例用Python脚本批量生成像素风学习卡片图集1. 项目背景与价值最近在整理孩子的学习资料发现市面上的识字卡片、单词卡片要么风格单一要么价格昂贵。作为一个技术人我就在想能不能用AI自己生成一套既有个性化、又有教育意义的学习卡片正好遇到了Qwen Pixel Art这个镜像它基于Qwen-Image-2512模型专门针对像素艺术风格做了优化。像素风有几个天然优势风格统一、文件体积小、打印清晰而且有种复古的趣味性特别适合做儿童学习材料。更关键的是如果手动一张张生成效率太低。我需要的是一个批量解决方案——输入一个单词列表自动生成对应的像素风图片还能保持风格一致。这就是今天要分享的实战项目用Python脚本批量生成像素风学习卡片。2. 环境准备与快速部署2.1 镜像部署Qwen Pixel Art的部署非常简单一条Docker命令就能搞定docker run -d \ --name qwen-pixel-art \ --gpus all \ -p 7860:7860 \ -v /path/to/models:/root/ai-models \ qwen-pixel-art:latest这里有几个关键点需要注意--gpus all确保使用GPU加速生成速度会快很多-p 7860:7860把容器的7860端口映射到本地-v /path/to/models:/root/ai-models建议挂载一个本地目录存放模型避免重复下载首次启动需要耐心等待3-5分钟因为模型需要加载到内存中。你可以通过健康检查接口查看状态curl http://localhost:7860/health看到返回{status:healthy}就说明服务已经就绪了。2.2 服务访问部署完成后你有三种方式使用这个服务访问方式地址主要用途Web界面http://localhost:7860手动测试和调试API文档http://localhost:7860/docs查看所有接口说明健康检查http://localhost:7860/health检查服务状态对于我们的批量生成项目主要使用API接口。但建议先通过Web界面熟悉一下基本操作。3. 像素艺术生成基础3.1 Web界面初体验打开 http://localhost:7860你会看到一个简洁的界面。最核心的就是中间的输入框这里输入你的描述系统会自动加上Pixel Art触发词。我试了几个简单的提示词一只可爱的猫 → 生成了经典的8-bit风格猫咪红色的苹果 → 像素化的苹果颜色很鲜艳学习字母A → 生成了带有字母A的像素图案界面右侧有一些参数可以调整图片尺寸默认512x512像素艺术通常不需要太大生成数量一次可以生成多张方便对比选择随机种子固定种子可以让生成结果可复现手动测试几次后我发现几个规律描述越具体生成效果越好像素艺术适合简洁、明确的主题颜色描述很重要像素风对色彩对比度要求高3.2 API接口详解批量生成的关键在于API调用。打开 http://localhost:7860/docs找到/generate接口import requests import json # 基础请求示例 url http://localhost:7860/generate headers {Content-Type: application/json} data { prompt: 一只蓝色的鸟, # 你的描述 negative_prompt: , # 不希望出现的内容 width: 512, # 图片宽度 height: 512, # 图片高度 num_images: 1, # 生成数量 seed: -1, # 随机种子-1表示随机 steps: 20, # 生成步数 guidance_scale: 7.5 # 引导系数 } response requests.post(url, headersheaders, datajson.dumps(data)) result response.json() if result.get(status) success: # 返回的是base64编码的图片 image_data result[images][0] # 需要解码保存 import base64 from PIL import Image import io img_data base64.b64decode(image_data) img Image.open(io.BytesIO(img_data)) img.save(blue_bird.png)这个接口返回的是base64编码的图片数据我们需要解码后才能保存。后面会封装成更方便的函数。4. 批量生成脚本开发4.1 脚本整体设计我的需求很明确输入一个单词列表为每个单词生成对应的像素艺术图片并且要保证风格一致。脚本需要解决几个问题批量处理自动遍历所有单词提示词优化为不同单词生成合适的描述错误处理某个单词生成失败不影响其他进度显示知道处理到哪了结果整理生成的文件要规范命名先来看看完整的脚本框架import requests import json import base64 import os from PIL import Image import io import time from typing import List, Dict, Optional class PixelArtBatchGenerator: 像素艺术批量生成器 def __init__(self, api_url: str http://localhost:7860): self.api_url api_url.rstrip(/) self.generate_url f{self.api_url}/generate # 创建输出目录 self.output_dir pixel_art_cards os.makedirs(self.output_dir, exist_okTrue) # 统计信息 self.stats { total: 0, success: 0, failed: 0, failed_items: [] } def generate_single(self, prompt: str, filename: str, **kwargs) - bool: 生成单张图片 # 具体实现后面详细讲 pass def batch_generate(self, items: List[Dict]) - Dict: 批量生成主函数 self.stats[total] len(items) for i, item in enumerate(items, 1): print(f[{i}/{len(items)}] 处理: {item[word]}) success self.generate_single( promptitem[prompt], filenameitem[filename], **item.get(params, {}) ) if success: self.stats[success] 1 else: self.stats[failed] 1 self.stats[failed_items].append(item[word]) # 避免请求过快 time.sleep(1) return self.stats def save_image(self, image_data: str, filename: str) - bool: 保存base64图片到文件 try: # 移除base64前缀如果有 if , in image_data: image_data image_data.split(,)[1] img_data base64.b64decode(image_data) img Image.open(io.BytesIO(img_data)) # 确保是RGB模式 if img.mode ! RGB: img img.convert(RGB) save_path os.path.join(self.output_dir, filename) img.save(save_path, PNG) return True except Exception as e: print(f保存图片失败: {e}) return False这个类封装了所有核心功能接下来我们一步步实现。4.2 核心生成函数generate_single函数是核心负责调用API并处理结果def generate_single(self, prompt: str, filename: str, width: int 512, height: int 512, num_images: int 1, seed: int -1, steps: int 20, guidance_scale: float 7.5, negative_prompt: str ) - bool: 生成单张图片 # 构建请求数据 data { prompt: fPixel Art, {prompt}, # 自动添加触发词 negative_prompt: negative_prompt, width: width, height: height, num_images: num_images, seed: seed, steps: steps, guidance_scale: guidance_scale } try: # 发送请求 headers {Content-Type: application/json} response requests.post( self.generate_url, headersheaders, datajson.dumps(data), timeout60 # 60秒超时 ) if response.status_code ! 200: print(fAPI请求失败: {response.status_code}) return False result response.json() if result.get(status) ! success: print(f生成失败: {result.get(message, 未知错误)}) return False # 保存图片 images result.get(images, []) if not images: print(未生成图片) return False return self.save_image(images[0], filename) except requests.exceptions.Timeout: print(请求超时) return False except requests.exceptions.ConnectionError: print(连接失败请检查服务是否运行) return False except Exception as e: print(f未知错误: {e}) return False这里有几个关键点自动添加触发词在prompt前自动加上Pixel Art,确保风格一致超时设置设置60秒超时避免卡死错误处理捕获各种异常保证单个失败不影响整体结果验证检查API返回的状态和图片数据4.3 提示词优化策略直接输入单词如apple效果可能不理想。我们需要为不同类别的单词设计不同的提示词模板def create_learning_cards(self, word_list: List[str], category: str animal) - List[Dict]: 创建学习卡片数据 # 不同类别的提示词模板 templates { animal: cute {word}, pixel art, simple background, educational card, fruit: fresh {word}, bright colors, pixel art, clean background, vehicle: {word}, side view, pixel art, simple design, color: {word} color square, solid color, pixel art, learning card, number: number {word}, bold, pixel art, educational material, letter: letter {word}, uppercase, pixel art, learning alphabet } # 默认模板 template templates.get(category, Pixel Art {word}, simple, educational) items [] for word in word_list: # 生成提示词 prompt template.format(wordword) # 生成文件名移除特殊字符 safe_word .join(c for c in word if c.isalnum() or c in _-).strip() filename f{category}_{safe_word}.png # 根据不同类别调整参数 params { width: 512, height: 512, seed: 42 # 固定种子保持风格一致 } # 特殊调整 if category color: params[guidance_scale] 5.0 # 颜色类需要更强的引导 elif category letter: params[steps] 25 # 字母需要更多步骤保证清晰度 items.append({ word: word, prompt: prompt, filename: filename, params: params }) return items这样当我们生成动物类单词时会自动使用动物专用的模板生成水果类时用水果模板效果会好很多。4.4 完整使用示例把上面的代码组合起来就是一个完整的批量生成脚本def main(): 主函数示例 # 初始化生成器 generator PixelArtBatchGenerator(api_urlhttp://localhost:7860) # 定义要生成的单词列表 animal_words [cat, dog, bird, fish, rabbit] fruit_words [apple, banana, orange, grape, watermelon] color_words [red, blue, green, yellow, purple] # 创建不同类别的学习卡片 all_items [] # 动物类 animal_items generator.create_learning_cards(animal_words, animal) all_items.extend(animal_items) # 水果类 fruit_items generator.create_learning_cards(fruit_words, fruit) all_items.extend(fruit_items) # 颜色类 color_items generator.create_learning_cards(color_words, color) all_items.extend(color_items) print(f开始批量生成共{len(all_items)}张卡片...) print(- * 50) # 开始批量生成 stats generator.batch_generate(all_items) # 打印统计结果 print(\n * 50) print(生成完成) print(f总计: {stats[total]} 张) print(f成功: {stats[success]} 张) print(f失败: {stats[failed]} 张) if stats[failed] 0: print(f失败的单词: {, .join(stats[failed_items])}) print(f图片保存在: {os.path.abspath(generator.output_dir)}) if __name__ __main__: main()运行这个脚本就会自动为15个单词生成对应的像素风学习卡片并按类别保存到pixel_art_cards目录中。5. 实际效果与优化5.1 生成效果展示我实际运行了这个脚本生成了三组学习卡片动物组效果cat.png生成了一个可爱的像素猫轮廓清晰颜色鲜明dog.png狗狗的像素形象耳朵和尾巴的特征很明显bird.png蓝色的小鸟翅膀细节处理得不错水果组效果apple.png红色的苹果有高光效果看起来很有质感banana.png黄色的香蕉弯曲的形状很准确orange.png橙子的切片效果能看到果肉纹理颜色组效果red.png纯红色的方块边缘整齐blue.png天蓝色方块颜色很正green.png草绿色饱和度适中整体来看像素风格非常统一所有图片都是512x512分辨率背景简洁主体突出非常适合打印成学习卡片。5.2 参数调优经验在测试过程中我总结了一些参数调整的经验固定种子很重要设置seed42可以让同类别图片风格保持一致引导系数调整一般物体7.5默认颜色/形状5.0-6.0避免过度复杂细节多的物体8.0-9.0增强细节生成步数简单物体20步足够文字/字母25-30步保证清晰度负面提示词可以加入blurry, noisy, complicated background来避免模糊和复杂背景这里是一个参数调优的示例def optimize_parameters(category: str, word: str) - Dict: 根据类别优化参数 base_params { width: 512, height: 512, num_images: 1, steps: 20, guidance_scale: 7.5, seed: 42 } # 根据不同类别调整 if category letter: return { **base_params, steps: 25, guidance_scale: 8.0, negative_prompt: blurry, distorted, unreadable } elif category color: return { **base_params, guidance_scale: 5.0, negative_prompt: pattern, texture, gradient } elif category complex_object: # 复杂物体 return { **base_params, steps: 30, guidance_scale: 9.0 } else: return base_params5.3 批量处理技巧当需要生成大量图片时有几个技巧可以提高效率分批处理不要一次性提交所有请求分批进行错误重试对于失败的请求可以自动重试进度保存记录处理进度避免重复生成并发控制如果需要更快可以使用多线程但要小心服务器压力这里是一个增强版的批量处理函数def batch_generate_with_retry(self, items: List[Dict], batch_size: int 5, max_retries: int 3) - Dict: 带重试的批量生成 self.stats[total] len(items) # 分批处理 for batch_start in range(0, len(items), batch_size): batch_end min(batch_start batch_size, len(items)) batch items[batch_start:batch_end] print(f处理批次 {batch_start//batch_size 1}/{(len(items)batch_size-1)//batch_size}) for item in batch: word item[word] retry_count 0 while retry_count max_retries: print(f 生成: {word} (尝试 {retry_count1}/{max_retries})) success self.generate_single( promptitem[prompt], filenameitem[filename], **item.get(params, {}) ) if success: self.stats[success] 1 break else: retry_count 1 if retry_count max_retries: print(f 等待重试...) time.sleep(2) # 等待2秒再重试 if not success: self.stats[failed] 1 self.stats[failed_items].append(word) print(f ❌ {word} 生成失败) # 批次间等待 if batch_end len(items): print(批次完成等待3秒...) time.sleep(3) return self.stats6. 扩展应用与创意玩法6.1 更多应用场景这个批量生成脚本不仅限于学习卡片还可以用在很多地方1. 单词记忆卡片# 生成英语单词卡片 english_words [ {word: apple, meaning: 苹果, example: I eat an apple.}, {word: book, meaning: 书, example: I read a book.}, # ...更多单词 ] for item in english_words: prompt fPixel Art {item[word]}, simple, educational flash card # 生成图片后可以用PIL添加文字说明2. 数学学习材料# 生成数字和形状 math_items [ {type: number, value: 1, prompt: number 1, bold, pixel art}, {type: shape, value: circle, prompt: red circle, pixel art}, {type: shape, value: square, prompt: blue square, pixel art}, # ...更多数学元素 ]3. 故事插图生成# 为故事生成插图 story_scenes [ {scene: forest, prompt: Pixel Art enchanted forest, magical, fairy tale}, {scene: castle, prompt: Pixel Art medieval castle, fantasy, detailed}, {scene: dragon, prompt: Pixel Art friendly dragon, cartoon style}, # ...更多场景 ]6.2 图片后处理生成图片后我们还可以用PIL库进行一些简单的后处理from PIL import Image, ImageDraw, ImageFont def add_text_to_card(image_path: str, text: str, output_path: str): 在图片下方添加文字 # 打开图片 img Image.open(image_path) # 创建新画布原图高度50像素给文字 new_height img.height 50 new_img Image.new(RGB, (img.width, new_height), colorwhite) # 粘贴原图 new_img.paste(img, (0, 0)) # 添加文字 try: # 尝试使用系统字体 font ImageFont.truetype(arial.ttf, 24) except: # 回退到默认字体 font ImageFont.load_default() draw ImageDraw.Draw(new_img) # 计算文字位置居中 text_bbox draw.textbbox((0, 0), text, fontfont) text_width text_bbox[2] - text_bbox[0] text_height text_bbox[3] - text_bbox[1] x (img.width - text_width) // 2 y img.height (50 - text_height) // 2 draw.text((x, y), text, fontfont, fillblack) # 保存 new_img.save(output_path) print(f已添加文字: {text}) # 使用示例 add_text_to_card(pixel_art_cards/animal_cat.png, Cat - 猫, cat_with_text.png)6.3 生成PDF文档如果想把所有卡片整理成一个PDF文件方便打印from PIL import Image import os def create_pdf_from_cards(image_dir: str, output_pdf: str, cards_per_page: tuple (2, 2)): 将多张卡片合并成PDF # 获取所有图片 image_files [f for f in os.listdir(image_dir) if f.endswith(.png)] image_files.sort() # 按文件名排序 if not image_files: print(没有找到图片文件) return # 每页的卡片数量 cols, rows cards_per_page cards_per_page_count cols * rows # 计算每张卡片的大小假设所有图片尺寸相同 sample_img Image.open(os.path.join(image_dir, image_files[0])) card_width, card_height sample_img.size # 计算页面大小留一些边距 margin 20 page_width card_width * cols margin * (cols 1) page_height card_height * rows margin * (rows 1) # 创建PDF from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas from reportlab.lib.utils import ImageReader c canvas.Canvas(output_pdf, pagesizeletter) # 计算缩放比例以适应页面 page_actual_width, page_actual_height letter scale_x page_actual_width / page_width scale_y page_actual_height / page_height scale min(scale_x, scale_y) # 重新计算位置 scaled_card_width card_width * scale scaled_card_height card_height * scale scaled_margin margin * scale # 开始布局 for page_num in range(0, len(image_files), cards_per_page_count): # 每页的图片 page_images image_files[page_num:page_num cards_per_page_count] for i, img_file in enumerate(page_images): row i // cols col i % cols x scaled_margin col * (scaled_card_width scaled_margin) y page_actual_height - scaled_margin - (row 1) * scaled_card_height img_path os.path.join(image_dir, img_file) c.drawImage(ImageReader(img_path), x, y, scaled_card_width, scaled_card_height) # 添加新页面 c.showPage() c.save() print(fPDF已生成: {output_pdf}) # 使用示例 create_pdf_from_cards(pixel_art_cards, learning_cards.pdf, cards_per_page(2, 3))7. 总结与建议7.1 项目总结通过这个项目我们实现了一个完整的像素风学习卡片批量生成方案。整个过程可以分为几个关键步骤环境部署用Docker一键部署Qwen Pixel Art服务API调用通过Python脚本调用生成接口批量处理自动遍历单词列表生成对应图片后处理添加文字、生成PDF等增强功能这个方案有几个明显优势效率高一次可以生成几十上百张卡片风格统一通过固定参数保证所有图片风格一致可定制可以根据需要调整提示词和参数易扩展可以轻松扩展到其他应用场景7.2 实用建议在实际使用中我总结了一些实用建议1. 提示词编写技巧保持简洁明确像素艺术不适合太复杂的描述使用具体的颜色描述如bright red apple而不是red fruit添加风格限定词如simple background, cartoon style对于教育类内容可以加educational, learning material等关键词2. 参数设置经验开始可以用默认参数然后根据效果微调同类别的图片使用相同的seed值保持一致性简单物体用较少的steps20复杂物体用更多的steps25-30如果图片太复杂可以降低guidance_scale3. 批量处理注意事项控制请求频率避免给服务器太大压力添加错误重试机制提高成功率保存处理日志方便排查问题定期清理生成的图片避免占用太多空间4. 创意扩展思路结合其他AI工具如用文本生成模型创建单词描述添加多语言支持生成双语学习卡片创建主题系列如海洋生物、交通工具等制作互动学习应用如猜单词游戏7.3 资源与后续这个项目代码已经整理成完整的Python脚本你可以在自己的环境中直接使用。如果需要调整或扩展主要修改以下几个部分create_learning_cards函数定义你的单词列表和提示词模板optimize_parameters函数根据你的需求调整生成参数后处理函数添加你需要的图片处理功能像素艺术不仅适合学习卡片还可以用在游戏开发、UI设计、社交媒体内容创作等多个领域。Qwen Pixel Art提供了一个高质量的像素艺术生成方案结合Python的自动化能力可以创造出很多有趣的应用。希望这个实战案例能给你带来启发也欢迎分享你的创意应用获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Qwen Pixel Art实战案例:用Python脚本批量生成像素风学习卡片图集
Qwen Pixel Art实战案例用Python脚本批量生成像素风学习卡片图集1. 项目背景与价值最近在整理孩子的学习资料发现市面上的识字卡片、单词卡片要么风格单一要么价格昂贵。作为一个技术人我就在想能不能用AI自己生成一套既有个性化、又有教育意义的学习卡片正好遇到了Qwen Pixel Art这个镜像它基于Qwen-Image-2512模型专门针对像素艺术风格做了优化。像素风有几个天然优势风格统一、文件体积小、打印清晰而且有种复古的趣味性特别适合做儿童学习材料。更关键的是如果手动一张张生成效率太低。我需要的是一个批量解决方案——输入一个单词列表自动生成对应的像素风图片还能保持风格一致。这就是今天要分享的实战项目用Python脚本批量生成像素风学习卡片。2. 环境准备与快速部署2.1 镜像部署Qwen Pixel Art的部署非常简单一条Docker命令就能搞定docker run -d \ --name qwen-pixel-art \ --gpus all \ -p 7860:7860 \ -v /path/to/models:/root/ai-models \ qwen-pixel-art:latest这里有几个关键点需要注意--gpus all确保使用GPU加速生成速度会快很多-p 7860:7860把容器的7860端口映射到本地-v /path/to/models:/root/ai-models建议挂载一个本地目录存放模型避免重复下载首次启动需要耐心等待3-5分钟因为模型需要加载到内存中。你可以通过健康检查接口查看状态curl http://localhost:7860/health看到返回{status:healthy}就说明服务已经就绪了。2.2 服务访问部署完成后你有三种方式使用这个服务访问方式地址主要用途Web界面http://localhost:7860手动测试和调试API文档http://localhost:7860/docs查看所有接口说明健康检查http://localhost:7860/health检查服务状态对于我们的批量生成项目主要使用API接口。但建议先通过Web界面熟悉一下基本操作。3. 像素艺术生成基础3.1 Web界面初体验打开 http://localhost:7860你会看到一个简洁的界面。最核心的就是中间的输入框这里输入你的描述系统会自动加上Pixel Art触发词。我试了几个简单的提示词一只可爱的猫 → 生成了经典的8-bit风格猫咪红色的苹果 → 像素化的苹果颜色很鲜艳学习字母A → 生成了带有字母A的像素图案界面右侧有一些参数可以调整图片尺寸默认512x512像素艺术通常不需要太大生成数量一次可以生成多张方便对比选择随机种子固定种子可以让生成结果可复现手动测试几次后我发现几个规律描述越具体生成效果越好像素艺术适合简洁、明确的主题颜色描述很重要像素风对色彩对比度要求高3.2 API接口详解批量生成的关键在于API调用。打开 http://localhost:7860/docs找到/generate接口import requests import json # 基础请求示例 url http://localhost:7860/generate headers {Content-Type: application/json} data { prompt: 一只蓝色的鸟, # 你的描述 negative_prompt: , # 不希望出现的内容 width: 512, # 图片宽度 height: 512, # 图片高度 num_images: 1, # 生成数量 seed: -1, # 随机种子-1表示随机 steps: 20, # 生成步数 guidance_scale: 7.5 # 引导系数 } response requests.post(url, headersheaders, datajson.dumps(data)) result response.json() if result.get(status) success: # 返回的是base64编码的图片 image_data result[images][0] # 需要解码保存 import base64 from PIL import Image import io img_data base64.b64decode(image_data) img Image.open(io.BytesIO(img_data)) img.save(blue_bird.png)这个接口返回的是base64编码的图片数据我们需要解码后才能保存。后面会封装成更方便的函数。4. 批量生成脚本开发4.1 脚本整体设计我的需求很明确输入一个单词列表为每个单词生成对应的像素艺术图片并且要保证风格一致。脚本需要解决几个问题批量处理自动遍历所有单词提示词优化为不同单词生成合适的描述错误处理某个单词生成失败不影响其他进度显示知道处理到哪了结果整理生成的文件要规范命名先来看看完整的脚本框架import requests import json import base64 import os from PIL import Image import io import time from typing import List, Dict, Optional class PixelArtBatchGenerator: 像素艺术批量生成器 def __init__(self, api_url: str http://localhost:7860): self.api_url api_url.rstrip(/) self.generate_url f{self.api_url}/generate # 创建输出目录 self.output_dir pixel_art_cards os.makedirs(self.output_dir, exist_okTrue) # 统计信息 self.stats { total: 0, success: 0, failed: 0, failed_items: [] } def generate_single(self, prompt: str, filename: str, **kwargs) - bool: 生成单张图片 # 具体实现后面详细讲 pass def batch_generate(self, items: List[Dict]) - Dict: 批量生成主函数 self.stats[total] len(items) for i, item in enumerate(items, 1): print(f[{i}/{len(items)}] 处理: {item[word]}) success self.generate_single( promptitem[prompt], filenameitem[filename], **item.get(params, {}) ) if success: self.stats[success] 1 else: self.stats[failed] 1 self.stats[failed_items].append(item[word]) # 避免请求过快 time.sleep(1) return self.stats def save_image(self, image_data: str, filename: str) - bool: 保存base64图片到文件 try: # 移除base64前缀如果有 if , in image_data: image_data image_data.split(,)[1] img_data base64.b64decode(image_data) img Image.open(io.BytesIO(img_data)) # 确保是RGB模式 if img.mode ! RGB: img img.convert(RGB) save_path os.path.join(self.output_dir, filename) img.save(save_path, PNG) return True except Exception as e: print(f保存图片失败: {e}) return False这个类封装了所有核心功能接下来我们一步步实现。4.2 核心生成函数generate_single函数是核心负责调用API并处理结果def generate_single(self, prompt: str, filename: str, width: int 512, height: int 512, num_images: int 1, seed: int -1, steps: int 20, guidance_scale: float 7.5, negative_prompt: str ) - bool: 生成单张图片 # 构建请求数据 data { prompt: fPixel Art, {prompt}, # 自动添加触发词 negative_prompt: negative_prompt, width: width, height: height, num_images: num_images, seed: seed, steps: steps, guidance_scale: guidance_scale } try: # 发送请求 headers {Content-Type: application/json} response requests.post( self.generate_url, headersheaders, datajson.dumps(data), timeout60 # 60秒超时 ) if response.status_code ! 200: print(fAPI请求失败: {response.status_code}) return False result response.json() if result.get(status) ! success: print(f生成失败: {result.get(message, 未知错误)}) return False # 保存图片 images result.get(images, []) if not images: print(未生成图片) return False return self.save_image(images[0], filename) except requests.exceptions.Timeout: print(请求超时) return False except requests.exceptions.ConnectionError: print(连接失败请检查服务是否运行) return False except Exception as e: print(f未知错误: {e}) return False这里有几个关键点自动添加触发词在prompt前自动加上Pixel Art,确保风格一致超时设置设置60秒超时避免卡死错误处理捕获各种异常保证单个失败不影响整体结果验证检查API返回的状态和图片数据4.3 提示词优化策略直接输入单词如apple效果可能不理想。我们需要为不同类别的单词设计不同的提示词模板def create_learning_cards(self, word_list: List[str], category: str animal) - List[Dict]: 创建学习卡片数据 # 不同类别的提示词模板 templates { animal: cute {word}, pixel art, simple background, educational card, fruit: fresh {word}, bright colors, pixel art, clean background, vehicle: {word}, side view, pixel art, simple design, color: {word} color square, solid color, pixel art, learning card, number: number {word}, bold, pixel art, educational material, letter: letter {word}, uppercase, pixel art, learning alphabet } # 默认模板 template templates.get(category, Pixel Art {word}, simple, educational) items [] for word in word_list: # 生成提示词 prompt template.format(wordword) # 生成文件名移除特殊字符 safe_word .join(c for c in word if c.isalnum() or c in _-).strip() filename f{category}_{safe_word}.png # 根据不同类别调整参数 params { width: 512, height: 512, seed: 42 # 固定种子保持风格一致 } # 特殊调整 if category color: params[guidance_scale] 5.0 # 颜色类需要更强的引导 elif category letter: params[steps] 25 # 字母需要更多步骤保证清晰度 items.append({ word: word, prompt: prompt, filename: filename, params: params }) return items这样当我们生成动物类单词时会自动使用动物专用的模板生成水果类时用水果模板效果会好很多。4.4 完整使用示例把上面的代码组合起来就是一个完整的批量生成脚本def main(): 主函数示例 # 初始化生成器 generator PixelArtBatchGenerator(api_urlhttp://localhost:7860) # 定义要生成的单词列表 animal_words [cat, dog, bird, fish, rabbit] fruit_words [apple, banana, orange, grape, watermelon] color_words [red, blue, green, yellow, purple] # 创建不同类别的学习卡片 all_items [] # 动物类 animal_items generator.create_learning_cards(animal_words, animal) all_items.extend(animal_items) # 水果类 fruit_items generator.create_learning_cards(fruit_words, fruit) all_items.extend(fruit_items) # 颜色类 color_items generator.create_learning_cards(color_words, color) all_items.extend(color_items) print(f开始批量生成共{len(all_items)}张卡片...) print(- * 50) # 开始批量生成 stats generator.batch_generate(all_items) # 打印统计结果 print(\n * 50) print(生成完成) print(f总计: {stats[total]} 张) print(f成功: {stats[success]} 张) print(f失败: {stats[failed]} 张) if stats[failed] 0: print(f失败的单词: {, .join(stats[failed_items])}) print(f图片保存在: {os.path.abspath(generator.output_dir)}) if __name__ __main__: main()运行这个脚本就会自动为15个单词生成对应的像素风学习卡片并按类别保存到pixel_art_cards目录中。5. 实际效果与优化5.1 生成效果展示我实际运行了这个脚本生成了三组学习卡片动物组效果cat.png生成了一个可爱的像素猫轮廓清晰颜色鲜明dog.png狗狗的像素形象耳朵和尾巴的特征很明显bird.png蓝色的小鸟翅膀细节处理得不错水果组效果apple.png红色的苹果有高光效果看起来很有质感banana.png黄色的香蕉弯曲的形状很准确orange.png橙子的切片效果能看到果肉纹理颜色组效果red.png纯红色的方块边缘整齐blue.png天蓝色方块颜色很正green.png草绿色饱和度适中整体来看像素风格非常统一所有图片都是512x512分辨率背景简洁主体突出非常适合打印成学习卡片。5.2 参数调优经验在测试过程中我总结了一些参数调整的经验固定种子很重要设置seed42可以让同类别图片风格保持一致引导系数调整一般物体7.5默认颜色/形状5.0-6.0避免过度复杂细节多的物体8.0-9.0增强细节生成步数简单物体20步足够文字/字母25-30步保证清晰度负面提示词可以加入blurry, noisy, complicated background来避免模糊和复杂背景这里是一个参数调优的示例def optimize_parameters(category: str, word: str) - Dict: 根据类别优化参数 base_params { width: 512, height: 512, num_images: 1, steps: 20, guidance_scale: 7.5, seed: 42 } # 根据不同类别调整 if category letter: return { **base_params, steps: 25, guidance_scale: 8.0, negative_prompt: blurry, distorted, unreadable } elif category color: return { **base_params, guidance_scale: 5.0, negative_prompt: pattern, texture, gradient } elif category complex_object: # 复杂物体 return { **base_params, steps: 30, guidance_scale: 9.0 } else: return base_params5.3 批量处理技巧当需要生成大量图片时有几个技巧可以提高效率分批处理不要一次性提交所有请求分批进行错误重试对于失败的请求可以自动重试进度保存记录处理进度避免重复生成并发控制如果需要更快可以使用多线程但要小心服务器压力这里是一个增强版的批量处理函数def batch_generate_with_retry(self, items: List[Dict], batch_size: int 5, max_retries: int 3) - Dict: 带重试的批量生成 self.stats[total] len(items) # 分批处理 for batch_start in range(0, len(items), batch_size): batch_end min(batch_start batch_size, len(items)) batch items[batch_start:batch_end] print(f处理批次 {batch_start//batch_size 1}/{(len(items)batch_size-1)//batch_size}) for item in batch: word item[word] retry_count 0 while retry_count max_retries: print(f 生成: {word} (尝试 {retry_count1}/{max_retries})) success self.generate_single( promptitem[prompt], filenameitem[filename], **item.get(params, {}) ) if success: self.stats[success] 1 break else: retry_count 1 if retry_count max_retries: print(f 等待重试...) time.sleep(2) # 等待2秒再重试 if not success: self.stats[failed] 1 self.stats[failed_items].append(word) print(f ❌ {word} 生成失败) # 批次间等待 if batch_end len(items): print(批次完成等待3秒...) time.sleep(3) return self.stats6. 扩展应用与创意玩法6.1 更多应用场景这个批量生成脚本不仅限于学习卡片还可以用在很多地方1. 单词记忆卡片# 生成英语单词卡片 english_words [ {word: apple, meaning: 苹果, example: I eat an apple.}, {word: book, meaning: 书, example: I read a book.}, # ...更多单词 ] for item in english_words: prompt fPixel Art {item[word]}, simple, educational flash card # 生成图片后可以用PIL添加文字说明2. 数学学习材料# 生成数字和形状 math_items [ {type: number, value: 1, prompt: number 1, bold, pixel art}, {type: shape, value: circle, prompt: red circle, pixel art}, {type: shape, value: square, prompt: blue square, pixel art}, # ...更多数学元素 ]3. 故事插图生成# 为故事生成插图 story_scenes [ {scene: forest, prompt: Pixel Art enchanted forest, magical, fairy tale}, {scene: castle, prompt: Pixel Art medieval castle, fantasy, detailed}, {scene: dragon, prompt: Pixel Art friendly dragon, cartoon style}, # ...更多场景 ]6.2 图片后处理生成图片后我们还可以用PIL库进行一些简单的后处理from PIL import Image, ImageDraw, ImageFont def add_text_to_card(image_path: str, text: str, output_path: str): 在图片下方添加文字 # 打开图片 img Image.open(image_path) # 创建新画布原图高度50像素给文字 new_height img.height 50 new_img Image.new(RGB, (img.width, new_height), colorwhite) # 粘贴原图 new_img.paste(img, (0, 0)) # 添加文字 try: # 尝试使用系统字体 font ImageFont.truetype(arial.ttf, 24) except: # 回退到默认字体 font ImageFont.load_default() draw ImageDraw.Draw(new_img) # 计算文字位置居中 text_bbox draw.textbbox((0, 0), text, fontfont) text_width text_bbox[2] - text_bbox[0] text_height text_bbox[3] - text_bbox[1] x (img.width - text_width) // 2 y img.height (50 - text_height) // 2 draw.text((x, y), text, fontfont, fillblack) # 保存 new_img.save(output_path) print(f已添加文字: {text}) # 使用示例 add_text_to_card(pixel_art_cards/animal_cat.png, Cat - 猫, cat_with_text.png)6.3 生成PDF文档如果想把所有卡片整理成一个PDF文件方便打印from PIL import Image import os def create_pdf_from_cards(image_dir: str, output_pdf: str, cards_per_page: tuple (2, 2)): 将多张卡片合并成PDF # 获取所有图片 image_files [f for f in os.listdir(image_dir) if f.endswith(.png)] image_files.sort() # 按文件名排序 if not image_files: print(没有找到图片文件) return # 每页的卡片数量 cols, rows cards_per_page cards_per_page_count cols * rows # 计算每张卡片的大小假设所有图片尺寸相同 sample_img Image.open(os.path.join(image_dir, image_files[0])) card_width, card_height sample_img.size # 计算页面大小留一些边距 margin 20 page_width card_width * cols margin * (cols 1) page_height card_height * rows margin * (rows 1) # 创建PDF from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas from reportlab.lib.utils import ImageReader c canvas.Canvas(output_pdf, pagesizeletter) # 计算缩放比例以适应页面 page_actual_width, page_actual_height letter scale_x page_actual_width / page_width scale_y page_actual_height / page_height scale min(scale_x, scale_y) # 重新计算位置 scaled_card_width card_width * scale scaled_card_height card_height * scale scaled_margin margin * scale # 开始布局 for page_num in range(0, len(image_files), cards_per_page_count): # 每页的图片 page_images image_files[page_num:page_num cards_per_page_count] for i, img_file in enumerate(page_images): row i // cols col i % cols x scaled_margin col * (scaled_card_width scaled_margin) y page_actual_height - scaled_margin - (row 1) * scaled_card_height img_path os.path.join(image_dir, img_file) c.drawImage(ImageReader(img_path), x, y, scaled_card_width, scaled_card_height) # 添加新页面 c.showPage() c.save() print(fPDF已生成: {output_pdf}) # 使用示例 create_pdf_from_cards(pixel_art_cards, learning_cards.pdf, cards_per_page(2, 3))7. 总结与建议7.1 项目总结通过这个项目我们实现了一个完整的像素风学习卡片批量生成方案。整个过程可以分为几个关键步骤环境部署用Docker一键部署Qwen Pixel Art服务API调用通过Python脚本调用生成接口批量处理自动遍历单词列表生成对应图片后处理添加文字、生成PDF等增强功能这个方案有几个明显优势效率高一次可以生成几十上百张卡片风格统一通过固定参数保证所有图片风格一致可定制可以根据需要调整提示词和参数易扩展可以轻松扩展到其他应用场景7.2 实用建议在实际使用中我总结了一些实用建议1. 提示词编写技巧保持简洁明确像素艺术不适合太复杂的描述使用具体的颜色描述如bright red apple而不是red fruit添加风格限定词如simple background, cartoon style对于教育类内容可以加educational, learning material等关键词2. 参数设置经验开始可以用默认参数然后根据效果微调同类别的图片使用相同的seed值保持一致性简单物体用较少的steps20复杂物体用更多的steps25-30如果图片太复杂可以降低guidance_scale3. 批量处理注意事项控制请求频率避免给服务器太大压力添加错误重试机制提高成功率保存处理日志方便排查问题定期清理生成的图片避免占用太多空间4. 创意扩展思路结合其他AI工具如用文本生成模型创建单词描述添加多语言支持生成双语学习卡片创建主题系列如海洋生物、交通工具等制作互动学习应用如猜单词游戏7.3 资源与后续这个项目代码已经整理成完整的Python脚本你可以在自己的环境中直接使用。如果需要调整或扩展主要修改以下几个部分create_learning_cards函数定义你的单词列表和提示词模板optimize_parameters函数根据你的需求调整生成参数后处理函数添加你需要的图片处理功能像素艺术不仅适合学习卡片还可以用在游戏开发、UI设计、社交媒体内容创作等多个领域。Qwen Pixel Art提供了一个高质量的像素艺术生成方案结合Python的自动化能力可以创造出很多有趣的应用。希望这个实战案例能给你带来启发也欢迎分享你的创意应用获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。