使用 ControlNet 生成图像
功能描述
ControlNet
是一种基于条件生成的模型,它可以根据输入的条件(如文本、图像等)生成符合条 件的图像。在文生图和图像编辑任务中,
ControlNet
可以用于生成符合特定条件的图像,如特定风格的图像、特定场景的图像等。
支持 ControlNet 的模型
体验接口效果
功能说明
Serverless API 提供了接口快速体验的界面,可以快速体验接口效果。
打开 Serverless API 页面 ,找到图像生成与处理下的
FLUX.1-dev
模型,点击进入接口详情页。
文生图(ControlNet)接口中,启用 ControlNet 功能后,需要设置 ControlNet 模型的参数。
ControlNet 参数说明:
- control_image:控制图像,用作生成图片时的参考图,比如指定人物姿势或轮廓,让生成结果更符合预期。控制图像可以是本地图片路径,也可以是图片 URL。
- controlnet_type:ControlNet 模型的类型,可选值为
canny
、depth
,其中canny
是边缘检测,depth
是深度估计,用于指导生成图片的风格或结构。。 - controlnet_conditioning_scale:ControlNet 模型对基础模型的影响程度,范围为 0 到 1 之间的浮点数,默认值为 0.5。值越大,参考图的影响越强。
- controlnet_guidance_start:ControlNet 模型的引导开始时间,范围为 0 到 1 之间的浮点数,默认值为 0.2。
- controlnet_guidance_end:ControlNet 模型的引导结束时间,范围为 0 到 1 之间的浮点数,默认值为 0.8。
调用文生图模型
使用 OpenAI SDK
以下将说明如何通过 OpenAI SDK 使用 FLUX.1-dev
文生图 ControlNet
接口。以下是一个使用 Python 的示例:
python
from openai import OpenAI
import base64
import requests
client = OpenAI(
base_url="https://ai.gitee.com/v1",
api_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
)
response = client.images.generate(
prompt="A robot sitting on open grassland, painting on a canvas.",
model="FLUX.1-dev",
size="1024x1024",
extra_body={
"num_inference_steps": 20,
"guidance_scale": 7.5,
"seed": 42,
"control_image": "https://example.com/image.png", # 替换为您的控制图像 URL 或图片 base64 编码字符串
"control_type": "canny",
"controlnet_conditioning_scale": 0.5,
"control_guidance_start": 0.8,
"control_guidance_end": 0.2,
},
)
for i, image_data in enumerate(response.data):
if image_data.url:
# Download from URL
ext = image_data.url.split('.')[-1].split('?')[0] or "jpg"
filename = f"FLUX.1-dev-output-{i}.{ext}"
response = requests.get(image_data.url, timeout=30)
response.raise_for_status()
with open(filename, "wb") as f:
f.write(response.content)
print(f"Downloaded image to {filename}")
elif image_data.b64_json:
# Decode base64
image_bytes = base64.b64decode(image_data.b64_json)
filename = f"FLUX.1-dev-output-{i}.jpg"
with open(filename, "wb") as f:
f.write(image_bytes)
print(f"Saved image to {filename}")
使用 Requests 库
如果您不想使用 OpenAI 的 SDK,也可以直接使用 requests
库来调用文生图模型。以下是一个使用 Python 的示例:
python
import requests
import base64
import json
url = "https://ai.gitee.com/v1/images/generations"
headers = {
"Authorization": "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", # 替换为您的 API Key
"Content-Type": "application/json",
"X-Failover-Enabled": "true"
}
data = {
"prompt": "a white siamese cat", # 替换为您的文本描述
"model": "FLUX.1-dev", # 替换为您选择的模型名称
"size": "1024x1024",
"seed": 42,
"response_format": "b64_json",
"num_inference_steps": 25,
"guidance_scale": 7.5,
"control_image": "https://example.com/image.png", # 替换为您的控制图像 URL 或图片 base64 编码字符串
"control_type": "canny",
"controlnet_conditioning_scale": 0.5,
"control_guidance_start": 0.8,
"control_guidance_end": 0.2,
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
for i, image_data in enumerate(response.data):
if image_data.url:
# Download from URL
ext = image_data.url.split('.')[-1].split('?')[0] or "jpg"
filename = f"FLUX.1-dev-output-{i}.{ext}"
response = requests.get(image_data.url, timeout=30)
response.raise_for_status()
with open(filename, "wb") as f:
f.write(response.content)
print(f"Downloaded image to {filename}")
elif image_data.b64_json:
# Decode base64
image_bytes = base64.b64decode(image_data.b64_json)
filename = f"FLUX.1-dev-output-{i}.jpg"
with open(filename, "wb") as f:
f.write(image_bytes)
print(f"Saved image to {filename}")
else:
print(f"请求失败,状态码: {response.status_code}")
print(f"错误信息: {response.text}")
其他编程语言可以参考 接口文档 中的示例代码。