阿里云的图片审核服务是一种高效的内容安全解决方案,用于自动检测和过滤图片中的不适当内容。以下是关于阿里云图片审核服务:
-
审核方式:阿里云图片审核服务采用两种主要方式来检测图片内容:
- MD5比对:通过比较上传图片的MD5值与素材库中的MD5值来获取审核结果。
- 卷积神经网络(CNN)技术:使用CNN技术进行特征提取、各部分特征汇总,并通过分类器预测识别来进行审核。
-
内容安全服务:阿里云的内容安全服务支持对图片、视频、文本、语音等多种对象进行多样化场景检测,有效降低内容违规风险。
-
API接入:在使用阿里云内容审核服务之前,需要注册阿里云账号并创建AccessKey和Secret。这些密钥用于授权外部平台访问阿里云服务。
-
版本选择:阿里云提供内容安全增强版和内容安全1.0两个版本。内容安全1.0需要企业认证,而增强版可能对个人用户更加适用。
-
批量审核:阿里云内容安全增强版的图片审核服务支持批量审核图片,通过SDK或API接口一次上传多张图片进行审核,提高处理效率。
-
代码实现:在实现图片审核功能时,需要添加相应的依赖并配置连接到阿里云接口的参数。例如,设置AccessKeyId、AccessKeySecret、区域ID和端点等。
-
审核结果处理:审核结果通常会返回一个包含建议(如通过、需要再审核、有敏感词等)的map集合。根据这些结果,可以设置不同的文章状态或采取进一步的操作。
为了方便,我们先写了一个Controller控制器,通过传递一张图片的URL地址,来对图片进行校验。
/*
* 单独的图片审核接口
* */
@PostMapping("/checkImage")
public Result<String> checkImage(String imageUrl){
// 校验图片合法性
validateImage(imageUrl);
return Result.success("图片审核通过");
}
/*
* 图片审核公共方法
* */
private void validateImage(String imageUrl){
boolean legal = aliGreenImageScanUtil.scanImage(imageUrl);
if(!legal){
aliOssUtil.delete(objectName);
throw new PictureException(MessageConstant.IMAGE_ILLEGAL);
}
}
接着校验图片的合法性方法中:
@Data
@AllArgsConstructor
@Slf4j
public class AliGreenImageScanUtil {
private String accessKeyId;
private String accessKeySecret;
private String regionId;
// 场景值
private static final List<String> SCENES = Arrays.asList("porn", "terrorism", "ad", "live", "logo");
/**
* 图片审核
* @param imageUrl 图片URL
* @return 是否合规
*/
public boolean scanImage(String imageUrl) {
try {
// 直接初始化 Client 对象
com.aliyun.imageaudit20191230.Client client = new com.aliyun.imageaudit20191230.Client(
new Config()
.setAccessKeyId(this.accessKeyId)
.setAccessKeySecret(this.accessKeySecret)
.setRegionId(this.regionId)
);
// log.info("当前ak:{}", this.accessKeyId);
// log.info("当前sk:{}", this.accessKeySecret);
// log.info("当前region:{}", this.regionId);
// log.info("图片URL:{}", imageUrl);
// 设置图片任务
com.aliyun.imageaudit20191230.models.ScanImageRequest.ScanImageRequestTask task0 = new com.aliyun.imageaudit20191230.models.ScanImageRequest.ScanImageRequestTask()
.setImageURL(imageUrl);
// 创建审核请求
com.aliyun.imageaudit20191230.models.ScanImageRequest scanImageRequest = new com.aliyun.imageaudit20191230.models.ScanImageRequest()
.setTask(Arrays.asList(task0))
.setScene(SCENES);
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 获取图片审核结果
ScanImageResponse response = client.scanImageWithOptions(scanImageRequest, runtime);
// 打印完整的响应数据(可选)
log.debug("响应数据: {}", response.getBody());
// 遍历所有场景,检查每个场景的审核建议
for (String scene : SCENES) {
String suggestion = response.getBody().getData().results.get(0).getSubResults().stream()
.filter(subResult -> scene.equals(subResult.getScene())) // 按场景匹配
.findFirst()
.map(subResult -> subResult.suggestion)
.orElse("pass"); // 默认值为 "pass"(如果找不到匹配的子结果)
// 打印当前场景的审核结果
log.info("场景: {}, 审核建议: {}", scene, suggestion);
// 如果某个场景的建议是 "block",则认为图片不合规
if ("block".equals(suggestion)) {
log.warn("图片审核不合规,场景: {}", scene);
return false; // 退出并返回 false
}
}
// 如果没有任何场景被标记为 "block",则认为合规
return true;
} catch (TeaException e) {
log.error("阿里云SDK错误,错误码:{},错误信息:{}", e.code, e.message);
throw new PictureException(MessageConstant.IMAGE_CHECK_FAILED);
} catch (Exception e) {
log.error("图片审核过程中出现未知错误:{}", e.getMessage());
throw new PictureException(MessageConstant.UNKNOWN_ERROR);
}
}
}
根据阿里云的开发文档描述中写道,图片检测的应用场景时,可以根据不同的需求选择合适的功能。以下是各个选项的应用场景描述:
-
porn: 图片智能鉴
-
terrorism: 图片敏感内容识别、图片风险人物识
-
ad: 图片垃圾广告识
-
live: 图片不良场景识别
-
logo: 图片Logo识
以上仅此作者的代码,仅供参考,如果不足,感谢指点!本文章对您有帮助,不妨点点关注!
如果您对阿里云内容审核之文本内容审核还有疑问,不妨看看我另外一篇文章!