图像背景生成API参考

本文介绍通义万相-背景生成模型的输入输出参数。基于输入的前景图像素材拓展生成背景信息,实现自然的光影融合效果,与细腻的写实画面生成。

相关指南图像背景生成

模型概览

模型名

模型简介

免费额度

计费单价

限流(含主账号与RAM子账号)

任务下发接口QPS限制

同时处理中任务数量

wanx-background-generation-v2

通义万相-图像背景生成可以基于输入的前景图像素材拓展生成背景信息,实现自然的光影融合效果,与细腻的写实画面生成。支持文本描述、图像引导等多种方式,同时支持对生成的图像智能添加文字内容。面向商品换背景等使用场景,不建议使用该模型来生成人像。

免费额度:500

领取方式:开通阿里云百炼大模型服务后,自动发放

有效期:180

0.08元/张

2

1

前提条件

您需要已获取API Key配置API Key到环境变量

HTTP调用

为了减少等待时间并且避免请求超时,服务采用异步方式提供。您需要发起两个请求:

  • 创建任务:首先发送一个请求创建任务,该请求会返回任务ID。

  • 根据任务ID查询结果:使用上一步获得的任务ID,查询模型生成的结果。

创建任务

POST https://dashscope.aliyuncs.com/api/v1/services/aigc/background-generation/generation/

请求头(Headers)

图像背景生成

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/background-generation/generation/' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "wanx-background-generation-v2",
    "input": {
        "base_image_url": "https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/images/main_images/new_main_img/a.png",
        "ref_image_url": "http://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/images/ref_images/c5e50d27be534709817b2ab080b0162f_0.jpg",
        "ref_prompt": "山脉和晚霞",
        "reference_edge": {
            "foreground_edge": [
                "https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/images/huaban_soft_edge/6cdd13941cef1b11d885aea1717b983ae566b8efc9094-vcsvxa_fw658webp.png",
                "http://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/images/ref_edge/2c36cc4b7da027279e87311dac48fc2d5d784b1e72c0e-x4f1wC_fw658webp.png"
            ],
            "background_edge": [
                "http://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/images/ref_edge/0718a9741e07c52ca5506e75c4f2b99e22fff68a4c7d3-P9WGLr_fw658webp.png"
            ],
            "foreground_edge_prompt": [
                "粉色桃花",
                "可爱小狗"
            ],
            "background_edge_prompt": [
                "树叶"
            ]
        }
    },
    "parameters": {
        "n": 4,
        "ref_prompt_weight": 0.5,
        "model_version": "v3"
    }
}'

Authorization string 必选

推荐您使用百炼API-Key,也可填DashScope API-Key。例如:Bearer d1xxx2a。

X-DashScope-Async string 必选

是否开启异步处理。必须开启异步处理,设置为enable

Content-Type string 必选

请求内容类型。固定为application/json

X-DashScope-WorkSpace string 可选

使用的workspace。

  • 对于子账号Apikey,此参数为必选项,子账号必须归属于某个workspace才能调用。

  • 对于主账号Apikey,此参数为可选项,添加则使用对应的workspace身份,不添加则使用主账号身份。

X-DashScope-Async string 必选

固定使用enable,表明使用异步方式提交任务。

请求体(Request Body)

model string 必选

调用模型。图像背景生成模型为:wanx-background-generation-v2。

input object 必选

输入图像的基本信息,比如图像URL。

属性

base_image_url string 必选

主体图像URL。主体图像必须为带透明背景的RGBA四通道图像。输出图像的分辨率与该图像保持一致。

图像要求:

  • 图像格式:png, webp

  • 图像边长:长边不超过2048像素

ref_image_url string 可选

引导图像URL。

图像要求:

  • 图像格式:jpg、png、webp等常见格式

  • 支持带透明背景的RGBA四通道图像。

Alpha通道为0的区域不参与生成引导过程,适用于引导图带其它主体的情况。

它与ref_prompt参数至少填写一个。

