牙齿美化

该文档指引接入美图云修智能 API中的牙齿美化服务,需先申请接口权限后方可接入使用,接口的接入通过 HTTP 异步调用的形式接入。美图云修 API 提供的服务均为异步接口,目前提供了 2 种形式来获取结果:消息通知回调结果查询

1. 公共参数

请求头

名称类型必填f描述
Content-Typestring固定值:"application/json"

请求方法

POST

2. 接口列表

1. 预设 ID 接入

请求地址:https://api.yunxiu.meitu.com/openapi/aiteeth_async

请求方法:POST

请求头:

名称类型必填f描述
Content-Typestring固定值:"application/json"

请求参数(Query参数):

名称类型是否必填描述示例值
api_keystring应用KeyEtRGxLI8*******************aYUD2PUbMP
api_secretstring应用SecretwkTD89j******************************WUo

请求参数(Body参数):

名称类型是否必填描述示例值
media_codestring预设 ID(什么是预设ID?MTyunxiu163aa58942
media_datastring原图图片地址(不支持base64,只支持url)https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg
repost_urlstring结果回调地址,接入侧提供https://httpbin.org/

请求示例:

curl --location --request POST 'https://api.yunxiu.meitu.com/openapi/aiteeth_async?api_key=xxxx&api_secret=xxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
    "media_code": "MTyunxiu",
    "media_data": "https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg",
    "repost_url": "https://httpbin.org/",
}'

响应参数:

名称类型是否必填描述示例值
codeint业务状态码0
datastruct结果数据{ "msg_id": "8547e55f-9492-40a9-ba0d-7041b717ee5a" }
messagestring提示信息success
request_idstring请求ID30c2194d-049b-4f69-95f8-0e9b440df2eb

响应示例:

{
    "code": 0,
    "data": {
        "msg_id": "8547e55f-9492-40a9-ba0d-7041b717ee5a"
    },
    "message": "",
    "request_id": "30c2194d-049b-4f69-95f8-0e9b440df2eb"
}

2.2 原始参数接入

请求地址:https://api.yunxiu.meitu.com/openapi/aiteeth_async

请求方法:POST

请求参数(Query参数):

名称类型是否必填描述示例值
api_keystring应用KeyEtRGxLI8*******************aYUD2PUbMP
api_secretstring应用SecretwkTD89j******************************WUo

请求参数(Body参数):

名称类型是否必填描述示例值
parameterstruct处理参数查看
media_info_listarray原图图片地址查看
extrastruct其他信息{}
  • media_info_list 参数结构
名称类型是否必填描述示例值
media_datastring原图图片地址(不支持base64,只支持url)https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg
media_extrastruct资源描述额外信息{}
media_profilesstruct图片地址的资源描述固定值{"media_data_type":"url","media_data_describe":"src"}
[
    {
        "media_data": "https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg",
        "media_extra": {},
        "media_profiles": {
            "media_data_type": "url",
            "media_data_describe": "src"
        }
    }
]
  • parameter 参数结构:
名称类型是否必填描述示例值
all_paramsstruct图片处理参数查看下文
repost_urlstring结果回调地址,接入侧提供https://httpbin.org/
rsp_mask_versionint-固定值500
preview_sizeint-固定值3000
people_typearray自定义年龄性别属性的数组顺序查看下文
outputstruct输出结构查看下文
  • filter 参数结构:
名称类型是否必填描述范围示例值
filter_idstring滤镜ID
filters_lut_alphaint程度值0~100默认值50
filter_is_blackint
  • blush、eyesocket等数组中对象结构:
名称类型是否必填描述示例值
idstring效果名称,默认值空"luozhuang"
colorstring颜色值,rgba格式,默认值 0;0;0;0""
alphaint效果程度,默认值 050
  • people_type 参数结构:

该字段用来定义图片中人物性别和年龄的对应关系,目前支持设置 5 种类型的人物性别。

名称类型是否必填描述示例值
agelist定义该属性的年龄范围[50, 100]
genderint性别:1男 0女
keystring性别属性oldman
namestring性别属性名称

