资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

Stable-Diffusion-XL

Stable-Diffusion-XL是业内知名的跨模态大模型,由StabilityAI研发并开源,有着业内领先的图像生成能力。本文介绍了相关API。

  • 模型版本为stable-diffusion-xl-base-1.0

功能介绍

调用本接口,根据用户输入的文本生成图片。

注意事项

  • 如果调用时出现请求超时情况,建议使用以下方式调用:

(1)如果未部署该服务,需要部署本模型为服务,再调用部署好的服务。发布服务流程可参考说明文档,详细计费可查看价格文档

(2)如果已经部署过此服务,可在部署资源中进行复购。

SDK调用

调用示例

  • 指定支持预置服务的模型

使用model字段,指定平台支持预置服务的模型,调用示例如下。

import os
import qianfan
from PIL import Image
import io

# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

t2i = qianfan.Text2Image()
resp = t2i.do(prompt="A Ragdoll cat with a bowtie.", with_decode="base64",model="Stable-Diffusion-XL")
img_data = resp["body"]["data"][0]["image"]

img = Image.open(io.BytesIO(img_data))
img.show(img)
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.image.Text2ImageResponse;

public class Main {
    public static void main(String[] args) {
        // 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
        Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
           
        // 调用文生图模型
        Text2ImageResponse response = qianfan.text2Image().model("Stable-Diffusion-XL")
        .prompt("A Ragdoll cat with a bowtie")
        .execute();
        
        // 返回信息,返回图片base64编码信息等
        System.out.println("headers: "+response.getHeaders());
        System.out.println("created: "+response.getCreated());
        System.out.println("id: "+response.getId());
        System.out.println("prompttokens: "+response.getUsage().getPromptTokens());
        System.out.println("totaltokens: "+response.getUsage().getTotalTokens());
        System.out.println("b64image: "+response.getData().getFirst().getB64Image());
        System.out.println("image: "+ Arrays.toString(response.getData().getFirst().getImage()));
        System.out.println("index: "+response.getData().getFirst().getIndex());
        System.out.println("object: "+response.getObject());
        
    }

}
package main

