说明:在项目中,我们经常会对用户上传的内容(如文字、图片)等资源内容进行审核,审核包括两方面,一方面是内容与描述不符,一方面是违反法律法规。本文介绍使用阿里提供的内容审核服务,对图片内容进行审核。
开通服务
第一步:打开官网
进入阿里云官网,在搜索框内输入“内容安全”,点击下面这个,选择“免费开通”;
第二步:开通内容审核服务
选择“立即开通”
第三步:在线调试
进入“控制台”,“服务列表”中图片审核,选择在线调试;
第四步:调试代码
在弹出的窗口中,填上图片URL和scene(场景),选择SDK实例和Java语言;
图片URL可以选择本地图片上传,也可以在选择网络路径,像OSS、Minio上的图片资源路径,如我填入的是下面这张:
图片审核的场景参数如下,这里我填“porn(色情图片)”;
第五步:发起调用
点“发起调用”,查看响应结果,可以看到“Suggestion”的值为“pass”,表示这张图片OK,没问题;
代码实现
第一步:添加依赖
接下来就很简单了,把右边SDK调用的代码复制下来就可以了,但是需要引入相关的依赖。如下,创建一个简单的SpringBoot项目,pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hzy</groupId>
<artifactId>starter-simple</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!--Springboot项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.12</version>
<relativePath/>
</parent>
<dependencies>
<!--启动类依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--图片审核依赖-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imageaudit20191230</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
</project>
注意依赖也不是随便引入的,阿里云提供的SDK中找到;
点进GitHub链接,可以找到依赖的Maven坐标;
而版本号,可以点SDK链接;
第二步:代码实现
把前面在线调试的代码拷贝下来,提供的代码建议我们把AK&SK配置到系统环境变量中,有一点离谱,我直接不听他的建议,将代码修改成如下:
public class Sample {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.aliyun.imageaudit20191230.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
config.endpoint = "imageaudit.cn-shanghai.aliyuncs.com";
return new com.aliyun.imageaudit20191230.Client(config);
}
/**
* main方法
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 官方在这里是获取系统中环境变量中的值
com.aliyun.imageaudit20191230.Client client = Sample.createClient("你的ak", "你的sk");
// 设置ImageURL
com.aliyun.imageaudit20191230.models.ScanImageRequest.ScanImageRequestTask task0 = new com.aliyun.imageaudit20191230.models.ScanImageRequest.ScanImageRequestTask()
.setImageURL("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F5723a630-077e-45c5-9e73-49ed809b3f43%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1694165323&t=149871d4e26b4b9a386e0e98bedc2929");
// 添加图片任务、设置场景
com.aliyun.imageaudit20191230.models.ScanImageRequest scanImageRequest = new com.aliyun.imageaudit20191230.models.ScanImageRequest()
.setTask(java.util.Arrays.asList(
task0
))
.setScene(java.util.Arrays.asList(
"porn"
));
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 打印图片审核结果
String suggestion = client.scanImageWithOptions(scanImageRequest, runtime).getBody().getData().results.get(0).getSubResults().get(0).suggestion;
System.out.println(suggestion);
}
}
获取AK&SK
第一步:进入AccessKey管理
鼠标移动到右上角自己的头像上,选择AccessKey管理;
第二步:使用子用户AccessKey
进入后,选择“开始使用子用户AccessKey”;
第三步:创建用户
选择“创建用户”
填写登录名称和在列表中显示的名称,记得勾选OpenAPI调用访问;
创建完成后,就会有AK&SK,记得复制下来;
第四步:添加权限
获得AK&SK还没完,还需要开通该用户图片审核服务的使用权限;
搜索“AliyunVIAPIFullAccess”,点击加入,点确定;
测试
把上面获取到的AK&SK填入到代码中,鼠标右键启动程序;
可以看到这张图片,审核建议为“pass”;
到这里,使用阿里内容审核服务,对图片内容审核功能就完成了。当然这是一个非常简陋的Demo,有以下待优化的地方:
-
在实际项目中,我们不可能把AK、SK、ImageURL和endpoint在代码中写死,应该写在配置文件中;
-
对审核的结果应该增加校验,审核返回值有异常的话需要处理(判断==>捕获/抛出);
-
对于审核结果,不能仅返回一个审核建议,还需要获取其他返回值,应该设计一套返回结果的解析;
审核返回值,在阿里云官方提供的SDK中说明,部分如下: