关于七牛内容审核的介绍
在七牛的控制台找到智能多媒体
接下来找到智能内容审核,可以看到一些审核数据情况,主要包含:鉴黄、暴恐、敏感人物
另外看一下API接口说明:
查看地址是:https://developer.qiniu.com/dora/api/4252/image-review
主要分为两部分接口:新图片和旧图片。具体接口内容可点击上面地址进去看,此处不作详细介绍。
2、主动提交到七牛进行审核
顾名思义就是将现有的图片提交到七牛进行审核,以下是实现代码,我这里的例子只给出了传图片url的方式,当然也可以传图片的base64码上去进行审核
以下是说明:
图片资源。支持两种资源表达方式:
- 网络图片URL地址,支持http及https;
- 图片 base64 编码字符串,需在编码字符串前加上前缀 data:application/octet-stream;base64, 例:data:application/octet-stream;base64,xxx
以下是代码演示:
public static JSONObject checkImage(String imageUrl) {
//基础参数拼接
String url = "http://ai.qiniuapi.com/v3/image/censor";
String host = "ai.qiniuapi.com";
String body = "{ \"data\": { \"uri\": \""+imageUrl+"\" }, \"params\": { \"scenes\": [ \"pulp\", \"terror\", \"politician\" ] } }";
String contentType = "application/json";
String method = "POST";
Auth auth = Auth.create(accessKey, secretKey);
String qiniuToken = "Qiniu " + auth.signRequestV2(url, method, body.getBytes(), contentType);
log.info("url={},body={},qiniuToken={}",url,body,qiniuToken);
//头部部分
StringMap header = new StringMap();
header.put("Host",host);
header.put("Authorization",qiniuToken);
header.put("Content-Type", contentType);
Configuration c = new Configuration(Region.huadong());
Client client = new Client(c);
try {
Response response = client.post(url, body.getBytes(), header, contentType);
log.info("response result={}",response.bodyString());
JSONObject checkResult = JSON.parseObject(response.bodyString());
return checkResult;
} catch (QiniuException e) {
e.printStackTrace();
}
return null;
}
public static Map<String,Object> handleImageResult(String attach){
JSONObject attachObj = JSON.parseObject(attach);
String imageUrl = attachObj.getString("url");
if (StringUtils.isNotBlank(imageUrl)){
JSONObject checkResult = QiNiuYunUtil.checkImage(imageUrl);
if (checkResult.getIntValue("code")==200){
JSONObject imgResult = checkResult.getJSONObject("result");
JSONObject scenes = imgResult.getJSONObject("scenes");
//色情校验
JSONObject pulp = scenes.getJSONObject("pulp");
if (ObjectUtils.isNotEmpty(pulp.get("details"))) {
JSONObject detail = pulp.getJSONArray("details").getJSONObject(0);
if(detail.getString("label").equals("pulp")){
return ImmutableMap.of("errCode",1,"errMsg","图片存在色情要素","responseCode",2001);
}
}
//图片鉴暴恐
JSONObject terror = scenes.getJSONObject("terror");
if(!StringUtils.equals(terror.getString("suggestion"),"pass")){
return ImmutableMap.of("errCode",1,"errMsg","图片存在暴恐要素","responseCode",2001);
}
//图片敏感人物识别
JSONObject politician = scenes.getJSONObject("politician");
if(!StringUtils.equals(politician.getString("suggestion"),"pass")){
return ImmutableMap.of("errCode",1,"errMsg","图片敏感人物要素","responseCode",2001);
}
}
}
return ImmutableMap.of("errCode",0,"errMsg","通过","responseCode",2000);
}
3、增量审核七牛进行审核
换一种更好的理解方式就是:
我们上传图片到七牛的时候,七牛自动帮我们审核,如果图片违规,七牛会自动禁掉,如果认定为需要复审,比如说一些性感图片,不确定你们网站是否可以放,需要商户自己处理审核结果。七牛的做法是,每一张图片审核都通知到审核。
七牛增量审核适用于对上传于七牛对象存储的资源实时触发内容审核的场景。开启七牛增量审核后,能帮助您在秒级时间内审核新上传的资源,并支持及时地对违规资源执行自动封禁,保障业务安全。
适用需求场景:
您有新资源上传于七牛对象存储
您需要在资源上传后,实时触发内容审核
您需要做审核的资源,无前缀要求 或者 属于指定的前缀下
您需要对违规资源做自动封禁 或者 您有人力在审核完成后做审核结果复核
下面是介绍如何开通增量审核的地址:https://developer.qiniu.com/censor/manual/5922/incremental-audit#3
关于增量接口回调介绍可以参考以下地址:
https://developer.qiniu.com/censor/manual/5920/incremental-audit-callback
我这边给大家看一下我的接收七牛通知的写法:
接口层:
/**
* 七牛图片审核回调
* @param param
* @return
*/
@ResponseBody
@RequestMapping("/checkFileCallBack.do")
@NoneAuth
@LogConfig(actionName = "七牛图片审核回调")
public ResponseVo checkFileCallBack(@RequestBody JSONObject param){
try{
log.info("checkFileCallBack param={}",param.toJSONString());
this.commonService.checkFileCallBack(param);
return ResponseVo.buildSuccessResponse();
}catch (Exception e){
log.error("checkFileCallBack e={}",e);
return ResponseVo.buildFaildResponse();
}
}
服务层:
/**
* 处理审核结果
* @param param
*/
@Override
public void checkFileCallBack(JSONObject param) {
//图片地址
String inputKey = param.getString("inputKey");
//空间
String inputBucket = param.getString("inputBucket");
//获取审核项
JSONObject item = (JSONObject) param.getJSONArray("items").get(0);
//是否直接被禁用了
boolean disable = item.getJSONObject("result").getBoolean("disable");
boolean qiniuCheckFlag = false;
if (disable){
// 默友官方禁用或者删除
qiniuCheckFlag = true;
}else{
//查看审核结果,是否需要复核
JSONObject checkResult = item.getJSONObject("result").getJSONObject("result");
//处理结果
int resultCode = checkResult.getIntValue("code");
if (resultCode== HttpStatus.SC_OK){
JSONObject scenesResult = checkResult.getJSONObject("scenes");
//鉴黄
JSONObject pulpResult = scenesResult.getJSONObject("pulp");
String suggestion = pulpResult.getString("suggestion");
//表示系统确认审核内容违规,建议您将其删除。
if (StringUtils.equals(suggestion,"block")){
// 默友官方禁用或者删除
qiniuCheckFlag = true;
}
//图片鉴暴恐
JSONObject terrorResult = scenesResult.getJSONObject("terror");
//表示系统确认审核内容违规,建议您将其删除。
suggestion = terrorResult.getString("suggestion");
if (StringUtils.equals(suggestion,"block")){
// 默友官方禁用或者删除
qiniuCheckFlag = true;
//表示系统无法确认审核内容是否违规,建议您进行人工复核。
}
//图片敏感人物识别
JSONObject politician = scenesResult.getJSONObject("politician");
suggestion = politician.getString("suggestion");
if (StringUtils.equals(suggestion,"block")){
// 默友官方禁用或者删除
qiniuCheckFlag = true;
}
//广告识别
JSONObject ads = scenesResult.getJSONObject("ads");
if (null!=ads){
suggestion = ads.getString("suggestion");
if (StringUtils.equals(suggestion,"block")){
// 默友官方禁用或者删除
qiniuCheckFlag = true;
//表示系统无法确认审核内容是否违规,建议您进行人工复核。
}
}
}else{
String msg = checkResult.getString("msg");
log.info("checkFileCallBack code={} msg={}",resultCode,msg);
}
}
if (qiniuCheckFlag) {
//更新文件记录
this.attachFilesService.qiniuCheckFile(inputKey,param.toJSONString());
}
}