import (
	"context"
	"encoding/base64"
	"fmt"
	"os"
	"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)

func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
	os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
	os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")

	text2img := qianfan.NewText2Image(
		qianfan.WithModel("Stable-Diffusion-XL"),
	)

	resp, err := text2img.Do(context.TODO(), &qianfan.Text2ImageRequest{
		Prompt: "A Ragdoll cat with a bowtie.",
	})
	if err != nil {
		panic(err)
	}

	img := resp.Data[0].Base64Image
	imgData, err := base64.StdEncoding.DecodeString(img)
	if err != nil {
		panic(err)
	}

	outputFile := "output.jpg"
	f, err := os.Create(outputFile)
	if err != nil {
		panic(err)
	}
	defer func() {
		if err := f.Close(); err != nil {
			panic(err)
		}
	}()

	_, err = f.Write(imgData)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Image saved to %s\n", outputFile)
}
\`; res.end(html); }); const port = 3002; server.listen(port, () => { console.log(\`服务器运行在 http://localhost:\${port}\`); }); } main();`, `92175788661953530000`)" >
import * as http from 'http';
import {Text2Image, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');

const client = new Text2Image();

async function main() {
    const resp = await client.text2Image({
        prompt: 'A Ragdoll cat with a bowtie.',
     }, 'Stable-Diffusion-XL');

    const base64Image = resp.data[0].b64_image;
    // 创建一个简单的服务器
    const server = http.createServer((req, res) => {
        res.writeHead(200, {'Content-Type': 'text/html'});
        let html = `<html><body><img src="data:image/jpeg;base64,${base64Image}" /><br/></body></html>`;
        res.end(html);
    });

    const port = 3002;
    server.listen(port, () => {
        console.log(`服务器运行在 http://localhost:${port}`);
    });
}

main();
  • 用户自行发布的模型服务

对于用户自行发布的模型服务,通过使用endpoint进行调用,示例如下。

import os
import qianfan
from PIL import Image
import io

# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

t2i = qianfan.Text2Image()
resp = t2i.do(prompt="A Ragdoll cat with a bowtie.", with_decode="base64",endpoint="your_custom_endpoint")
img_data = resp["body"]["data"][0]["image"]

img = Image.open(io.BytesIO(img_data))
img.show(img)
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.image.Text2ImageResponse;

public class Main {
    public static void main(String[] args) {
        // 使用安全认证AK/SK鉴权,替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
        Qianfan qianfan = new Qianfan("your_iam_ak", "your_iam_sk");
        
        // 调用文生图模型
        Text2ImageResponse response = qianfan.text2Image().endpoint("your_custom_endpoint")
        .prompt("A Ragdoll cat with a bowtie")
        .execute();
        
        // 返回信息,返回图片base64编码信息等
        System.out.println("created: "+response.getCreated());
        System.out.println("id: "+response.getId());
        System.out.println("prompttokens: "+response.getUsage().getPromptTokens());
        System.out.println("totaltokens: "+response.getUsage().getTotalTokens());
        System.out.println("b64image: "+response.getData().getFirst().getB64Image());
        System.out.println("image: "+                          Arrays.toString(response.getData().getFirst().getImage()));
        System.out.println("index: "+response.getData().getFirst().getIndex());
        System.out.println("object: "+response.getObject());
       
}
package main

import (
	"context"
	"encoding/base64"
	"fmt"
	"os"

	"github.com/baidubce/bce-qianfan-sdk/go/qianfan"
)

func main() {
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
	os.Setenv("QIANFAN_ACCESS_KEY", "your_iam_ak")
	os.Setenv("QIANFAN_SECRET_KEY", "your_iam_sk")

	text2img := qianfan.NewText2Image(
		qianfan.WithModel("Stable-Diffusion-XL"),
	)

	resp, err := text2img.Do(context.TODO(), &qianfan.Text2ImageRequest{
		Prompt: "A Ragdoll cat with a bowtie.",
	})
	if err != nil {
		panic(err)
	}

	img := resp.Data[0].Base64Image
	imgData, err := base64.StdEncoding.DecodeString(img)
	if err != nil {
		panic(err)
	}

	outputFile := "output.jpg"
	f, err := os.Create(outputFile)
	if err != nil {
		panic(err)
	}
	defer func() {
		if err := f.Close(); err != nil {
			panic(err)
		}
	}()

	_, err = f.Write(imgData)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Image saved to %s\n", outputFile)
}
import * as http from 'http';
import {Text2Image, setEnvVariable} from "@baiducloud/qianfan";
// 使用安全认证AK/SK鉴权,通过环境变量初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
setEnvVariable('QIANFAN_ACCESS_KEY','your_iam_ak');
setEnvVariable('QIANFAN_SECRET_KEY','your_iam_sk');

const client = new Text2Image();

async function main() {
    const resp = await client.text2Image({
        prompt: 'A Ragdoll cat with a bowtie.',
     }, 'Stable-Diffusion-XL');

    const base64Image = resp.data[0].b64_image;
    // 创建一个简单的服务器
    const server = http.createServer((req, res) => {
        res.writeHead(200, {'Content-Type': 'text/html'});
        let html = `<html><body><img src="data:image/jpeg;base64,${base64Image}" /><br/></body></html>`;
        res.end(html);
    });

    const port = 3002;
    server.listen(port, () => {
        console.log(`服务器运行在 http://localhost:${port}`);
    });
}

main();

返回示例

QfResponse(code=200,
           headers={...},
           body={'created': 1111,
                 'data': [{'b64_image': 'xxxxx',
                           'image': 'xx',
                           'index': 1,
                           'object': 'image'}],
                 'id': 'as-xxx',
                 'object': 'image',
                 'usage': {'prompt_tokens': 28, 'total_tokens': 28}})
# 返回JSON格式部分字段如下:
{
  "data": [
    {
      "object": "image",
      "b64Image": "/9j/xxxxxx",
      "index": 1
    }
  ],
  "usage": {
    "promptTokens": 27,
    "totalTokens": 27
  },
  "id": "as-p11zrni3y6",
  "object": "image",
  "created": 1717400385,
  "headers": {
    ...
  }
}
{
    Id: as-zru0xxxq 
    Object: image 
    Created: 1715928380 
    Usage:{
        PromptTokens: 28 
        CompletionTokens: 0 
        TotalTokens: 28
    } 
    Data:[
        {
            Object:image 
            Base64Image:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/ 
            Index:1
        }
    ]   
}
{
  id: 'as-6i718v0pun',
  object: 'image',
  created: 1709801635,
  data: [
    {
      object: 'image',
      b64_image: '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDxxxxx',
      index: 1
    }
  ],
  usage: { prompt_tokens: 9, total_tokens: 9 }
}

请求参数

注意:以下为Python SDK参数说明,其他SDK参数相关说明请参考Go SDK-图像Images参数相关说明Java SDK参数相关说明Node.js SDK参数相关说明

名称 类型 必填 描述
model string 模型名称,用于指定平台支持预置服务的模型,说明:
(1)如果调用预置服务,即调用本文API,该字段必填,且为固定值Stable-Diffusion-XL
(2)如果指定用户自行发布的模型服务,该字段不填写,需填写endpoint字段,详见参数endpoint说明
endpoint string 用于指定用户自行发布的模型服务,说明:
(1)如果调用用户自行发布的模型服务,endpoint字段为必填
(2)该字段值可以通过查看服务地址获取:打开模型服务-模型推理-我的服务页面,选择创建的服务-点击详情页查看服务地址,endpoint值为https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/image2text/后面的地址,如下图所示
image.png
注意:
在创建服务页面,选择模型后,API地址会自动新增个后缀。例如选择模型后,输入API地址为“test1”,endpoint的取值即为“ngxxxol8_test1”,如下图所示
image.png
prompt string 提示词,即用户希望图片包含的元素。说明:
长度限制为1024字符,建议中文或者英文单词总数量不超过150个
with_decode string 是否自动decode,如果不指定将返回原始的based64 encoded二进制数据,可选值:base64
negative_prompt string 反向提示词,即用户希望图片不包含的元素。说明:
长度限制为1024字符,建议中文或者英文单词总数量不超过150个
size string 生成图片长宽,说明:
(1)默认值 1024x1024,
(2)取值范围如下:
· 适用头像: ["768x768", "1024x1024", "1536x1536", "2048x2048"]
· 适用文章配图 :["1024x768", "2048x1536"]
· 适用海报传单:["768x1024", "1536x2048"]
· 适用电脑壁纸:["1024x576", "2048x1152"]
· 适用海报传单:["576x1024", "1152x2048"]
n int 生成图片数量,说明:
(1)默认值为1
(2)取值范围为1-4
(3)单次生成的图片较多及请求较频繁可能导致请求超时
steps int 迭代轮次,说明:

· 默认值为20
· 取值范围为10-50
sampler_index string 采样方式,说明:
(1)默认值:Euler a
(2)可选值如下:
· Euler
· Euler a
· DPM++ 2M
· DPM++ 2M Karras
· LMS Karras
· DPM++ SDE
· DPM++ SDE Karras
· DPM2 a Karras
· Heun
· DPM++ 2M SDE
· DPM++ 2M SDE Karras
· DPM2
· DPM2 Karras
· DPM2 a
· LMS
retry_count int 重试次数,默认1次
request_timeout float 请求超时时间,默认60秒
backoff_factor float 请求重试参数,用于指定重试的策略,默认为0
seed integer 随机种子,说明:
· 不设置时,自动生成随机数
· 取值范围 [0, 4294967295]
cfg_scale float 提示词相关性,说明:默认值为5,取值范围0-30
style string 生成风格。说明:
(1)默认值为Base
(2)可选值:
· Base:基础风格
· 3D Model:3D模型
· Analog Film:模拟胶片
· Anime:动漫
· Cinematic:电影
· Comic Book:漫画
· Craft Clay:工艺黏土
· Digital Art:数字艺术
· Enhance:增强
· Fantasy Art:幻想艺术
· Isometric:等距风格
· Line Art:线条艺术
· Lowpoly:低多边形
· Neonpunk:霓虹朋克
· Origami:折纸
· Photographic:摄影
· Pixel Art:像素艺术
· Texture:纹理
user_id string 表示最终用户的唯一标识符

响应参数

名称 类型 描述
id string 请求的id
object string 回包类型。image:图像生成返回
created int 时间戳
data list(image_data) 生成图片结果
usage usage token统计信息,token数 = 汉字数+单词数*1.3 (仅为估算逻辑)

image_data说明

名称 类型 描述
object string 固定值"image"
b64_image string 图片base64编码内容
image string 图片解码后数据,可以直接使用,仅传入with_decode="base64"时候会返回
index int 序号

usage说明

名称 类型 描述
prompt_tokens int 问题tokens数,包含提示词和负向提示词
total_tokens int tokens总数
上一篇
向量Embeddings
下一篇
Fuyu-8B