跳到主要内容

使用 ControlNet 生成图像

功能描述

ControlNet 是一种基于条件生成的模型,它可以根据输入的条件(如文本、图像等)生成符合条件的图像。在文生图和图像编辑任务中, ControlNet 可以用于生成符合特定条件的图像,如特定风格的图像、特定场景的图像等。

支持 ControlNet 的模型

体验接口效果

功能说明

Serverless API 提供了接口快速体验的界面,可以快速体验接口效果。 打开 Serverless API 页面 ,找到图像生成与处理下的 FLUX.1-dev 模型,点击进入接口详情页。

image

文生图(ControlNet)接口中,启用 ControlNet 功能后,需要设置 ControlNet 模型的参数。

ControlNet 参数说明:

  • control_image:控制图像,用作生成图片时的参考图,比如指定人物姿势或轮廓,让生成结果更符合预期。控制图像可以是本地图片路径,也可以是图片 URL。
  • controlnet_type:ControlNet 模型的类型,可选值为 cannydepth,其中 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}")

其他编程语言可以参考 接口文档 中的示例代码。