对于参数支持性别和年龄属性的,那么他的数据结构是一个 array,这个 array 总共有 5 个元素,分别对应 people_type 中的 5 种性别/年龄的定义,比如参数值:

beauty_belly_alpha: [10, 20, 30, 40, 50]

然后 people_type 的定义顺序为(注:people_type数组每一个元素的结构是一个对象,这里用字符串是为了方便阅读,具体的数据结构参考推荐配置):

["man", "woman", "child", "oldwoman", "oldman"]

那么表示 beauty_belly_alpha 对应会生效为:

{
    "man": 10,
    "woman": 20,
    "child": 30,
    "oldwoman": 40,
    "oldman": 50
}

推荐配置参数:

[
    {
        "age":[
            15,
            49
        ],
        "gender":1,
        "key":"man",
        "name":"男"
    },
    {
        "age":[
            15,
            49
        ],
        "gender":0,
        "key":"woman",
        "name":"女"
    },
    {
        "age":[
            0,
            14
        ],
        "gender":0,
        "key":"child",
        "name":"儿童"
    },
    {
        "age":[
            50,
            100
        ],
        "gender":0,
        "key":"oldwoman",
        "name":"老年女"
    },
    {
        "age":[
            50,
            100
        ],
        "gender":1,
        "key":"oldman",
        "name":"老年男"
    }
]
  • output 参数结构:
名称类型是否必填描述示例值
formatstring输出格式,支持jpg和pngjpg
preview_sizestring原图分割尺寸,推荐30003000
qualityKeyint输出图质量,范围1~13,数值越大对应的画质越高;默认值12,对应画质9912
resize_heightint输出图尺寸(高),0表示原图输出,默认0,保留字段暂不支持配置0
resize_widthint输出图尺寸(宽),0表示原图输出,默认0,保留字段暂不支持配置0
water_markint是否水印,0无水印 1有水印0
file_size_limitarray输出图片大小范围,以示例值来说最小不超过原图的0.8,最大不超过原图的1.3[0.8, 1.3]
  • all_params 参数结构:
客户端模块客户端参数名算法参数类型是否必填范围示例值
牙齿美化牙齿美白white_teetharray0~100默认值 0
牙齿美化牙齿修复teeth_beautyarray0、1默认值 0

请求实例:

curl --location --request POST 'https://api.yunxiu.meitu.com/openapi/aiteeth_async?api_key=xxxx&api_secret=xxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
    "parameter": {
        "repost_url": "https://httpbin.org/",
        "all_params": {
            "white_teeth": [
                30,
                30,
                30,
                30,
                30
            ],
            "teeth_beauty": [
                1,
                1,
                1,
                1,
                1
            ]
        },
        "preview_size": 3000,
        "req_mask_version": 0,
        "people_type": [
            {
                "key": "man",
                "gender": 1,
                "name": "男",
                "age": [
                    15,
                    49
                ]
            },
            {
                "key": "woman",
                "gender": 0,
                "name": "女",
                "age": [
                    15,
                    49
                ]
            },
            {
                "key": "child",
                "gender": 0,
                "name": "儿童",
                "age": [
                    0,
                    14
                ]
            },
            {
                "key": "oldwoman",
                "gender": 0,
                "name": "老",
                "age": [
                    50,
                    100
                ]
            },
            {
                "key": "oldman",
                "gender": 1,
                "name": "老",
                "age": [
                    50,
                    100
                ]
            }
        ],
        "output": {
            "file_prefix": "",
            "file_start_no": 0,
            "format": "jpg",
            "preview_size": 3000,
            "quality": 0,
            "qualityKey": 12,
            "resize_height": 0,
            "resize_width": 0,
            "water_mark": 0,
            "file_size_limit": [
                0,
                0
            ]
        }
    },
    "media_info_list": [
        {
            "media_data": "https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg",
            "media_extra": {},
            "media_profiles": {
                "media_data_type": "url",
                "media_data_describe": "src"
            }
        }
    ]
}'

