TUTUCLOUD 人像服务 API 文档
接口鉴权
参数 sign
生成步骤:
- 抽取所有请求参数 (类型为
file
的参数不参与签名)。
- 对
参数名
以字典升序 (a-z) 进行排序。 sortedParams = {
"key1": "value1",
"key2": "value2"
}
- 以
参数名参数值
的形式拼接排序后的参数。 stringParams = "key1value1key2value2"
- 把从控制台创建应用后获取的私钥 api_secret 作为后缀拼接到上一步生成的字符串后面, 得到
待签名字符串
。 stringParams = "key1value1key2value2api_secret"
- 最后再对
待签名字符串
用 MD5 摘要算法,得到签名结果 sign
(32位小写)。 sign = md5("key1value1key2value2api_secret")
签名示例:
私钥 api_secret = "my_api_secret"
请求参数 = {
"url": "http://my.test/my.jpg",
"api_key": "my_api_key",
"timestamp": 123456
}
排序后参数 = {
"api_key": "my_api_key",
"timestamp": 123456,
"url": "http://my.test/my.jpg"
}
待签名字符串 = "api_keymy_api_keytimestamp123456urlhttp://my.test/my.jpgmy_api_secret"
sign = "be83843c50dbfe8211256694c1cc5c58"
上传人脸融合模板
POST https://api.portrait.tutucloud.com/v1/facefuse/model
HTTP header
Content-Type: multipart/form-data
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
img |
file |
img , img_base64 , url 3选1 |
图片文件 |
img_base64 |
string |
img , img_base64 , url 3选1 |
图片文件 base64 编码 |
url |
string |
img , img_base64 , url 3选1 |
图片URL |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 获取 |
cURL 请求示例
curl -X POST \
https://api.portrait.tutucloud.com/v1/facefuse/model \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F img=@test.jpg
返回示例
{
"message": "Success",
"code": 200,
"data": {
"created": "1553074748",
"faces": [ // 人脸检测框 位置信息 (归一化)
{
"index": 0,
"x": 0.375,
"y": 0.2709832191467285,
"width": 0.18828125298023225,
"height": 0.2889688313007355
}
],
"img": "https://file.portrait.tutucloud.com/g01/M00/01/20/CgoKHFzIDxWARE-FAAG2o9XdQVA533.jpg",
"model_id": "477cbf8a9a5242fb795b12789b297039"
}
}
删除人脸融合模板
DELETE https://api.portrait.tutucloud.com/v1/facefuse/model/<model_id>
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 获取 |
cURL 请求示例
curl -X DELETE \
'https://api.portrait.tutucloud.com/v1/facefuse/model/477cbf8a9a5242fb795b12789b297039?api_key=39802830831bed188884e193d8465226&sign=04b29480233f4def5c875875b6bdc3b1'
返回示例
{
"message": "Success",
"code": 200,
"data": {
"deleted": 1
}
}
获取已上传人脸融合模板列表
GET https://api.portrait.tutucloud.com/v1/facefuse/model
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
page_index |
int |
否 |
页数, 默认 1 |
page_size |
int |
否 |
每页记录数, 默认 20 , 最大为 60 |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 接口获取 |
cURL 请求示例
curl -X GET \
'https://api.portrait.tutucloud.com/v1/facefuse/model?api_key=39802830831bed188884e193d8465226&sign=04b29480233f4def5c875875b6bdc3b1&page_size=2&page=1'
返回示例
{
"message": "Success",
"code": 200,
"data": {
"total": 15,
"count": 2,
"models": [
{
"created": "1553074748",
"faces": [ // 人脸检测框 位置信息 (归一化)
{
"index": 0,
"x": 0.375,
"y": 0.2709832191467285,
"width": 0.18828125298023225,
"height": 0.2889688313007355
}
],
"img": "https://file.portrait.tutucloud.com/g01/M00/01/20/CgoKHFzIDxWARE-FAAG2o9XdQVA533.jpg",
"model_id": "477cbf8a9a5242fb795b12789b297038"
},
{
"created": "1553074749",
"faces": [],
"img": "https://file.portrait.tutucloud.com/g01/M00/01/20/CgoKHFzIDxWARE-FAAG2o9XdQVA534.jpg",
"model_id": "477cbf8a9a5242fb795b12789b297039"
}
]
}
}
人脸融合
POST https://api.portrait.tutucloud.com/v1/facefuse
HTTP header
Content-Type: multipart/form-data
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
img |
file |
img , img_base64 , url 3选1 |
图片文件 |
img_base64 |
string |
img , img_base64 , url 3选1 |
图片文件 base64 编码 |
url |
string |
img , img_base64 , url 3选1 |
图片URL |
model_id |
string |
是 |
模板ID, 需要先调用 上传模板 接口 |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 获取 |
output_format |
string |
否 |
结果图片返回形式, 可选值 [url : 图片链接, base64 : 图片文件 base64 编码], 默认以 url 返回 |
cURL 请求示例
curl -X POST \
https://api.portrait.tutucloud.com/v1/facefuse \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F model_id=477cbf8a9a5242fb795b12789b297039 \
-F img=@test.jpg
返回示例
{
"message": "Success",
"code": 200,
"data": {
"input": "https://file.portrait.tutucloud.com/g03/M00/01/0C/wKjIZ1yq69aAecIIAAD5oHJ2ocA15.jpg",
"output": "https://file.portrait.tutucloud.com/g04/M00/01/0C/wKjIaFyq69qACZArAADvHmvAzBk512.jpg"
}
}
多人脸融合
POST https://api.portrait.tutucloud.com/v1/facefuse/multi
HTTP header
Content-Type: multipart/form-data
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
img |
file |
img , img_base64 , url 3选1 |
图片文件 列表 |
img_base64 |
json |
img , img_base64 , url 3选1 |
图片文件 base64 编码 数组 |
url |
json |
img , img_base64 , url 3选1 |
图片URL 数组 |
face_index |
json |
是 |
人脸位置索引 数组, face_index 为 上传模板 接口返回: data.models.faces.index , face_index 需和上传的图片列表一一对应 |
model_id |
string |
是 |
模板ID, 需要先调用 上传模板 接口 |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 获取 |
output_format |
string |
否 |
结果图片返回形式, 可选值 [url : 图片链接, base64 : 图片文件 base64 编码], 默认以 url 返回 |
cURL 请求示例 (img)
curl -X POST \
https://api.portrait.tutucloud.com/v1/facefuse/multi \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F model_id=477cbf8a9a5242fb795b12789b297039 \
-F 'face_index=[1,3]' \
-F img=@face1.jpg \
-F img=@face3.jpg
cURL 请求示例 (url)
curl -X POST \
https://api.portrait.tutucloud.com/v1/facefuse/multi \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F model_id=477cbf8a9a5242fb795b12789b297039 \
-F 'face_index=[1,3]' \
-F 'url=["http://my.img/face_1.jpg","http://my.img/face_3.jpg"]'
返回示例
{
"message": "Success",
"code": 200,
"data": {
"input_list": [
{
"face_index": 1,
"input": "https://file.portrait.tutucloud.com/img/face_1.jpg",
},
{
"face_index": 3,
"input": "https://file.portrait.tutucloud.com/img/face_3.jpg",
}
],
"output": "https://file.portrait.tutucloud.com/g04/M00/01/0C/wKjIaFyq69qACZArAADvHmvAzBk512.jpg"
}
}
人脸微整形
POST https://api.portrait.tutucloud.com/v1/plastic
HTTP header
Content-Type: multipart/form-data
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
img |
file |
img , img_base64 , url 3选1 |
图片文件 |
img_base64 |
string |
img , img_base64 , url 3选1 |
图片文件 base64 编码 |
url |
string |
img , img_base64 , url 3选1 |
图片URL |
args |
json |
否 |
微整形参数, 详见下表 |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 获取 |
output_format |
string |
否 |
结果图片返回形式, 可选值 [url : 图片链接, base64 : 图片文件 base64 编码], 默认以 url 返回 |
整形参数 args
参数名 |
值范围 |
默认值 |
说明 |
eyeEnlargeSize |
[0.0, 1.0] |
0.6 |
大眼 |
chinSize |
[0.0, 1.0] |
0.5 |
瘦脸 |
noseSize |
[0.0, 1.0] |
0.0 |
瘦鼻 |
mouthWidth |
[-1.0, 1.0] |
0.0 |
嘴宽 |
eyebrowArch |
[-1.0, 1.0] |
0.0 |
眉宽 |
eyeDis |
[-1.0, 1.0] |
0.0 |
眼距 |
eyeAngle |
[-1.0, 1.0] |
0.0 |
眼角 |
jawSize |
[-1.0, 1.0] |
0.0 |
下巴 |
cURL 请求示例
curl -X POST \
https://api.portrait.tutucloud.com/v1/plastic \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F 'args={"eyeEnlargeSize": 1.2, "chinSize": 0.05, "jawSize": -0.01}' \
-F img=@test.jpg
返回示例
{
"message": "Success",
"code": 200,
"data": {
"input": "https://file.portrait.tutucloud.com/g03/M00/01/0C/wKjIZ1yq69aAecIIAAD5oHJ2ocA15.jpg",
"output": "https://file.portrait.tutucloud.com/g04/M00/01/0C/wKjIaFyq69qACZArAADvHmvAzBk512.jpg"
}
}
人像美颜
POST https://api.portrait.tutucloud.com/v1/beautify
HTTP header
Content-Type: multipart/form-data
参数
参数名 |
类型 |
是否必填 |
说明 |
api_key |
string |
是 |
应用 api_key |
sign |
string |
是 |
参数签名 |
img |
file |
img , img_base64 , url 3选1 |
图片文件 |
img_base64 |
string |
img , img_base64 , url 3选1 |
图片文件 base64 编码 |
url |
string |
img , img_base64 , url 3选1 |
图片URL |
mode |
string |
否 |
美颜模式, 可选值: [natural : 精准, moist : 极致], 默认值:natural |
args |
json |
否 |
微整形参数, 详见下表 |
timestamp |
int |
否 |
unix时间戳, 从接口 /timestamp 获取 |
output_format |
string |
否 |
结果图片返回形式, 可选值 [url : 图片链接, base64 : 图片文件 base64 编码], 默认以 url 返回 |
美颜参数 args
参数名 |
值范围 |
默认值 |
说明 |
smoothing |
[0.0, 1.0] |
0.5 |
磨皮 |
fair |
[0.0, 1.0] |
0.0 |
美白 |
ruddy |
[0.0, 1.0] |
0.0 |
红润 |
cURL 请求示例
curl -X POST \
https://api.portrait.tutucloud.com/v1/beautify \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F mode=moist \
-F 'args={"smoothing": 0.8, "ruddy": 1.0}' \
-F img=@test.jpg
返回示例
{
"message": "Success",
"code": 200,
"data": {
"input": "https://file.portrait.tutucloud.com/g03/M00/01/0C/wKjIZ1yq69aAecIIAAD5oHJ2ocA15.jpg",
"output": "https://file.portrait.tutucloud.com/g04/M00/01/0C/wKjIaFyq69qACZArAADvHmvAzBk512.jpg"
}
}
获取时间戳
GET https://api.portrait.tutucloud.com/timestamp
如请求其它接口时传了timestamp
参数, 服务器则会和当前时间进行比较, 如晚于服务器当前时间超过60秒, 则会拒绝服务。
参数
无
返回示例
{
"message": "Success",
"code": 200,
"data": {
"timestamp": 1553249584
}
}
返回码
返回码 |
说明 |
200 |
请求成功 |
4000 |
无效的请求 |
4001 |
无效的 api_key 参数 |
4002 |
缺少必填参数 |
4003 |
签名验证失败 |
4004 |
获取上传文件失败 |
4005 |
无效的 model_id 参数 |
4006 |
无效的 timestamp 参数 |
4007 |
文件格式不支持 |
4008 |
文件大小超过最大限制 |
4009 |
从 url 下载文件失败 |
4010 |
服务未开通 |
4011 |
余额不足 |
4012 |
请求数超过最大限制 |
4013 |
无效的美颜 mode 参数 |
4014 |
url 输入文件未找到或已过期 |
4100 |
args 参数格式错误, 必须为 json |
4101 |
url 参数格式错误, 必须为 json |
4102 |
img_base64 参数格式错误, 必须为 json |
4103 |
face_index 参数格式错误, 必须为 json |
4200 |
未检到人脸 |
4201 |
face_index 和 上传文件 数量不匹配 |
4202 |
错误的 face_index 值 |
500 |
内部服务错误 |
5001 |
服务处理失败 |
5003 |
服务不可用 |
tips
- 图片参数:当图片参数
img
, img_base64
, url
同时传入时, 服务器会以 img
> img_base64
> url
的优先级顺序去获取图片。
- 提升效率:根据使用场景,若需要对同一张图片进行不同的参数调节,如切换人脸融合模板或者是调节微整形、美颜参数,只需要将首次请求后返回的
input
字段作为图片参数 url
传入, 即可节省重复传输图片的时间。