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

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

开通服务

第一步:打开官网

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

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

选择"立即开通"

第三步:在线调试

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

第四步:调试代码

在弹出的窗口中,填上图片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中说明,部分如下:

相关推荐
.Hypocritical.7 小时前
【Java 进阶】泛型深度解析|泛型类、泛型方法、通配符、类型擦除、PECS 原则
java·开发语言·泛型
这个DBA有点耶7 小时前
MySQL B-tree索引并发控制优化:写密集场景的锁瓶颈与内核级解法
java·数据库·程序人生·算法·database·dba
RuoyiOffice7 小时前
Spring AI+Vue3 企业知识库设计:让每个答案有依据,让每份资料守住权限
java·spring boot·vue3·rag·企业知识库·spring ai·ruoyi office
倔强的石头1068 小时前
【Linux指南】进程通信系列(二):匿名管道 —— pipe 的本质、fork 继承与四种读写规则
java·linux·运维
调试优选官8 小时前
2026年IoT物联网开发赛道年度榜单深度解析:D-coding物联网系统定制与源码交付能力专项解读
java·物联网·struts·iot·开发经验
木井巳8 小时前
【动态规划】三步问题
java·算法·leetcode·动态规划·推荐算法
小张成长计划..8 小时前
【Linux】25:线程概念和控制
java·linux·jvm
蛋蛋的就会顺顺的17 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要82618 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡18 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展