图片异步检测获取结果
图片异步检测离线接口获取检测结果
接口地址
http://as.dun.163yun.com/v4/image/asyncResult
接口描述
通过taskid查询图片异步检测结果,建议您将查询间隔设置为30秒(即在提交异步检测任务30秒后查询结果),查询范围不超出4个小时,否则结果将会丢失。只支持查询机器检测结果,如有人工审核请到图片离线接口获取人工质检结果。
请求参数
公共参数已省略,详细见 请求公共参数
请求参数说明
参数名称 | 类型 | 描述 |
---|---|---|
version | String | 接口版本v4 |
taskIds | String | 单次支持最多查询1000条,用逗号分隔 |
响应结果
参数名称 | 类型 | 描述 |
---|---|---|
code | Number | 接口调用状态,200:正常,其他值:调用出错,返回码见 响应返回码 |
msg | String | 结果说明,如果接口调用出错,那么返回错误描述,成功返回 ok |
antispam | 数组 | 异步检测返回结果与在线检返回结构一致,具体结构请参考在线检测antispam数组 |
响应示例
请求示例
{
"signature":"30d57ebc7cd95ecce981879c9ca820a2,
"businessId":"业务id",
"secretId":"产品密钥信息",
"nonce":"2343567",
"timestamp":"1603854848319,
"version":"v4",
"taskIds":"9c92b16325a2467e93f10f616f2a7e56,5eff1e33a9dc454c80f26f94d4717bca"
}
输出结果:
注:分类信息,100:色情,110:性感,200:广告,210:二维码,300:暴恐,400:违禁,500:涉政,800:恶心,900:其他,1100:涉价值观
{
"code":200,
"msg":"ok",
"antispam":[
{
"censorType":0,
"name":"test",
"action":2,
"taskId":"9c92b16325a2467e93f10f616f2a7e56",
"labels":[
{
"subLabels":[
{
"subLabel":11007,
"rate":0.9980344,
"details":{
"hitInfos":[
"男性露点赤膊"
],
"imageTagInfos":[
{
"tagGroup":"性感低俗",
"tagName":"男性露点赤膊"
}
]
}
}
],
"level":2,
"rate":0.9467765,
"label":110
},
{
"subLabels":[
],
"level":0,
"rate":0.9414334,
"label":500
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":300
},
{
"subLabels":[
],
"level":0,
"rate":0.9469082,
"label":100
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":400
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":200
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":210
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":900
}
],
"status":0
},
{
"censorType":0,
"name":"test",
"action":0,
"taskId":"5eff1e33a9dc454c80f26f94d4717bca",
"labels":[
{
"subLabels":[
],
"level":0,
"rate":0.9716758,
"label":500
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":300
},
{
"subLabels":[
],
"level":0,
"rate":0.9999276,
"label":100
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":400
},
{
"subLabels":[
],
"level":0,
"rate":0.9997206,
"label":110
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":200
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":210
},
{
"subLabels":[
],
"level":0,
"rate":1,
"label":900
}
],
"status":0
}
],
"ocr":[
{
"name":"test",
"width":360,
"details":[
],
"taskId":"9c92b16325a2467e93f10f616f2a7e56",
"height":640
},
{
"name":"test",
"width":597,
"details":[
],
"taskId":"5eff1e33a9dc454c80f26f94d4717bca",
"height":398
}
],
"face":[
{
"name":"test",
"details":[
],
"taskId":"9c92b16325a2467e93f10f616f2a7e56"
},
{
"name":"test",
"details":[
],
"taskId":"5eff1e33a9dc454c80f26f94d4717bca"
}
],
"quality":[
{
"name":"test",
"details":[
{
"metaInfo":{
"byteSize":91573,
"format":"jpg",
"width":360,
"height":640
},
"aestheticsRate":0.53,
"boarderInfo":{
"hit":false,
"top":false,
"left":false,
"bottom":false,
"right":false
},
"backgroundInfo":{
"pureBackground":true
}
}
],
"taskId":"9c92b16325a2467e93f10f616f2a7e56"
},
{
"name":"test",
"details":[
{
"metaInfo":{
"byteSize":61973,
"format":"jpg",
"width":597,
"height":398
},
"aestheticsRate":0.47,
"boarderInfo":{
"hit":false,
"top":false,
"left":false,
"bottom":false,
"right":false
},
"backgroundInfo":{
"pureBackground":false
}
}
],
"taskId":"5eff1e33a9dc454c80f26f94d4717bca"
}
],
"logo":[
{
"name":"test",
"details":[
],
"taskId":"9c92b16325a2467e93f10f616f2a7e56"
},
{
"name":"test",
"details":[
],
"taskId":"5eff1e33a9dc454c80f26f94d4717bca"
}
],
"scene":[
{
"name":"test",
"details":[
],
"taskId":"9c92b16325a2467e93f10f616f2a7e56"
},
{
"name":"test",
"details":[
],
"taskId":"5eff1e33a9dc454c80f26f94d4717bca"
}
]
}
图片异步检测回调方式获取
当图片异步检测完成,即触发回调,将检测结果回调给客户设置的回调地址callbackUrl。
回调接入说明
接入回调方式很简单,只需要在调用在线检测接口请求参数中指定了回调通知参数callbackUrl(即一个http(s)协议接口的URL)。主动推送接口需要支持http协议,支持POST方法,传输数据编码采用utf-8。
业务类型 | 回调参数名称 | 类型 | 最大长度 | 描述 |
---|---|---|---|---|
图片 | callbackUrl | String | 256 | 图片在线检测参数中添加callbackUrl字段 |
回调状态
您服务端接收到我们回调的结果后,返回的HTTP状态码为200时,表示推送成功,其他的HTTP状态码均视为您接收失败,我们将每隔10分钟推送一次,如果一直失败,持续一天后不再推送;我们主动推送数据接口超时时间设置为2s,为了保证顺利接收数据,客户需保证接收接口性能稳定并且保证幂等性。
请求公共参数
| 参数名称 | 类型 | 是否必传 | 描述 | |----------|------|------|------|-----| | secretId | String | Y | 产品秘钥 id ,由易盾反垃圾云服务分配,产品标识 | | businessId | String | Y | 业务id ,由易盾反垃圾云服务分配,业务标识 | | signature | String | Y | 请求签名,用来验证此次请求的合法性,具体算法见 接口鉴权 | | callbackData | String | Y | 主动推送推送数据,格式为json字符串 |
secretId,businessId,signature参数用来给数据接收接口做签名鉴权用
接口鉴权
回调结果可以通过业务开通时易盾分配的密钥信息字段进行接口鉴权,鉴权粒度是否要精确到业务级别,用户可以根据需要自行决定
/**
* 通过HttpServletRequest做签名验证
*
* @param request
* @return
*/
public static boolean verifySignature(HttpServletRequest request) {
String secretId = request.getParameter("secretId");
String businessId = request.getParameter("businessId");
String signature = request.getParameter("signature");
if (StringUtils.isEmpty(secretId) || StringUtils.isEmpty(signature)) {
// 签名参数为空,直接返回失败
return false;
}
Map<String, String> params = Maps.newHashMap();
for (String paramName : request.getParameterMap().keySet()) {
if (!"signature".equals(paramName)) {
params.put(paramName, request.getParameter(paramName));
}
}
// SECRETKEY:产品私有密钥 SECRETID:产品密钥ID BUSINESSID:业务ID,开通服务时,易盾会提供相关密钥信息
String serverSignature = getSignature(SECRETKEY, params);
return signature.equals(serverSignature) && SECRETID.equals(secretId) && BUSINESSID.equals(businessId);
}
/**
* 生成签名信息
* @param secretKey 产品私钥
* @param params 接口请求参数名和参数值map,不包括signature参数名
* @return
* @throws UnsupportedEncodingException
*/
public static String genSignature(String secretKey, Map<String, String> params) throws UnsupportedEncodingException {
// 1. 参数名按照ASCII码表升序排序
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 2. 按照排序拼接参数名与参数值
StringBuffer paramBuffer = new StringBuffer();
for (String key : keys) {
paramBuffer.append(key).append(params.get(key) == null ? "" : params.get(key));
}
// 3. 将secretKey拼接到最后
paramBuffer.append(secretKey);
// 4. MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。
return DigestUtils.md5Hex(paramBuffer.toString().getBytes("UTF-8"));
}
图片回调数据结构
callbackData为Json字符串,数据结构如下:
{
"antispam":{
"taskId":"d6ee044528994919b0b3a5a79292f8df",
"status":0,
"action":2,
"censorType":1,
"name":"1234",
"labels":[
{
"label":500,
"level":2,
"rate":1,
"subLabels":[
{
"subLabel":50003,
"rate":1,
"details":{
"hitInfos":[
"习近平"
],
"hitLocationInfos":[
{
"hitInfo":"习近平",
"x1":0.4133789,
"y1":0.18320313,
"x2":0.5089844,
"y2":0.37441406
}
]
}
}
]
},
{
"label":100,
"level":2,
"rate":1,
"subLabels":[
{
"subLabel":10000,
"rate":1
}
]
},
{
"label":200,
"level":1,
"rate":1,
"subLabels":[
{
"subLabel":20001,
"rate":1
}
]
},
{
"label":300,
"level":0,
"rate":1,
"subLabels":[
]
},
{
"label":400,
"level":0,
"rate":1,
"subLabels":[
]
},
{
"label":110,
"level":0,
"rate":0.99967885,
"subLabels":[
]
},
{
"label":800,
"level":0,
"rate":0.99833876,
"subLabels":[
]
},
{
"label":260,
"level":0,
"rate":1,
"subLabels":[
]
},
{
"label":210,
"level":0,
"rate":1,
"subLabels":[
]
},
{
"label":1100,
"level":0,
"rate":1,
"subLabels":[
]
}
]
},
"ocr":{
"taskId":"d6ee044528994919b0b3a5a79292f8df",
"name":"1234",
"height":720,
"width":1440,
"details":[
{
"content":"CCTV1直播绘合",
"background":"complex",
"lineContents":[
{
"lineContent":"CCTV1",
"polygon":[
0.13751561641693116,
0.0978124976158142,
0.23904688358306886,
0.0978124976158142,
0.23904688358306886,
0.1615625023841858,
0.13751561641693116,
0.1615625023841858
],
"lang":"zh"
},
{
"lineContent":"直播",
"polygon":[
0.7670937538146972,
0.08812500238418579,
0.8704062461853027,
0.08812500238418579,
0.8704062461853027,
0.15562499761581422,
0.7670937538146972,
0.15562499761581422
],
"lang":"zh"
},
{
"lineContent":"绘合",
"polygon":[
0.14474029541015626,
0.15250444412231445,
0.2521347522735596,
0.15250444412231445,
0.2521347522735596,
0.21624560356140138,
0.14474029541015626,
0.21624560356140138
],
"lang":"zh"
}
]
}
]
},
"face":{
"taskId":"d6ee044528994919b0b3a5a79292f8df",
"name":"1234",
"details":[
{
"faceNumber":1,
"faceContents":[
{
"name":"习近平",
"x1":0.4133789,
"y1":0.18320313,
"x2":0.5089844,
"y2":0.37441406,
"type":"normal",
"category":"normal",
"gender":"male",
"age":46
}
]
}
]
},
"quality":{
"taskId":"d6ee044528994919b0b3a5a79292f8df",
"name":"1234",
"details":[
{
"aestheticsRate":0.4031,
"sharpnessRate":0.2098,
"metaInfo":{
"byteSize":33204,
"height":720,
"width":1440,
"format":"jpg"
},
"boarderInfo":{
"hit":false,
"top":false,
"right":false,
"bottom":false,
"left":false
},
"backgroundInfo":{
"pureBackground":false
}
}
]
},
"logo":{
"taskId":"d6ee044528994919b0b3a5a79292f8df",
"name":"1234",
"details":[
]
},
"scene":{
"taskId":"d6ee044528994919b0b3a5a79292f8df",
"name":"1234",
"details":[
]
}
}