阿里云内容审核服务使用(图片审核)

说明:在项目中,我们经常会对用户上传的内容(如文字、图片)等资源内容进行审核,审核包括两方面,一方面是内容与描述不符,一方面是违反法律法规。本文介绍使用阿里提供的内容审核服务,对图片内容进行审核。

开通服务

第一步:打开官网

进入阿里云官网,在搜索框内输入"内容安全",点击下面这个,选择"免费开通";

第二步:开通内容审核服务

选择"立即开通"

第三步:在线调试

进入"控制台","服务列表"中图片审核,选择在线调试;

第四步:调试代码

在弹出的窗口中,填上图片URL和scene(场景),选择SDK示例和Java语言;

图片URL可以选择本地图片上传,也可以选择网络路径,像OSS、Minio上的图片资源路径,如我填入的是下面这张:

图片审核的场景参数如下,这里我填"porn(色情图片)";

第五步:发起调用

点"发起调用",查看响应结果,可以看到"Suggestion"的值为"pass",表示这张图片OK,没问题;

代码实现

第一步:添加依赖

接下来就很简单了,把右边SDK调用的代码复制下来就可以了,但是需要引入相关的依赖。如下,创建一个简单的SpringBoot项目,pom.xml文件如下:

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配置到系统环境变量中,有一点离谱,我直接不听他的建议,将代码修改成如下:

java 复制代码
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中说明,部分如下:

相关推荐
做科研的周师兄19 分钟前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
有点小困97729 分钟前
Spring Boot 异步任务 ClassLoader 踩坑实录:ClassNotFoundException 的诡异真相
java
aiks_yuan32 分钟前
Java 正则表达式很慢怎么办:Pattern 预编译只快 2~5 倍,真正卡死线程的是回溯(JDK 8、11、17 实测)
java
用户37215742613534 分钟前
C# 填写 PDF 交互式表单:文本框、复选框、单选按钮和下拉列表
java
IT枫斗者枫哥37 分钟前
Java 退款请求超时,先查原单还是重试?
java·后端
特立独行的猫A41 分钟前
我用仓颉写了个多平台发文工具:一份 Markdown,一条命令发六个平台
java·后端·python
ikgy1 小时前
JAVA EE:1.计算机是如何工作的
java·java-ee
.痞老板.2 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
青梅味猪大肠2 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
CoderYanger2 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis