母婴级别!全网最细!阿里云内容安全API调用教程!


前言

当我们在实际开发中,在用户创建时实现头像上传 设置昵称等环节 你是否会想到一个问题 我们在上传头像或者在设置用户名称时是否合法呢 如何校验其合法性! 这就要涉及到深度学习 对文本和图像进行处理 这或许对我们来说太麻烦了 这里我们介绍一下阿里云的内容安全服务 内容安全产品提供图片、视频、语音、文字等多媒体内容风险检测的能力,帮助用户发现色情、暴力、惊悚、敏感、禁限、辱骂等风险内容或元素,可以大幅度降低人工审核成本,提升内容质量,改善平台秩序和用户体验 阿里云已经通过微调和训练模型 实现了对图片文本视频的内容安全检测 我们只需要实现官方SDK 就能够享受到该服务 接下来我将详细地讲解一下 如何实现阿里云内容安全API的调用
官方链接:https://www.aliyun.com/

步骤一:开通服务

访问开通服务页面,开通文本审核增强版服务。

开通文本增强版服务后,默认付费方式是按量后付费,且按照实际用量结算当日费用,不调用服务不收费。接口接入使用后系统会按使用量自动出账。您也可以购买按量抵扣资源包,资源包相较于后付费存在一定阶梯折扣,适合使用量级可预期和较大的用户。个人用户建议按量付费

步骤二:为RAM用户授权

在接入SDK或者API之前,确定是否创建了RAM用户,如果创建了 只需要在确保开通内容安全服务的前提下 为RAM用户授予管理使用内容安全的权限 如果没有创建
RAM用户 请先创建后再执行前面的操作 如图所示
在这里插入图片描述

步骤三:安装并接入SDK

Java SDK

Python SDK

PHP SDK

Go SDK

这里以Java SDK为例子 其他请参考官方文档
支持以下三种类型的图片检测。

对公网可访问图片进行检测

对本地图片进行检测

对OSS图片进行检测

我们这里举例公网图片检查

在pom.xml中添加如下依赖安装Java SDK,即可以在Maven工程中使用SDK。

1、在dependencies中添加如下依赖。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>green20220302</artifactId>
  <version>2.20.0</version>
</dependency>

2、接入Java SDK 代码示例。

同步接口接入示例

