文章目录
1、背景介绍
在此文中配置好了树莓派4B上的Stable Diffusion运行环境,但是每次运行都必须要输入一串指令,人机交互不够友好,因此本文利用Tkinter库进行简单的界面开发,能够具有更好的交互界面,如下图所示:
界面主要包括正向提示词、反向提示词、生成步数、输出文件名、运行状态监视框、开始生成按钮以及停止生成按钮几部分组成。具体功能及说明如下:
- 正向提示词输入框:框中可以输入要生成的内容;
- 反向提示词输入框:框中输入不希望生成的内容或者质量控制词;
- 生成步数:代表Stable Diffusion运行几步,一般步数越大生成的内容越清晰,但是消耗的时间也越长,文末会放出几张对比图;
- 输出文件名:输出图像的名称,后缀是“.png”。
- 运行状态监视框:显示运行的状态以及当前执行的步骤。
- 开始生成按钮:获取正向提示词、反向提示词、生成步数以及输出文件名,调用编译完成的Stable Diffusion可执行文件进行图像生成。
- 停止生成按钮:终止当前生成的过程,以便进行下次生成。
2、程序设计基本思路介绍
2.1 Tkinter界面设计框架
由于本文仅仅为了提高人机交互的便捷性而设计的简单界面,并不涉及复杂的功能需求,因此选择Tkinter框架进行界面开发。Tkinter是Python的标准 GUI 库,基于 Tk GUI 工具包开发。其特点如下:
- 轻量级:代码体积小,内存占用低,适合资源受限环境(如树莓派)。
- 原生集成:无需额外安装(Python 自带)。
- 跨平台:支持 Windows、Linux、macOS,但界面风格在不同平台上可能不一致。
- 简单易用:语法简洁,适合快速开发小型 GUI 应用。
- 功能局限:控件种类有限,缺乏现代图形效果(如动画、3D 渲染)
2.2 程序设计思路
由于Stable Diffusion是编译的可执行文件,需要通过如下格式进行调用(由于本文只采用了Stable Diffusion 1.5的模型,所以并没有设计模型选择功能,而是使用固定的模型):
./sd --models-path <模型位置> --output <输出文件名>.png --prompt <正向提示词> --neg-prompt <反向提示词> --steps <生成步数> --rpi
根据上述格式要求,本文采用Subprocess调用Linux终端实现指令的运行,同时将指令的输出实时显示在运行状态监视框中。
3、程序设计
3.1 完整代码
完整代码如下:
class stableDiffusion:
def __init__(self):
# 创建主窗
self.root = tk.Tk()
self.root.title("Stable Diffusion 生成器")
self.root.resizable(0, 0)
self.model_path = "/home/pi/stable/OnnxStream/src/build/stable-diffusion-1.5-onnxstream"
self.run_Thr