文生图StableDiffusion模型目前针对开源社区的stable-diffusion-v1.5版本、stable-diffusion-xl版本、stable-diffusion-3.5-large系列进行了服务化支持。并且额外为了stable-diffusion-3.5-large系列模型做了中文prompt适配。
Stable Diffusion 3.5在之前的1.5版本的基础上做了进一步改进,采用了多模态扩散变压器(MMDiT)架构,结合了三种固定预训练文本编码器,并使用Query-Key归一化(QK Normalization)技术以提升训练稳定性。此模型在图像质量、复杂提示理解和资源利用效率上有显著提升,适合本地或自托管使用。其生成的图像在质量上有显著的改进,特别是在处理复杂文本提示和排版时表现突出。Stable Diffusion 3.5系列包括多个变体:Stable Diffusion 3.5 Large、Stable Diffusion 3.5 Large Turbo和即将发布的Stable Diffusion 3.5 Medium,每个版本都针对不同的用户需求进行了优化,提供了高度的定制性和易用性。
模型调用
有关StableDiffusion文生图模型API的详细调用文档可前往以下页面进行了解。
快速开始
前提条件
我们推荐您将API-KEY配置到环境变量中以降低API-KEY的泄漏风险,详情可参考配置API Key到环境变量。您也可以在代码中配置API-KEY,但是泄漏风险会增加。
请登录到百炼控制台,在模型广场处找到StableDiffusion文生图模型并申请,申请通过后即可进行模型使用。
示例代码
以下示例展示了调用 stable-diffusion-xl 模型API进行文生图的示例代码,如果需要调用 Stable Diffusion v1.5版本只需要用 stable-diffusion-v1.5 替换 stable-diffusion-xl 即可。同理,调用其他模型也只需要用对应的模型名称替换。
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import requests
import dashscope
model = "stable-diffusion-xl"
prompt = "Eagle flying freely in the blue sky and white clouds"
def simple_call():
rsp = dashscope.ImageSynthesis.call(model=model,
prompt=prompt,
negative_prompt="garfield",
n=1,
size='1024*1024')
if rsp.status_code == HTTPStatus.OK:
print(rsp)
# 下载文件到当前文件夹
for result in rsp.output.results:
file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
with open('./%s' % file_name, 'wb+') as f:
f.write(requests.get(result.url).content)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
simple_call()
// Copyright (c) Alibaba, Inc. and its affiliates.
// 请添加okhttp依赖
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Main {
private static final OkHttpClient CLIENT = new OkHttpClient();
private static final String MODEL = "stable-diffusion-xl";
private static final String PROMPT = "Eagle flying freely in the blue sky and white clouds";
private static final String SIZE = "1024*1024";
public static void basicCall() throws ApiException, NoApiKeyException, IOException {
ImageSynthesis is = new ImageSynthesis();
ImageSynthesisParam param =
ImageSynthesisParam.builder()
.model(Main.MODEL)
.n(1)
.size(Main.SIZE)
.prompt(Main.PROMPT)
.negativePrompt("garfield")
.build();
ImageSynthesisResult result = is.call(param);
System.out.println(JsonUtils.toJson(result));
// 保存图片到本地
for(Map<String, String> item :result.getOutput().getResults()){
String paths = new URL(item.get("url")).getPath();
String[] parts = paths.split("/");
String fileName = parts[parts.length-1];
Request request = new Request.Builder()
.url(item.get("url"))
.build();
try (Response response = CLIENT.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
Path file = Paths.get(fileName);
Files.write(file, response.body().bytes());
}
}
}
public static void main(String[] args){
try{
basicCall();
}catch(ApiException|NoApiKeyException | IOException e){
System.out.println(e.getMessage());
}
System.exit(0);
}
}
调用成功后,将会返回如下示例结果。
{
"status_code": 200,
"request_id": "08327623-c671-92ff-bdd7-1a2a87f40589",
"code": null,
"message": "",
"output": {
"task_id": "80e3e478-b276-4b68-a328-628982abd40d",
"task_status": "SUCCEEDED",
"results": [
{
"url": "example_url"
}
],
"submit_time": "2024-06-14 11:46:18.604",
"scheduled_time": "2024-06-14 11:46:18.621",
"end_time": "2024-06-14 11:46:36.043",
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}
您可以从URL中获取结果图片信息。
- 本页导读 (1)
- 模型调用
- 快速开始
- 前提条件
- 示例代码