基于stable-diffusion-webui的搭建与使用
Stable diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。具体来说,得益于Stability AI的计算资源支持和LAION的数据资源支持,Stable Diffusion在LAION-5B的一个子集上训练了一个Latent Diffusion Models,该模型专门用于文图生成
简单来说就是支持你输入文字描述,生成一张图片给你,本文主讲Liunx的上的使用:
首先打开 Stable diffusion WebUI项目地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui 一个基于Gradio库的Web封装了Stable diffusion 然后你需要一台Liunx计算机,
当然配置要求较高:16GB运行内存与具有至少6GB以上的Nvidia显卡.
这里测试环境为:(Ubantu)
服务器上得先安装git,才能拉取git上的项目包:
sudo apt install -y git
新建一个目录作为主目录cd进去并执行拉取项目:(当然需要服务器配置科学上网)
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
然后这个是一个基于python的项目所以还得有python环境且版本不低于3.10.6,
这里使用Anconda进行创建并激活
conda create -n py python=3.10.6 //创建环境
conda activate py //激活环境
由于Stable Diffusion需要用到torch核心模块,然而pytorch对显卡的cuda版本有限制要求,程序默认安装pytorch2.0版本,我们需要根据显卡的cuda版本进行修改:
首先通过以下指令查询cuda版本是多少
nvidia-smi
查询到版本10.2,所以我们就需要去寻找对应可使用的最新版本https://download.pytorch.org/whl/torch_stable.html
开启程序的时候会默认开始安装依赖,所以我们需要修改launch.py启动文件,让它安装我们需要的版本
打开launch.py文件来到这个部分
安装对应版本torch
torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.12.1 torchvision==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu102")
还有配置git加速镜像,因为有的仓库即使你科学上网都速度慢的很
git+https://ghdl.feizhuqwq.cf/https://github.com/mlfoundations/open_clip.git@bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b //加https://ghdl.feizhuqwq.cf/前缀
完整需要配置的项
torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.12.1 torchvision==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu102")
requirements_file = os.environ.get('REQS_FILE', "requirements_versions.txt")
xformers_package = os.environ.get('XFORMERS_PACKAGE', 'xformers==0.0.17')
gfpgan_package = os.environ.get('GFPGAN_PACKAGE', "git+https://ghdl.feizhuqwq.cf/https://github.com/TencentARC/GFPGAN.git@8d2447a2d918f8eba5a4a01463fd48e45126a379")
clip_package = os.environ.get('CLIP_PACKAGE', "git+https://ghdl.feizhuqwq.cf/https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1")
openclip_package = os.environ.get('OPENCLIP_PACKAGE', "git+https://ghdl.feizhuqwq.cf/https://github.com/mlfoundations/open_clip.git@bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b")
stable_diffusion_repo = os.environ.get('STABLE_DIFFUSION_REPO', "https://ghdl.feizhuqwq.cf/https://github.com/Stability-AI/stablediffusion.git")
taming_transformers_repo = os.environ.get('TAMING_TRANSFORMERS_REPO', "https://ghdl.feizhuqwq.cf/https://github.com/CompVis/taming-transformers.git")
k_diffusion_repo = os.environ.get('K_DIFFUSION_REPO', 'https://ghdl.feizhuqwq.cf/https://github.com/crowsonkb/k-diffusion.git')
codeformer_repo = os.environ.get('CODEFORMER_REPO', 'https://ghdl.feizhuqwq.cf/https://github.com/sczhou/CodeFormer.git')
blip_repo = os.environ.get('BLIP_REPO', 'https://ghdl.feizhuqwq.cf/https://github.com/salesforce/BLIP.git')
stable_diffusion_commit_hash = os.environ.get('STABLE_DIFFUSION_COMMIT_HASH', "cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf")
taming_transformers_commit_hash = os.environ.get('TAMING_TRANSFORMERS_COMMIT_HASH', "24268930bf1dce879235a7fddd0b2355b84d7ea6")
k_diffusion_commit_hash = os.environ.get('K_DIFFUSION_COMMIT_HASH', "5b3af030dd83e0297272d861c19477735d0317ec")
codeformer_commit_hash = os.environ.get('CODEFORMER_COMMIT_HASH', "c5b4593074ba6214284d6acd5f1719b6c5d739af")
blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9")
再打开webui.py配置
配置这两个,否则还是会下载高版本,从而导致运行不了
expected_torch_version = "1.12.1"
expected_xformers_version = "0.0.17"
运行中可能会出现卡
Installing gfpgan
Installing open_clip
这是因为镜像问题导致速度慢,可以选择在github上直接寻找仓库并下载
解压并进行python build install安装,但是要注意,程序在运行的时候会创建venv虚拟环境,所以python解释器目录要选对
我们的路径是**/home/xxx/xx/StableDiffusion/stable-diffusion-webui/venv/bin/python**,
所以编译的时候应该是先cd进去目录,然后执行:
"/home/xxx/xx/StableDiffusion/stable-diffusion-webui/venv/bin/python" xxx build install
这样就不会出现卡死的情况
接下来我们需要下载模型文件
可以在以下网站免费下载
https://aituzhan.com/
http://www.liandange.com/models
下载完毕之后保存到这个位置
/xxx/xxx/xx/StableDiffusion/stable-diffusion-webui/models/Stable-diffusion
以上工作准备好后我们最终修改启动weibu.sh脚本
先给脚本赋予777权限,否则无法识别.sh脚本
vim编译器修改类型,因为模式是dos类型,我们需要:set ff=unix修改类型并保存
然后启动命令也要配置
nohup ./webui.sh --listen --api --port 9000 --enable-insecure-extension-access &
首先nohup启动信息不可见,
--listen改变主机为0.0.0.0方便防火墙映射,
--api开启自带的API请求接口,
--port设置启动访问端口,
--enable-insecure-extension-access关闭插件扩展安装限制
如果是没配nohup那么启动成功的信息应该是这样
当然我们修改过使用Url并不是上面这个
ps:端口需要Liunx防火墙进行开放映射才可以访问
如此就完成了Stable diffusion WebUI的安装启动,现在通过浏览器进入
界面默认英文可以下载插件进行汉化:https://baijiahao.baidu.com/s?id=1761750555164890926&wfr=spider&for=pc
也可以直接github下载插件存放到此处会自动加载
效果:
这里可以切换下载的模型,模型不同生成出来的图片风格也不同
让我们尝试文生图操作
生成的图片会输出保存在这个目录
/xxx/xxx/xxxStableDiffusion/stable-diffusion-webui/outputs/txt2img-images/xxx
至此,Stable diffusion WebUI搭建成功.
我们使用 --api 开启了API*可以在底部进入调试
有许多的API接口,我们选择文生图接口进行调试:
详情:
请求体里有一个关键字段prompt,这个字段是输入的文生图的提示词,响应给我们的图片是base64的格式,需要进行转码才可以查看,这里我们可以写一个python程序来使用接口.
import json
import base64
import uuid
import cv2
import requests
def post(url: str, datas: dict):
return requests.post(url, data=json.dumps(datas))
def save(b64_image: str, output_path: str):
with open(output_path, "wb") as image_file:
image_file.write(base64.b64decode(b64_image))
if __name__ == '__main__':
text = input('请输入提示词:')
print("构造中,请稍后...")
txt2img_url = 'http://x.x.x.x:9000/sdapi/v1/txt2img'
response = post(txt2img_url, {'prompt': text})
filename = str(uuid.uuid1()) + '.png'
b64 = response.json()['images'][0]
print("构造成功!")
print(b64)
print("转换中...")
save(b64, filename)
print("转换完毕!")
image = cv2.imread(filename)
cv2.imshow(filename, image)
cv2.waitKey(0)
post方法用来发送post请求
save方法用来接收base64数据进行转码输出图片
main方法首先控制台接收提示词,再由response参数进行配置发送获取响应信息
b64获取响应被转换为json对象并获取图片base64的base64数据
进行方法save转化后进行保存
使用OpenCV打开保存的图片进行显示
然后我们使用auto-py-to-exe包讲其打包成exe文件,注意这里只能在内网使用
接下来进行使用测试,打开程序进行使用
关闭图片,会同时关闭窗口.
当然模型目前只能手动在web页面切换
至此简单程序的实验成功.
Stable diffusion WebUI支持其他的功能
项目更新可以使用git pull获取
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。