图片人工审核结果
图片人工审核结果获取方式
当机器检测结果发生变化,或者人工进行审核,需要获取人工审核结果。目前人工审核结果获取支持2种方式:离线接口获取和回调方式获取,具体获取方法如下
离线接口获取地址
http://as.dun.163.com/v4/image/callback/results
接口描述
建议您使用POST请求, 且仅接受 application/x-www-form-urlencoded 编码格式。
在线检测接口结果中嫌疑的数据,会进行离线分析和人工审核,这些数据的离线结果需要客户通过该接口进行定时获取。获取离线处理的数据后,下次调用,不会再次返回之前获取过的离线数据。,接口一次最多返回200个结果,建议30秒获取一次。
接口请求频率
小于10s/20次,请求频率过快服务器会拒绝处理。
请求参数
该接口参数与请求公共参数一致,详细见 请求公共参数
参数名称 | 类型 | 是否必选 | 最大长度 | 描述 |
---|---|---|---|---|
version | String | Y | 4 | 接口版本v4 |
响应结果
响应字段如下,响应通用字段已省略,详细见 响应通用字段:
antispam 数组数据结构
参数名称 | 类型 | 描述 |
---|---|---|
name | String | 图片名称(或图片标识) |
taskId | String | 在线接口检测返回的数据请求标识,可以根据该标识查询数据最新结果 |
action | Number | 建议动作,2:建议删除,0:建议通过 |
censorSource | Number | 审核来源,0:易盾人审,1:客户人审,2:易盾机审 版本支持v4及以上 |
censorRound | Number | 审核轮数,1:第1轮人审,2:第2轮人审,3:第3轮人审,4:第4轮人审,5:第5轮人审,未设置审核模式默认返回0 |
censorTime | Number | 人工审核完成时间,毫秒单位时间戳(13位) |
labels | json数组 | 分类信息 |
censorLabels | json数据 | 支持在智能审核系统自定义标签分类信息 |
labels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
label | Number | 分类信息,100:色情,110:性感低俗,200:广告,210:二维码,260:广告法,300:暴恐,400:违禁,500:涉政 |
level | Number | 分类级别,0:正常,2:确定 |
rate | Number | 置信度分数 |
censorLabels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
code | Number | 在智能系统配置自定义标签之后会生成一个唯一的标签ID |
desc | String | 在智能审核系统配置自定义标签备注 |
响应示例
输出结果:
注:分类信息,100:色情,110:性感低俗,200:广告,210:二维码,300:暴恐,400:违禁,500:涉政
{
"code": 200,
"msg": "ok",
"antispam": [{
"name": "1234",
"taskId": "d1cd2e02f10249a6b62da9b4bf0e04ea",
"action": 2,
"censorSource": 0,
"censorRound":0,
"censorTime":1612234421000,
"labels": [{
"label": 100,
"level": 0,
"rate": 1.0
}, {
"label": 110,
"level": 0,
"rate": 1.0
}, {
"label": 200,
"level": 0,
"rate": 1.0
}, {
"label": 210,
"level": 0,
"rate": 1.0
}, {
"label": 300,
"level": 0,
"rate": 1.0
}, {
"label": 400,
"level": 0,
"rate": 1.0
}, {
"label": 500,
"level": 2,
"rate": 1.0
}]
}],
"censorLabels":[
{
"code":自定义标签映射ID
}]
}
图片回调方式获取
回调方式以数据为维度,由客户设置回调地址;当机器检测结果发生变化,或者人工进行审核后,会触发主动回调,调用客户提供的回调接口返回审核结果。
回调接入说明
接入回调方式很简单,只需要在调用在线检测接口请求参数中指定了回调通知参数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字符串,数据结构如下:
{
"name":"test",
"taskId":"0b73637c54d547439a2c835b09dfdb74",
"action":0,
"censorSource": 0,
"censorRound":0,
"censorTime":1612234421000,
"labels":[
{
"label":100,
"level":0,
"rate":1
},
{
"label":200,
"level":0,
"rate":1
},
{
"label":210,
"level":0,
"rate":1
},
{
"label":300,
"level":0,
"rate":1
},
{
"label":400,
"level":0,
"rate":1
},
{
"label":500,
"level":0,
"rate":1
},
{
"label":900,
"level":0,
"rate":1
}
],
"censorLabels":[
{
"code":自定义标签映射ID
}]
}