ref_prompt string 可选

引导文本提示词,支持中英双语。

最多支持150个单词,超过部分会被自动忽略。

它与ref_image_url参数至少填写一个。

neg_ref_prompt string 可选

负向提示词,不希望出现的内容。一般不填,使用模型内置的默认值。

示例:低质量的,模糊的,错误的。

reference_edge object 可选

属性

foreground_edge list[string] 可选

前景元素图像URL列表。

每个图像必须为带透明背景的RGBA四通道图像,分辨率和主体图像相同,如果不同则会自动缩放到和主体图像同一个分辨率。

所有前景元素生成的图层在主体前面,可以对主体形成遮挡。每个元素的图层顺序为从底到上。

foreground_edge图像列表和background_edge图像列表图像之和不得超过10张。前景元素图像的生成方式参考边缘引导元素生成方法

foreground_edge_prompt list[string] 可选

前景元素列表对应的prompt列表。

如果输入该参数,长度必须和foreground_edge列表相等,且顺序一一对应。如果希望某个元素的prompt缺省,可用空字符串占位。

background_edge list[string] 可选

背景元素图像URL列表。

生成图层在主体的后面,如果重叠会被主体遮挡,每个元素的图层顺序为从底到上。

foreground_edge图像列表和background_edge图像列表图像之和不得超过10张。图像的生成方式参考边缘引导元素生成方法

background_edge_prompt list[string] 可选

背景元素列表对应的prompt列表。

如果输入该参数,长度必须和background_edge列表相等,且顺序一一对应,如果希望某个元素的prompt缺省,可用空字符串占位。

title string 可选

已废弃,建议使用图配文API参考

图像上添加文字主标题。算法自动确定文字的大小和位置,限制1~8个字符。

sub_title string 可选

已废弃,建议使用图配文API参考

图像上添加文字副标题。算法自动确定文字的大小和位置,限制1~10个字符。

仅当title不为空时生效

parameters object 可选

图像处理参数。

parameters 子属性

n integer 可选

图片生成的数量,支持1~4 张,默认值1。

noise_level integer 可选

ref_image_url不为空时生效。该参数在图像引导的过程中添加随机变化,数值越大与参考图相似度越低,默认值300,取值范围[0,999]。

ref_prompt_weight float 可选

仅当ref_image_urlref_prompt同时输入时生效,该参数设定文本和图像引导的权重。ref_prompt_weight表示文本的权重。默认值0.5,取值范围 [0,1]。

scene_type string 可选

已废弃,不建议使用该参数。

使用场景,当前包含3种场景:

  • GENERAL: 通用场景,默认值。

  • ROOM: 室内家居场景。

  • COSMETIC:美妆场景,也适用于大部分小商品摆放场景。

model_version string 可选

模型版本选择。模型有:

  • v2:旧版模型,速度快,默认值。

  • v3:为新版模型,效果更好但响应速度慢,推荐切换到最新版本v3。

响应

成功响应

{
    "output": {
        "task_status": "PENDING",
        "task_id": "13b1848b-5493-4c0e-xxxxxxxxxxxx"
    },
    "request_id": "1027557e-8c3f-9db5-8cd2-xxxxxxxxxxxx"
}

异常响应

{
    "code":"InvalidApiKey",
    "message":"Invalid API-key provided.",
    "request_id":"fb53c4ec-1c12-4fc4-a580-xxxxxxxxxxxx"
}

output object

任务输出信息。

属性

task_id string

任务id,任务唯一标识。

task_status string

提交异步任务后的任务状态。

  • PENDING:排队中

  • RUNNING:处理中

  • SUSPENDED:挂起

  • SUCCEEDED:执行成功

  • FAILED:执行失败

code string

接口错误码。接口成功请求不会返回该参数。

message string

接口错误信息。接口成功请求不会返回该参数。

request_id string

请求唯一标识。可用于请求明细溯源和问题排查。