3. 结果查询

1. 消息通知回调

当异步的任务处理完成后,会通过业务侧请求中的 repost_url 参数来回调通知。业务侧在处理完成后,需响应一个状态码为 200 的响应,响应体不做要求。

注意1:回调请求只会回调一次,业务方需做好服务保障,如没有接收到回调请求,可以通过主动查询来获取结果。

注意2: 同样的通知可能会多次回调给业务方,业务方的系统必须能够正确处理重复的通知。

注意3:处理回调的时候切记要判断回调内容是否正确后,再进行后续的业务逻辑处理,避免损失。

通知地址:业务方提供的 repost_url 参数

通知请求方法:POST

请求头:Content-Type:application/json

请求参数(Body参数):

名称类型是否必填描述示例值
codeint业务状态码0
datastruct结果数据查看
messagestring提示信息success
  • data 字段结构:
名称类型是否必填描述示例值
msg_idstring异步任务ID838b1d4a-ba79-44bd-b496-8a5a3b14097e
media_datastring处理好的效果图地址https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg

请求示例:

{
    "code": 0,
    "data": {
        "msg_id": "8547e55f-9492-40a9-ba0d-7041b717ee5a",
        "media_data": "https://obs-open-platform-photo.obs.cn-north-4.myhuaweicloud.com/mtopen/KxZo7A5mPWTP3FVhVThFu9VlA0s6p59c/MTY5MzE5MTYwMA==/c69a44d6-bace-446e-51e1-2dcd91a606ed.jpeg"
    },
    "message": "success",
    "request_id": "838b1d4a-ba79-44bd-b496-8a5a3b14097e"
}

3.2 轮训请求查询

注意:异步任务的结果只保存 12 个小时,请及时查询并转存效果图图片,过期后该异步任务 ID 将无法查询到结果。请求之后切记要解析响应的 Body 来做结果判断。

请求地址:https://api.yunxiu.meitu.com/openapi/query

请求方法:POST

请求参数(Body参数):

名称类型是否必填描述示例值
msg_idstring异步任务ID6aca960e-6669-4f39-805e-9bc69705b82d

请求示例:

curl --location 'https://api.yunxiu.meitu.com/openapi/query' \
--header 'Content-Type: application/json' \
--data '{
    "api_key": "EtRGxLI8*******************aYUD2PUbMP",
    "api_secret": "wkTD89j******************************WUo",
    "msg_id": "6aca960e-6669-4f39-805e-9bc69705b82d"
}'

响应参数:

名称类型是否必填描述示例值
codeint业务状态码0
datastruct结果数据参考下文示例
messagestring提示信息success
request_idstring请求ID838b1d4a-ba79-44bd-b496-8a5a3b14097e

data 字段结构:

名称类型是否必填描述示例值
msg_idstring异步任务ID838b1d4a-ba79-44bd-b496-8a5a3b14097e
media_datastring处理好的效果图地址https://beauty-public.zone1.meitudata.com/Marvel/1680141903114.jpg

响应示例:

{
    "code": 0,
    "data": {
        "msg_id": "8547e55f-9492-40a9-ba0d-7041b717ee5a",
        "media_data": "https://obs-open-platform-photo.obs.cn-north-4.myhuaweicloud.com/mtopen/KxZo7A5mPWTP3FVhVThFu9VlA0s6p59c/MTY5MzE5MTYwMA==/c69a44d6-bace-446e-51e1-2dcd91a606ed.jpeg"
    },
    "message": "success",
    "request_id": "838b1d4a-ba79-44bd-b496-8a5a3b14097e"
}

4. 错误码

错误码错误信息描述
0SUCCESS请求成功
29901NOT_RESULT图片还在处理中,结果还没出来
29902RECORD_NOT_FOUND异步任务 ID 已过期
90002GATEWAY_AUTHORIZED_ERROR接口未授权/密钥错误
11201UNKNOW ERROR用户图片地址下载失败
20001UNKNOW ERROR图片处理失败