【MomoTalk之Stable Diffusion】新角色登场

上一篇博文里实现了调用API来生成爱丽丝的图片,但这还不够,为了满足项目需求,还需要让程序能够自由调用多个角色的LoRA,所以这次,新角色三月七堂堂登场。

优化项目文件结构

在上一篇博文中,由于尚在测试,只是完成了一个简单的py文件,而最终对接时需要提供方法到客户端,因此我把调用api相关的功能全都封装到了子文件夹 ./api 下。

这时候在 call.py 中就可以方便地调用api了,为了接下来允许自由选择人物生图,我提前给生图方法加上了角色名的参数,从这里传参就能立马得到测试结果。

import api

characters = ["Arisu", "March7th_sticker", "March7th"]
test_expression = ['Happily', 'Rub your hands']
img_file_Location = api.SD_draw_expression(character_name = characters[0],character_expression = test_expression)
print('output image saved to ' + img_file_Location)

Prompt的准备

由于不同的角色会有不同的Prompt,我决定采用Json文件来存储每个角色对应的Prompt,在生图过程中,把角色名和json文件进行比对,就可以获取到目标Prompt。

civitai上查找三月七的LoRA,找到了普通版和Q版两个风格,不过这些LoRA当然天生和BA的画风不太协调,所以到时候写Prompt我会把BA风格的LoRA一并用上。

接下来我分别把他们写进了json,只要完善好新的生图方法就可以自由地调试:

{
    "Arisu":[
        {"prompt1": "(masterpiece, best quality:1), 1girl, solo, arisu, halo,"},
        {"prompt2": "white background <lora:BlueSD:1>, <lora:tendouAliceV1:1>"}
    ],
    "March7th_sticker":[
        {"prompt1": "(masterpiece, best quality:1), 1girl, solo, pink_hair, chibi, pink_eyes, blue_eyes, multicolored_eyes, earrings,"},
        {"prompt2": "white background <lora:BlueSD:0.8>, <lora:March_7th_Emote:1>"}
    ],
    "March7th":[
        {"prompt1": "(masterpiece, best quality:1), 1girl, solo, march7th, short hair, multicolored_eyes, pink hair, bangs, blue_eyes, long locks, ribbon earrings, shirt, skirt, choker, jacket,"},
        {"prompt2": "white background <lora:BlueSD:1>, <lora:march7th:0.8>"}
    ]
}

至于为什么每个角色有两段Prompt,前半段是角色的描述,后半段是画面背景和LoRA,而中间则是用于插入角色的表情和动作,主要是为了规范。

读取Json

用Python读取Json的方法很简单,这里不赘述,直接上代码:

import json
import os

def get_character_data(character_name):
    # 从Json文件中找到对应角色,从而设置prompt
    path = os.path.dirname(__file__)
    with open(os.path.join(path, 'character_prompts.json'), 'r', encoding='utf8') as character_file:
        character_data = json.load(character_file)
        prompts = []
        prompts.append(character_data[character_name][0]['prompt1'])
        prompts.append(character_data[character_name][1]['prompt2'])
        return prompts

这个方法可以从同级目录下读取刚才的Json文件,并且根据传入的角色名获得该角色对应的两段Prompt,最后以数组形式返回给主方法,而主方法则只需要略微修改就能成功生图。

这一次的工作就以生成的图片告终了。

那么,两种风格的三月七,你更喜欢哪一种呢?欢迎投票选出你的想法[doge]

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值