我正在编写一个脚本来通过 API 生成 Controlnet Canny 地图图像。
我注意到从 API 返回的图像尺寸小于原始图像尺寸。
原图尺寸:
(719, 899)
(712, 896)
但是,由于我用payload的“宽度”和“高度”设置了原始图像大小,所以我不明白为什么会出现这种结果。
我在这个问题上花了几天时间,没有任何好的结果。
有谁知道解决办法吗
这句话是机器翻译的,所以如果看起来不自然,我很抱歉。
image = Image.open(image_path)
with io.BytesIO() as img_bytes:
image.save(img_bytes, format='PNG')
img_b64 = base64.b64encode(img_bytes.getvalue()).decode()
payload = {
"steps": 1,
"sampler_name": "Euler a",
"denoising_strength": 0,
"restore_faces": False,
"resize_mode": 0,
"init_images": [img_b64],
"width": image.width,
"height": image.height,
"alwayson_scripts": {"ControlNet": {"args": [
{
"control_mode": 0,
"enabled": True,
"guidance_end": 1,
"guidance_start": 0,
"pixel_perfect": False,
"processor_res": 512,
"resize_mode": 1,
"threshold_a": 100,
"threshold_b": 135,
"weight": 1,
"module": "canny",
"model": "control_canny-fp16 [e3fe7712]",
}
]}}
}
response = requests.post(url=f'{url}/sdapi/v1/img2img', json=payload)
r = response.json()
map_image = Image.open(io.BytesIO(base64.b64decode(r['images'][1].split(",", 1)[0])))
root, ext = os.path.splitext(image_path)
basename = os.path.basename(root)
save_path = os.path.join(
tools_dir, "canny_dst", basename+ext)
map_image.save(save_path)
环境:
我正在使用 Forge 版本。
除内置扩展之外的扩展均被禁用。
"Platform": "Windows-10-10.0.19045-SP0",
"Python": "3.10.9",
"Version": "f0.0.17v1.8.0rc-latest-273-gb9705c58",
"Commit": "b9705c58f66c6fd2c4a0168b26c5cf1fa6c0dde3",
"Commandline": [
"launch.py",
"--port",
"7861",
"--always-gpu",
"--api"
],
我还尝试了“resize_mode”的值1,2,3,但结果没有改变。
另外,即使我删除了 Controlnet 的“alwayson_scripts”部分,结果也没有改变。
这是因为它必须这样做。 unet 使用 64x64,所以你的图像必须是 8 的倍数。如果不是,webui/forge 会自动为你裁剪它(很久以前它没有,你会收到一个错误代码)