import com.alibaba.fastjson.JSON;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.ImageModerationRequest;
import com.aliyun.green20220302.models.ImageModerationResponse;
import com.aliyun.green20220302.models.ImageModerationResponseBody;
import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData;
import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class ImageUrlDemo {
    /**
     * 创建请求客户端
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @param endpoint
     * @return
     * @throws Exception
     */
    public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
        Config config = new Config();
        config.setAccessKeyId(accessKeyId);
        config.setAccessKeySecret(accessKeySecret);
        // 设置http代理。
        //config.setHttpProxy("http://10.10.xx.xx:xxxx");
        // 设置https代理。
        //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
        // 接入区域和地址请根据实际情况修改
      	// 接入地址列表:https://help.aliyun.com/document_detail/467828.html?#section-uib-qkw-0c8
        config.setEndpoint(endpoint);
        return new Client(config);
    }

    public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
        //注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
        Client client = createClient(accessKeyId, accessKeySecret, endpoint);

        // 创建RuntimeObject实例并设置运行参数
        RuntimeOptions runtime = new RuntimeOptions();

        // 检测参数构造。
        Map<String, String> serviceParameters = new HashMap<>();
        //公网可访问的URL。
        serviceParameters.put("imageUrl", "https://img.alicdn.com/tfs/xxxxxxxxxx001.png");
        //待检测数据唯一标识
        serviceParameters.put("dataId", UUID.randomUUID().toString());

        ImageModerationRequest request = new ImageModerationRequest();
        // 图片检测service:内容安全控制台图片增强版规则配置的serviceCode,示例:baselineCheck
      	// 支持service请参考:https://help.aliyun.com/document_detail/467826.html?0#p-23b-o19-gff
        request.setService("baselineCheck");
        request.setServiceParameters(JSON.toJSONString(serviceParameters));

        ImageModerationResponse response = null;
        try {
            response = client.imageModerationWithOptions(request, runtime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response;
    }

    public static void main(String[] args) throws Exception {
        /**
         * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
         * 常见获取环境变量方式:
         * 方式一:
         *     获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         * 方式二:
         *     获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        String accessKeyId = "建议从环境变量中获取RAM用户AccessKey ID";
        String accessKeySecret = "建议从环境变量中获取RAM用户AccessKey Secret";
        // 接入区域和地址请根据实际情况修改。
        ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.cn-shanghai.aliyuncs.com");
        try {
            // 自动路由。
            if (response != null) {
                //区域切换到cn-beijing。
                if (500 == response.getStatusCode() || (response.getBody() != null && 500 == (response.getBody().getCode()))) {
                    // 接入区域和地址请根据实际情况修改。
                    response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.cn-beijing.aliyuncs.com");
                }
            }
            // 打印检测结果。
            if (response != null) {
                if (response.getStatusCode() == 200) {
                    ImageModerationResponseBody body = response.getBody();
                    System.out.println("requestId=" + body.getRequestId());
                    System.out.println("code=" + body.getCode());
                    System.out.println("msg=" + body.getMsg());
                    if (body.getCode() == 200) {
                        ImageModerationResponseBodyData data = body.getData();
                        System.out.println("dataId=" + data.getDataId());
                        List<ImageModerationResponseBodyDataResult> results = data.getResult();
                        for (ImageModerationResponseBodyDataResult result : results) {
                            System.out.println("label=" + result.getLabel());
                            System.out.println("confidence=" + result.getConfidence());
                        }
                    } else {
                        System.out.println("image moderation not success. code:" + body.getCode());
                    }
                } else {
                    System.out.println("response not success. status:" + response.getStatusCode());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

异步接口接入示例

import com.alibaba.fastjson.JSON;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.ImageAsyncModerationRequest;
import com.aliyun.green20220302.models.ImageAsyncModerationResponse;
import com.aliyun.green20220302.models.ImageAsyncModerationResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class ImageAsyncModerationDemo {


    public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
        Config config = new Config();
        config.setAccessKeyId(accessKeyId);
        config.setAccessKeySecret(accessKeySecret);
        config.setEndpoint(endpoint);
        return new Client(config);
    }

    public static ImageAsyncModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String
            endpoint) throws Exception {
        Client client = createClient(accessKeyId, accessKeySecret, endpoint);
        RuntimeOptions runtime = new RuntimeOptions();
        Map<String, String> serviceParameters = new HashMap<>();
        serviceParameters.put("imageUrl", "https://img.alicdn.com/tfs/xxxxxxxxxx001.png");
        serviceParameters.put("dataId", UUID.randomUUID().toString());
        ImageAsyncModerationRequest imageAsyncModerationRequest = new ImageAsyncModerationRequest();
        imageAsyncModerationRequest.setService("baselineCheck");
        imageAsyncModerationRequest.setServiceParameters(JSON.toJSONString(serviceParameters));
        ImageAsyncModerationResponse response = null;
        try {
            response = client.imageAsyncModerationWithOptions(imageAsyncModerationRequest, runtime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response;
    }

    public static void main(String[] args) throws Exception {
        String accessKeyId = "建议从环境变量中获取RAM用户AccessKey ID";
        String accessKeySecret = "建议从环境变量中获取RAM用户AccessKey Secret";
        ImageAsyncModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.cn-shanghai.aliyuncs.com");
        if (response != null) {
            if (response.getStatusCode() == 200) {
                ImageAsyncModerationResponseBody body = response.getBody();
                System.out.println("requestId=" + body.getRequestId());
                System.out.println("code=" + body.getCode());
                System.out.println("msg=" + body.getMsg());
                if (body.getCode() == 200) {
                    ImageAsyncModerationResponseBody.ImageAsyncModerationResponseBodyData data = body.getData();
                    System.out.println("dataId=" + data.getDataId());
                    System.out.println("requestId = [" + data.getReqId() + "]");
                } else {
                    System.out.println("image asyncmoderation not success. code:" + body.getCode());
                }
            } else {
                System.out.println("response not success. status:" + response.getStatusCode());
            }
        }

    }

}

在这里插入图片描述将accessKeyId和accessKeySecret 替换成自己的即可(在创建RAM用户时 会自动创建)(为了安全建议采用环境变量的形式引入)
在这里插入图片描述将该url改为你要检查的图片的公网url地址

这样我们就完成了SDK的搭建

当需要审核的图片可通过公网链接访问时,图片审核增强版服务可通过图片URL获取文件后进行审核

正确运行控制台参考

在这里插入图片描述

requestId 是阿里云自动生成的请求唯一标识 为了区分每一次检测

code 为响应状态

msg 为响应携带的信息

dataId 为UUID随机化编码 用来当作数据标识

label 为该图片属于哪类标签

confidence 信用值 0-100 越大越危险越不合法

接下来再介绍一下 该服务的具体使用细节

在这里插入图片描述

图片分析服务有很多种 可以在SDK中设置专门的检查服务类别 可以根据自己的业务 设置对应的参数 通用则可设置baselineChek
在这里插入图片描述
在这里插入图片描述

点击设置规则 就可以开启对于某些具体类型图片的检测 我们可以手动开启

这里还要介绍的是自定义图库

在这里插入图片描述
我们可以自定义的创建图库 自定义设置图片 非法类型 当我们的图片放入图库时 当检测图片时 如果该图片在图库中 也会判为非法 (注意我们要在设置规则时 要导入相应的图库)

其实该内容安全服务 不仅可以检测图片 还能检查 视频 文本 等 具体可以查看阿里云官方文档 :https://www.aliyun.com/

总结

一:开通服务

二:创建RAM用户,授予内容管理权限

三:搭建SDK

(点个赞再走呗)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值