🔆2025-04-15
实现第一个图像生成Hello World(Stable Diffusion模型)
基于沐曦+Gitee平台的40+个大模型,采用vscode/Chatbox和Serverless API开发创意型案例,跟踪最新开源模型和编程开发形成案例。
本案例使用vscode调用Gitee-Stable Diffusion接口
什么是Stable Diffusion
参考链接1️⃣2️⃣3️⃣
简而言之,就是:文生图 / Text-to-Image。
Gitee
你需要按照以下顺序操作:
获取Stable Diffusion API
- 选中沐曦模型资源包后,下拉找到stable-diffusion-xl-base-1.0模型
- 选择在线体验->API->添加令牌,会发现代码中的api-key已被正确替换(此处若无法选择记得先登录)
关于API代码,你需要知道:
- 模型资源地址 API的基础URL(统一资源定位符)
- API密钥 用于身份验证和授权,以保证用户正常访问。(注意!你会发现其他模型的api-key和此模型都是完全相同的,因为gitee ai的api-key分配模式是一个账号一个)
- 模型名称 指向模型完整名称(一定不能错)
对于Gitee的三种API代码:
1️⃣Python
base_urlhttps://ai.gitee.com/v1api_keymodelstable-diffusion-xl-base-1.0
2️⃣JavaScript
baseURLhttps://ai.gitee.com/v1apiKeymodelstable-diffusion-xl-base-1.0
3️⃣cURL
❓️如果你发现这里的curl地址不同于上面的baseurl
真聪明!(我这里说话好像ai)这里的url比基础url多了两个资源路径images/generations。
这里涉及到curl命令:通过命令行直接执行HTTP请求,主要用来测试和调试API。因此其需要包含完整的请求url(包括基础url和资源路径)。
个人对url的具体理解:api发送请求的目标地址,这里直接指向stable-diffusion模型中的图像生成服务。
其中:ai.gitee.com:使用gitee平台上的AI服务(此网址可以直接访问)/v1/images/generations:具体的”模型版本/图像/生成”的路径
使用vscode调用gitee-Stable Diffusion-API
到这问题就不大了,正常拿个.py文件放上API代码,根据你的需求进行个性化调整。
记得缺失的包pip install一下
代码思路
- 导包
import requests #HTTP通信
import json #json数据序列化
from dotenv import load_dotenv #安全配置
import os #系统交互
import base64 #数据编码
from io import BytesIO #二进制流处理
from PIL import Image #图像操作
- 配置环境变量
load_dotenv()
- API_URL
- API_KEY
为了降低泄露风险、确保安全性,请一定使用用私有环境变量进行KEY的配置,不要直接把key写在代码里!
- 协议配置 & 数据格式声明
headers
headers = {
"Authorization": f"Bearer {API_KEY}", #认证协议
"Content-Type": "application/json" #数据格式声明
}
4.向API发送请求时所需的参数payload
payload = { #请求参数(根据文档调整)
"model": "stable-diffusion-xl-base-1.0", #模型选择
"prompt": "一只穿着宇航服的猫在月球上漫步", #业务输入
"n": 1, #生成数量
"size": "1024x1024", #输出规格
"response_format": "b64_json" #数据返回格式
}
5.向API发送请求 & 处理响应结果
使用
try-except异常处理结构,用于捕获并处理在请求API和处理响应过程中可能出现的异常,确保程序在遇到错误时不会崩溃,而是输出相应的错误信息。
try:
print(f"请求API: {API_URL}")
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
result = response.json()
if "data" in result and len(result["data"]) > 0:
# 处理base64图像数据
image_data = base64.b64decode(result["data"][0]["b64_json"])
image = Image.open(BytesIO(image_data))
# 保存图像
output_path = "generated_image.png"
image.save(output_path)
print(f"图像生成成功,已保存到: {output_path}")
image.show()
else:
print("API响应中没有有效的图像数据")
else:
print(f"请求失败,状态码: {response.status_code}")
print(response.text)
except Exception as e:
print(f"发生错误: {str(e)}")
后续问题扩展
如果你成功调用Stable Diffusion模型的API,并输入中文提示词,会发现生成的图几乎不相关…因此后续需要对提示词prompt进行调整。
下方 ↓ 跳转查看下一篇文章【实战2️⃣ 接入DeepSeek-R1优化提示词】。