根据任务ID查询结果

GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}

请求头(Headers)

获取任务结果

curl -X GET \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
https://dashscope.aliyuncs.com/api/v1/tasks/13b1848b-5493-4c0e-xxxxxxxxxxxx

Authorization string 必选

推荐使用百炼API-Key,也可填DashScope API-Key。例如:Bearer d1xxx2a。

URL路径参数(Path parameters)

task_id string 必选

任务id。

响应

任务执行成功

{
    "output": {
        "task_id": "13b1848b-5493-4c0e-xxxxxxxxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://xxx/1.jpg"
            },
            {
                "url": "https://xxx/2.jpg"
            },
            {
                "url": "https://xxx/3.jpg"
            }
        ],
        "text_result": {
            "urls": [
                {
                    "url": "https://xxx/1.jpg"
                },
                {
                    "url": "https://xxx/2.jpg"
                },
                {
                    "url": "https://xxx/3.jpg"
                }
            ],
            "params": [
                {
                    "sample_idx": 1,
                    "layers": [
                        {
                            "type": "text_mask",
                            "idx": 0,
                            "color": "#f2eee4",
                            "opacity": 0.8,
                            "top": 0,
                            "left": 0,
                            "width": 768,
                            "height": 340,
                            "radius": 0,
                            "gradient": {
                                "type": "linear",
                                "gradient_units": "pixels",
                                "coords": {
                                    "x1": 0,
                                    "y1": 340,
                                    "x2": 0,
                                    "y2": 0
                                },
                                "color_stops": [
                                    {
                                        "offset": 0,
                                        "color": "#f2eee400"
                                    },
                                    {
                                        "offset": 1,
                                        "color": "#f2eee4ff"
                                    }
                                ]
                            }
                        },
                        {
                            "type": "text",
                            "sub_type": "Title",
                            "content": "分享好时光",
                            "idx": 1,
                            "font_size": 98,
                            "font_family": "阿里巴巴普惠体",
                            "direction": "horizontal",
                            "alignment": "center",
                            "font_color": "#5b4c2f",
                            "opacity": 1,
                            "font_weight": "Regular",
                            "font_italic": false,
                            "font_line_through": false,
                            "font_under_line": false,
                            "top": 34,
                            "left": 88,
                            "width": 591,
                            "height": 98,
                            "line_height": 1,
                            "text_shadow": "0px 0px #80808080",
                            "text_stroke": "0px #fffffff0"
                        },
                        {
                            "type": "text_mask",
                            "idx": 2,
                            "color": "#5b4c2f",
                            "opacity": 1,
                            "top": 152,
                            "left": 235,
                            "width": 297,
                            "height": 65,
                            "radius": 40,
                            "gradient": {
                                "type": "linear",
                                "gradient_units": "pixels",
                                "coords": {
                                    "x1": 0,
                                    "y1": 0,
                                    "x2": 0,
                                    "y2": 65
                                },
                                "color_stops": [
                                    {
                                        "offset": 0,
                                        "color": "#5b4c2fff"
                                    },
                                    {
                                        "offset": 1,
                                        "color": "#5b4c2fff"
                                    }
                                ]
                            },
                            "box_shadow": "2px 0px #80808080"
                        },
                        {
                            "type": "text",
                            "sub_type": "Title",
                            "content": "只为不一样的你",
                            "idx": 3,
                            "font_size": 35,
                            "font_family": "阿里巴巴普惠体",
                            "direction": "horizontal",
                            "alignment": "center",
                            "font_color": "#f2ede3",
                            "opacity": 1,
                            "font_weight": "Medium",
                            "font_italic": false,
                            "font_line_through": false,
                            "font_under_line": false,
                            "top": 152,
                            "left": 235,
                            "width": 297,
                            "height": 65,
                            "line_height": 1,
                            "text_shadow": 0
                        }
                    ]
                },
                {
                    "sample_idx": 0,
                    "layers": [
                        {
                            "type": "text_mask",
                            "idx": 0,
                            "color": "#e7a047",
                            "opacity": 0.8,
                            "top": 0,
                            "left": 0,
                            "width": 768,
                            "height": 340,
                            "radius": 0,
                            "gradient": {
                                "type": "linear",
                                "gradient_units": "pixels",
                                "coords": {
                                    "x1": 0,
                                    "y1": 340,
                                    "x2": 0,
                                    "y2": 0
                                },
                                "color_stops": [
                                    {
                                        "offset": 0,
                                        "color": "#e7a04700"
                                    },
                                    {
                                        "offset": 1,
                                        "color": "#e7a047ff"
                                    }
                                ]
                            }
                        },
                        {
                            "type": "text",
                            "sub_type": "Title",
                            "content": "分享好时光",
                            "idx": 1,
                            "font_size": 98,
                            "font_family": "阿里巴巴普惠体",
                            "direction": "horizontal",
                            "alignment": "center",
                            "font_color": "#2f1905",
                            "opacity": 1,
                            "font_weight": "Regular",
                            "font_italic": false,
                            "font_line_through": false,
                            "font_under_line": false,
                            "top": 34,
                            "left": 88,
                            "width": 591,
                            "height": 98,
                            "line_height": 1,
                            "text_shadow": "1px 0px #80808080",
                            "text_stroke": "0px #fffffff0"
                        },
                        {
                            "type": "text_mask",
                            "idx": 2,
                            "color": "#2f1905",
                            "opacity": 1,
                            "top": 152,
                            "left": 235,
                            "width": 297,
                            "height": 65,
                            "radius": 40,
                            "gradient": {
                                "type": "linear",
                                "gradient_units": "pixels",
                                "coords": {
                                    "x1": 0,
                                    "y1": 0,
                                    "x2": 0,
                                    "y2": 65
                                },
                                "color_stops": [
                                    {
                                        "offset": 0,
                                        "color": "#2f1905ff"
                                    },
                                    {
                                        "offset": 1,
                                        "color": "#2f1905ff"
                                    }
                                ]
                            },
                            "box_shadow": "0px 2px #80808080"
                        },
                        {
                            "type": "text",
                            "sub_type": "Title",
                            "content": "只为不一样的你",
                            "idx": 3,
                            "font_size": 35,
                            "font_family": "阿里巴巴普惠体",
                            "direction": "horizontal",
                            "alignment": "center",
                            "font_color": "#dc9f65",
                            "opacity": 1,
                            "font_weight": "Medium",
                            "font_italic": false,
                            "font_line_through": false,
                            "font_under_line": false,
                            "top": 152,
                            "left": 235,
                            "width": 297,
                            "height": 65,
                            "line_height": 1,
                            "text_shadow": 0
                        }
                    ]
                },
                {
                    "sample_idx": 2,
                    "layers": [
                        {
                            "type": "text_mask",
                            "idx": 0,
                            "color": "#cf9a5a",
                            "opacity": 0.8,
                            "top": 0,
                            "left": 0,
                            "width": 768,
                            "height": 340,
                            "radius": 0,
                            "gradient": {
                                "type": "linear",
                                "gradient_units": "pixels",
                                "coords": {
                                    "x1": 0,
                                    "y1": 340,
                                    "x2": 0,
                                    "y2": 0
                                },
                                "color_stops": [
                                    {
                                        "offset": 0,
                                        "color": "#cf9a5a00"
                                    },
                                    {
                                        "offset": 1,
                                        "color": "#cf9a5aff"
                                    }
                                ]
                            }
                        },
                        {
                            "type": "text",
                            "sub_type": "Title",
                            "content": "分享好时光",
                            "idx": 1,
                            "font_size": 100,
                            "font_family": "阿里巴巴普惠体",
                            "direction": "horizontal",
                            "alignment": "center",
                            "font_color": "#191208",
                            "opacity": 1,
                            "font_weight": "Regular",
                            "font_italic": false,
                            "font_line_through": false,
                            "font_under_line": false,
                            "top": 121,
                            "left": 84,
                            "width": 600,
                            "height": 100,
                            "line_height": 1,
                            "text_shadow": "2px 3px #80808080",
                            "text_stroke": "0px #fffffff0"
                        },
                        {
                            "type": "text_mask",
                            "idx": 2,
                            "color": "#191208",
                            "opacity": 1,
                            "top": 35,
                            "left": 233,
                            "width": 302,
                            "height": 66,
                            "radius": 40,
                            "gradient": {
                                "type": "linear",
                                "gradient_units": "pixels",
                                "coords": {
                                    "x1": 0,
                                    "y1": 0,
                                    "x2": 0,
                                    "y2": 66
                                },
                                "color_stops": [
                                    {
                                        "offset": 0,
                                        "color": "#191208ff"
                                    },
                                    {
                                        "offset": 1,
                                        "color": "#191208ff"
                                    }
                                ]
                            },
                            "box_shadow": "2px 0px #80808080"
                        },
                        {
                            "type": "text",
                            "sub_type": "Title",
                            "content": "只为不一样的你",
                            "idx": 3,
                            "font_size": 36,
                            "font_family": "阿里巴巴普惠体",
                            "direction": "horizontal",
                            "alignment": "center",
                            "font_color": "#fbf0e1",
                            "opacity": 1,
                            "font_weight": "Medium",
                            "font_italic": false,
                            "font_line_through": false,
                            "font_under_line": false,
                            "top": 35,
                            "left": 233,
                            "width": 302,
                            "height": 66,
                            "line_height": 1,
                            "text_shadow": 0
                        }
                    ]
                }
            ]
        }
    },
    "usage": {
        "image_count": 4
    },
    "request_id": "7574ee8f-38a3-4b1e-9280-xxxxxxxxxxxx"
}

