|
|
import os
|
|
|
|
|
|
from Util.CommonUtil import *
|
|
|
|
|
|
# API地址
|
|
|
url = "http://192.168.1.21:7860"
|
|
|
|
|
|
|
|
|
# 图生图函数
|
|
|
def img2img(url, model_id, prompt_id, input_source_img, output_file):
|
|
|
# JSON文件模板
|
|
|
templet_file = r'../JSON/' + str(model_id) + '_' + str(prompt_id) + '.json'
|
|
|
# 模型图片
|
|
|
input_refer_img = '../Image/' + str(model_id) + '/' + str(prompt_id) + '.jpg'
|
|
|
|
|
|
if not os.path.exists(input_refer_img):
|
|
|
input_refer_img = '../Image/' + str(model_id) + '/' + str(prompt_id) + '.png'
|
|
|
|
|
|
# 读取JSON文件
|
|
|
with open(templet_file, 'r', encoding='utf-8') as file:
|
|
|
payload = json.load(file)
|
|
|
|
|
|
# 用户输入的图片
|
|
|
source_img = encode_image(input_source_img)
|
|
|
# 模型固定的参考图片
|
|
|
refer_img = encode_image(input_refer_img)
|
|
|
|
|
|
# 在ControlNet的第一个图片中使用用户输入的图片,用此图片的人脸进行换脸操作
|
|
|
payload["alwayson_scripts"]["ControlNet"]["args"][0]["input_image"] = source_img
|
|
|
# 图生图,风格参考图是输入
|
|
|
payload["init_images"] = [refer_img]
|
|
|
payload["alwayson_scripts"]["ControlNet"]["args"][1]["input_image"] = refer_img
|
|
|
# 调用SD服务
|
|
|
response = requests.post(url=f'{url}/sdapi/v1/img2img', json=payload)
|
|
|
if response.status_code != 200:
|
|
|
print(response.text)
|
|
|
exit(0)
|
|
|
r = response.json()
|
|
|
# 保存图片
|
|
|
save_encoded_image(response.json()['images'][0], output_file)
|
|
|
|
|
|
|
|
|
# 用户输入的源图
|
|
|
input_source_img = '../Image/1ae93e2587822c291362abf9504cb49ec.jpeg'
|
|
|
# 输出图片
|
|
|
output_file = "../Out/Result.png"
|
|
|
# 调用图生图
|
|
|
img2img(url, 12, 1, input_source_img, output_file)
|