赞
踩
上一篇博文里成功部署了webui,并且调配出了满意的文生图效果,那么接下来就是向未来的前端提供一个方法,允许随时通过webui生成图片。这就不得不用到webui的API了。
根据webui官方仓库的Wiki,它已经提供了众多方法可供调用,其中就包括text2img文生图,且直接调用API可以充分设置各项参数,完美满足我们的需求。
根据wiki的指引,我在终端输入了带API启动的命令:
webui-user.bat --api
接着打开http://127.0.0.1:7860/docs/,也即官方提供的API列表,然而却并没有找到上图的两个API。几经摸索,我在issue里找到了解法,编辑webui-user.bat文件,修改其中的启动参数行:
set COMMANDLINE_ARGS=--api
在这里加入“--api”这一参数,并正常启动webui-user.bat,这才终于见到了text2imgapi。
官方在API文档里给出了许多可以直接调用的接口,但我选择采用第三方仓库sdwebuiapi来调用,这个库对官方的接口加以封装,使得调用起来更加简单粗暴了。这个库可以直接通过pip方便地安装,而Git仓库里也给出了使用的示例,用起来还是很轻松的。
工具齐全了,那就该敲点代码实际应用了。下面的代码提供了一个简单的方法,预先写死生图的参数(因为没有改变的需求),传入从GLM处提取到的角色表情描述文本,将这几段文本提示词插入prompt当中,接着调用API进行生图,最后把图片存储到本地并返回文件位置,以供前端后续使用。
- import webuiapi
-
- def draw_expression(charactor_expression):
- # 本地部署的默认api
- api = webuiapi.WebUIApi(host = '127.0.0.1',
- port = 7860,
- sampler = 'Euler a',
- steps = 20)
-
- # 调用api提供的txt2img接口,在通用prompt中插入从GLM处获取的表情描述
- prompt = "(masterpiece, best quality:1), 1girl, solo, arisu, halo,"
- for e in charactor_expression:
- prompt += e + ','
- prompt += "white background <lora:BlueSD:1>, <lora:tendouAliceV1:1>"
- result1 = api.txt2img(prompt = prompt,
- negative_prompt = "noisy, blurry, grainy,text, graphite, abstract, glitch, deformed, mutated, ugly, disfigured, (realistic, lip, nose, tooth, rouge, lipstick, eyeshadow:1.0), low contrast",
- seed = -1,
- styles = ["animate"],
- cfg_scale = 8
- )
-
- # result1.image.show()
- # 存储输出的图片,并返回文件名
- if len(charactor_expression) == 0:
- save_file_name = './outputs/output_no_expression'
- else:
- save_file_name = './outputs/output'
- for i in charactor_expression:
- save_file_name += '_' + i.replace(" ", "_")
- save_file_name += '.png'
- result1.image.save(save_file_name)
- return save_file_name
-
- test_expression = ['Greet happily', 'Rub your hands']
- img_file_Location = draw_expression(charactor_expression = test_expression)
- print('output image saved to ' + img_file_Location)
万事俱备,启动webui,运行代码,可见在项目文件夹的指定位置果然得到了所需的图片。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。