任务执行中

{
    "request_id":"e5d70b02-ebd3-98ce-9fe8-xxxxxxxxxxxx",
    "output":{
        "task_id":"13b1848b-5493-4c0e-xxxxxxxxxxxx",
        "task_status":"RUNNING",
        "task_metrics":{
            "TOTAL":1,
            "SUCCEEDED":1,
            "FAILED":0
        }
    }
}

任务执行失败

{
    "request_id": "dccfdf23-b38e-97a6-a07b-f35118c1ada6",
    "output": {
        "task_id": "4cbabbdf-2c1f-43f4-b983-c2cc47f4c115",
        "task_status": "FAILED",
        "submit_time": "2024-05-16 14:15:14.103",
        "scheduled_time": "2024-05-16 14:15:14.154",
        "end_time": "2024-05-16 14:15:14.694",
        "code": "InvalidParameter.FileDownload",
        "message": "download for input_image error"
    }
}

请求失败

{
    "request_id": "7574ee8f-38a3-4b1e-9280-11c33ab46e51"
  	"output": {
      "task_id": "a8532587-fa8c-4ef8-82be-0c46b17950d1", 
    	"task_status": "FAILED",
    	"code": "xxx", 
    	"message": "xxxxxx", 
    }  
}

output object

任务输出信息。

