标签:计费 概率 ISE uuid 获得 catch sage dom action
AliyunContentSafetyService.java
`@Component
public class AliyunContentSafetyService {
/**
* 图片鉴黄
*/
public static final String SCENE_PORN="porn";
/**
* 图片暴恐涉政
*/
public static final String SCENE_TERRORISM="terrorism";
/**
* 图文违规
*/
public static final String SCENE_AD="ad";
/**
* 图片二维码
*/
public static final String SCENE_QRCODE="qrcode";
/**
* 图片不良场景
*/
public static final String SCENE_LIVE="live";
/**
* 图片logo
*/
public static final String SCENE_LOGO="logo";
/**
* 文本内容检测 文本检测不可和图片检测一起使用
*/
public static final String SCENE_ANTISPAM="antispam";
private static final Logger logger=LoggerFactory.getLogger(AliyunContentSafetyService.class);
@Value("${oss.region}")
private static String region;
@Value("${oss.accessKeyId}")
private static String accessKeyId;
@Value("${oss.secretAccessKey}")
private static String secretAccessKey;
/**
* 检测图片
* @param scenes 官方检测场景
* @param bizType 自定义业务检测场景
* @param photos 需要检测的图片地址 非本地
* @return
*/
public static List photoSafety(List scenes,String bizType,List photos) {
if(photos == null || photos.isEmpty()) {
logger.error("photos is empty");
return null;
}
IClientProfile profile = DefaultProfile
.getProfile(region, accessKeyId, secretAccessKey);
IAcsClient client = new DefaultAcsClient(profile);
ImageSyncScanRequest imageSyncScanRequest = new ImageSyncScanRequest();
// 指定API返回格式。
imageSyncScanRequest.setAcceptFormat(FormatType.JSON);
// 指定请求方法。
imageSyncScanRequest.setMethod(MethodType.POST);
imageSyncScanRequest.setEncoding("utf-8");
// 支持HTTP和HTTPS。
imageSyncScanRequest.setProtocol(ProtocolType.HTTP);
JSONObject httpBody = new JSONObject();
/**
* 设置要检测的风险场景。计费依据此处传递的场景计算。
* 一次请求中可以同时检测多张图片,每张图片可以同时检测多个风险场景,计费按照场景计算。
* 例如,检测2张图片,场景传递porn和terrorism,计费会按照2张图片鉴黄,2张图片暴恐检测计算。
* scenes:表示鉴黄场景。
*/
httpBody.put("scenes", scenes);
if(StringUtils.isBlank(bizType)) {
httpBody.put("bizType", Arrays.asList(bizType));
}
List tasks=new ArrayList();
for(String photo:photos) {
/**
* 设置待检测图片。一张图片对应一个task。
* 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
* 通常情况下批量检测的平均响应时间比单张检测的要长。一次批量提交的图片数越多,响应时间被拉长的概率越高。
* 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个task。
*/
JSONObject task = new JSONObject();
task.put("dataId", UUID.randomUUID().toString());
// 设置图片链接。
task.put("url", photo);
task.put("time", new Date());
tasks.add(task);
}
httpBody.put("tasks", tasks);
imageSyncScanRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()),
"UTF-8", FormatType.JSON);
/**
* 请设置超时时间。服务端全链路处理超时时间为10秒,请做相应设置。
* 如果您设置的ReadTimeout小于服务端处理的时间,程序中会获得一个read timeout异常。
*/
imageSyncScanRequest.setConnectTimeout(3000);
imageSyncScanRequest.setReadTimeout(10000);
HttpResponse httpResponse = null;
try {
httpResponse = client.doAction(imageSyncScanRequest);
logger.info("send photoSafety request");
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
List results=new ArrayList();
// 服务端接收到请求,完成处理后返回的结果。
if (httpResponse != null && httpResponse.isSuccess()) {
JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent()));
System.out.println(JSON.toJSONString(scrResponse, true));
int requestCode = scrResponse.getIntValue("code");
// 每一张图片的检测结果。
JSONArray taskResults = scrResponse.getJSONArray("data");
if (200 == requestCode) {
for (Object taskResult : taskResults) {
// 单张图片的处理结果。
int taskCode = ((JSONObject) taskResult).getIntValue("code");
// 图片对应检测场景的处理结果。如果是多个场景,则会有每个场景的结果。
JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results");
if (200 == taskCode) {
for (Object sceneResult : sceneResults) {
ContentSafetyResult result=new ContentSafetyResult();
result.setScene(((JSONObject) sceneResult).getString("scene"));
result.setSuggestion(((JSONObject) sceneResult).getString("suggestion"));
result.setLabel(((JSONObject) sceneResult).getString("label"));
result.setContent(((JSONObject) taskResult).getString("url"));
result.setType(ContentSafetyResult.TYPE_PHOTO);
results.add(result);
}
} else {
// 单张图片处理失败, 原因视具体的情况详细分析。
logger.error("task process fail. task response:" + JSON.toJSONString(taskResult));
return null;
}
}
} else {
/**
* 表明请求整体处理失败,原因视具体的情况详细分析。
*/
logger.error("the whole image scan request failed. response:" + JSON.toJSONString(scrResponse));
return null;
}
}
return results;
}
/**
* 检测文字
* @param content 要检测的文本
* @param scene 官方检测场景
* @return
*/
public static List textSafety(String content,String scene){
if(StringUtils.isBlank(content)) {
return null;
}
IClientProfile profile = DefaultProfile
.getProfile(region, accessKeyId, secretAccessKey);
IAcsClient client = new DefaultAcsClient(profile);
TextScanRequest textScanRequest = new TextScanRequest();
textScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
textScanRequest.setHttpContentType(FormatType.JSON);
textScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法。
textScanRequest.setEncoding("UTF-8");
textScanRequest.setRegionId("cn-beijing");
List
}`
ContentSafetyResult.java
`public class ContentSafetyResult {
/**
* 图片
/
public static final int TYPE_PHOTO=1;
/*
* 文字
*/
public static final int TYPE_TEXT=2;
/**
* 文本正常,可以直接放行
*/
public static final String SUGGESTION_PASS="pass";
/**
* 文本需要进一步人工审核
*/
public static final String SUGGESTION_REVIEW="review";
/**
* 文本违规,可以直接删除或者限制公开
*/
public static final String SUGGESTION_BLOCK="block";
private Integer type;
private String content;
private String scene;
private String suggestion;
private String label;
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getScene() {
return scene;
}
public void setScene(String scene) {
this.scene = scene;
}
public String getSuggestion() {
return suggestion;
}
public void setSuggestion(String suggestion) {
this.suggestion = suggestion;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@Override
public String toString() {
return "ContentSafetyResult [type=" + type + ", content=" + content + ", scene=" + scene + ", suggestion="
+ suggestion + ", label=" + label + "]";
}
}`
java对接阿里云内容安全接口,实现敏感字图检测
标签:计费 概率 ISE uuid 获得 catch sage dom action
原文地址:https://www.cnblogs.com/pipiapi/p/14331879.html