【MomoTalk之Stable Diffusion】调用webui的文生图API

        上一篇博文里成功部署了webui,并且调配出了满意的文生图效果,那么接下来就是向未来的前端提供一个方法,允许随时通过webui生成图片。这就不得不用到webui的API了。

        根据webui官方仓库的Wiki,它已经提供了众多方法可供调用,其中就包括text2img文生图,且直接调用API可以充分设置各项参数,完美满足我们的需求。

带参数启动webui

        根据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

        官方在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,运行代码,可见在项目文件夹的指定位置果然得到了所需的图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值