属性

task_id string

本次请求的异步任务的id,实际任务结果需要通过异步任务查询接口获取。

task_status string

任务状态。

  • PENDING:排队中

  • RUNNING:处理中

  • SUSPENDED:挂起

  • SUCCEEDED:执行成功

  • FAILED:执行失败

  • UNKNOWN:任务不存在或状态未知。

results list

返回结果图像,图像分辨率大小与输入input.base_image_url图像的相同。

如果输入了input.title,文字title也会叠加到图片上。

示例值: [{"url":"http://oss.aliyuncs.com/xxx/a.jpg"},{"url":"http://oss.aliyuncs.com/xxx/b.jpg"}]。

text_results object

标题文字子结果对象,如果没有输入input.title,则不返回该字段。

属性

urls list

生成的未叠加文字的图片结果。

示例值: [{"url":"http://oss.aliyuncs.com/xxx/c.jpg"},{"url":"http://oss.aliyuncs.com/xxx/d.jpg"}]。

params list[object]

对应每一张图的文字参数。

属性

sample_idx integer

输出图像的索引。

layers list[object]

输出图像中图层对象列表。

分为两种图层对象。

  • 文字图层对象:type=text

  • 蒙版图层对象:type=text_mask

文字图层对象属性

type string

固定值"text"。

