Stable Diffusion 之 API 接口调用:代码示例与详解
Stable Diffusion 之 API 接口调用:代码示例与详解
Stable Diffusion 是一款基于扩散模型的强大 AI 绘图工具,通过 API 接口调用,可以快速实现文本生成图像 (Text-to-Image)、图像生成图像 (Image-to-Image) 等功能,极大简化开发过程。本篇教程将结合代码示例和图解,手把手教你如何使用 Stable Diffusion 的 API 接口。
1. 什么是 Stable Diffusion API
Stable Diffusion 提供的 API 接口允许用户在应用程序中调用 Stable Diffusion 模型,生成图像或进行其他与生成式 AI 相关的任务。
1.1 API 功能
- 文本生成图像 (Text-to-Image):输入描述性文本,生成符合描述的图像。
- 图像生成图像 (Image-to-Image):提供一张初始图片,生成风格化或变形的图像。
- 图像编辑:对指定区域进行修复或修改。
2. 注册与获取 API 密钥
2.1 注册账户
- 访问 Stable Diffusion 提供商 官网。
- 注册账户并登录。
2.2 获取 API 密钥
- 登录后,进入“API 管理”页面。
- 生成一个新的 API 密钥并保存。此密钥将在后续代码中使用。
3. 文本生成图像 (Text-to-Image)
3.1 API 请求格式
HTTP 请求:
- 方法:
POST
- URL:
https://api.stability.ai/v1/generate/text-to-image
Headers:
Authorization
:Bearer <API_KEY>
Content-Type
:application/json
Body:
{ "prompt": "a beautiful sunset over the mountains, highly detailed, photorealistic", "width": 512, "height": 512, "steps": 50 }
3.2 Python 调用示例
import requests
API_URL = "https://api.stability.ai/v1/generate/text-to-image"
API_KEY = "your_api_key_here"
def generate_image(prompt, width=512, height=512, steps=50):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"prompt": prompt,
"width": width,
"height": height,
"steps": steps
}
response = requests.post(API_URL, json=data, headers=headers)
if response.status_code == 200:
image_url = response.json().get("image_url")
print(f"Image generated successfully: {image_url}")
return image_url
else:
print(f"Error: {response.status_code}, {response.text}")
return None
# 示例调用
prompt = "a futuristic cityscape with flying cars, cyberpunk style, ultra-detailed"
generate_image(prompt)
4. 图像生成图像 (Image-to-Image)
4.1 API 请求格式
HTTP 请求:
- 方法:
POST
- URL:
https://api.stability.ai/v1/generate/image-to-image
Headers:
Authorization
:Bearer <API_KEY>
Content-Type
:application/json
Body:
{ "prompt": "turn this sketch into a detailed painting", "init_image": "base64_encoded_image", "strength": 0.75, "steps": 50 }
4.2 Python 调用示例
import base64
import requests
API_URL = "https://api.stability.ai/v1/generate/image-to-image"
API_KEY = "your_api_key_here"
def generate_image_from_image(prompt, init_image_path, strength=0.75, steps=50):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 读取并编码图片
with open(init_image_path, "rb") as image_file:
encoded_image = base64.b64encode(image_file.read()).decode("utf-8")
data = {
"prompt": prompt,
"init_image": encoded_image,
"strength": strength,
"steps": steps
}
response = requests.post(API_URL, json=data, headers=headers)
if response.status_code == 200:
image_url = response.json().get("image_url")
print(f"Image generated successfully: {image_url}")
return image_url
else:
print(f"Error: {response.status_code}, {response.text}")
return None
# 示例调用
prompt = "enhance this sketch into a professional artwork, steampunk style"
init_image_path = "sketch.png"
generate_image_from_image(prompt, init_image_path)
5. 图像编辑 (Inpainting)
5.1 API 请求格式
HTTP 请求:
- 方法:
POST
- URL:
https://api.stability.ai/v1/generate/inpainting
Headers:
Authorization
:Bearer <API_KEY>
Content-Type
:application/json
Body:
{ "prompt": "add a futuristic spaceship in the sky", "init_image": "base64_encoded_image", "mask_image": "base64_encoded_mask", "steps": 50 }
5.2 Python 调用示例
def edit_image(prompt, init_image_path, mask_image_path, steps=50):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 读取并编码图片和掩码
with open(init_image_path, "rb") as image_file:
init_image_encoded = base64.b64encode(image_file.read()).decode("utf-8")
with open(mask_image_path, "rb") as mask_file:
mask_image_encoded = base64.b64encode(mask_file.read()).decode("utf-8")
data = {
"prompt": prompt,
"init_image": init_image_encoded,
"mask_image": mask_image_encoded,
"steps": steps
}
response = requests.post(f"{API_URL}/inpainting", json=data, headers=headers)
if response.status_code == 200:
image_url = response.json().get("image_url")
print(f"Image edited successfully: {image_url}")
return image_url
else:
print(f"Error: {response.status_code}, {response.text}")
return None
# 示例调用
prompt = "add a bright moon in the night sky"
init_image_path = "original_image.png"
mask_image_path = "mask.png"
edit_image(prompt, init_image_path, mask_image_path)
6. 常见问题与解决方法
6.1 提示 403 Forbidden
- 确保 API 密钥正确。
- 检查账户是否已激活 API 权限。
6.2 图片生成效果不理想
- 调整提示词(Prompt)内容,增加细节。
- 增加生成步骤(Steps)以提升图像质量。
6.3 性能优化
- 使用高效的图像尺寸(如
512x512
)以节省生成时间。 - 避免超大或超复杂的提示词。
7. 图解流程
- 发送请求:将 Prompt 或图像通过 HTTP POST 请求发送至 API 服务器。
- 模型处理:Stable Diffusion 模型处理输入,并生成对应的图像。
- 返回结果:服务器返回生成的图像 URL 或数据。
8. 总结
Stable Diffusion 的 API 提供了强大的生成功能,可以轻松实现文本到图像、图像到图像、图像编辑等功能。通过本篇教程,你可以快速上手调用 API,开发自己的图像生成应用。
立即尝试,让你的创意化为现实吧!
评论已关闭