sub_type string

文本类型,如Title:主标题,SubTitle:副标题。

content string

文本内容,默认“标题”。

idx integer

图层索引,从0开始。

font_family string

使用的字体名称,目前支持的包括:阿里巴巴普惠体、站酷文艺体、钉钉进步体。

font_size integer

文字字号大小。

font_weight string

字重,可选值包括:bold,normal,light,regular。

font_color string

字体颜色,采用HEX表示的RGB。

direction string

文字方向。

horizon:水平,vertical:垂直。

alignment string

对齐方式:left、middle、right。

opacity float

透明度,0~1,1完全不透明。

font_italic bool

是否斜体。

font_line_through bool

是否删除线。

font_under_line bool

是否下划线。

line_height float

表示行高大小。

top integer

文本框坐标的上。

left integer

文本框坐标的左。

width integer

文本框坐标的宽度。

height integer

文本框坐标的高度。

text_shadow integer

文字x方向和y方向的阴影大小与颜色,无阴影则输出None。

text_stroke integer

文字描边像素大小和颜色,无描边则输出None。

蒙版图像对象属性

type string

固定值"text_mask"。

idx integer

图层索引,大于0的整数。

color string

表示蒙版图层的颜色值。

opacity float

透明度,0~1,1完全不透明。

top integer

文本框坐标的上。

left integer

文本框坐标的左。

width integer

文本框坐标的宽度。

height integer

文本框坐标的高度。

gradient object

无渐变时,值为null;

有渐变时,类似Fabric.js的格式。color表示颜色,coords决定渐变的方向。

radius integer

圆角半径,大于0的整数。

box_shadow string

蒙版阴影效果,x方向和y方向的阴影大小和颜色,无阴影则输出None。

usage object

输出信息统计。

属性

usage.image_count integer

生成图像数量。

request_id string

请求唯一标识。可用于请求明细溯源和问题排查。

图像背景生成示例图

image

边缘引导元素生成方法

步骤1:PS抠图,导出带透明背景的4通道格式图像。

步骤2:生成边缘引导元素图像。

针对步骤2,我们提供两种方案,任选一种即可。

方案一:ModelScope在线生成。

访问ModelScope背景图edge元素生成,直接上传第一步抠图后的图像点击运行即可获得符合要求的元素图像。

方案二:使用代码本地生成。

  • 环境准备,Python环境中安装需要用到的包。

pip install controlnet-aux==0.0.7
  • 运行代码,使用如下python脚本生成边缘引导元素。

import numpy as np
from PIL import Image
from controlnet_aux.processor import Processor

hed_processor = Processor('softedge_hed')

def make_elements(name):
    img=Image.open(name)
    img=np.array(img)
    img[:,:,:-1]=img[:,:,:-1]*(img[:,:,-1:]>127)
    img=Image.fromarray(img,mode='RGBA')
    r,g,b,a=img.split()
    img=Image.merge(mode='RGB',bands=[r,g,b])
    edge = hed_processor(img, to_pil=True).resize(img.size).convert('RGB')
    edge.putalpha(a)
    edge=np.array(edge)
    edge[:,:,:-1]=edge[:,:,:-1]*(edge[:,:,-1:]>50)
    edge=Image.fromarray(edge,mode='RGBA')
    edge.save('result.png')

错误码

如果模型调用失败并返回报错信息,请参见错误码进行解决。