阿里云内容审核之图片审核 spring boot 项目

内容审核-阿里云视觉智能开放平台

阿里云的图片审核服务是一种高效的内容安全解决方案,用于自动检测和过滤图片中的不适当内容。以下是关于阿里云图片审核服务:

  1. 审核方式:阿里云图片审核服务采用两种主要方式来检测图片内容:

    • MD5比对:通过比较上传图片的MD5值与素材库中的MD5值来获取审核结果。
    • 卷积神经网络(CNN)技术:使用CNN技术进行特征提取、各部分特征汇总,并通过分类器预测识别来进行审核。
  2. 内容安全服务:阿里云的内容安全服务支持对图片、视频、文本、语音等多种对象进行多样化场景检测,有效降低内容违规风险。

  3. API接入:在使用阿里云内容审核服务之前,需要注册阿里云账号并创建AccessKey和Secret。这些密钥用于授权外部平台访问阿里云服务。

  4. 版本选择:阿里云提供内容安全增强版和内容安全1.0两个版本。内容安全1.0需要企业认证,而增强版可能对个人用户更加适用。

  5. 批量审核:阿里云内容安全增强版的图片审核服务支持批量审核图片,通过SDK或API接口一次上传多张图片进行审核,提高处理效率。

  6. 代码实现:在实现图片审核功能时,需要添加相应的依赖并配置连接到阿里云接口的参数。例如,设置AccessKeyId、AccessKeySecret、区域ID和端点等。

  7. 审核结果处理:审核结果通常会返回一个包含建议(如通过、需要再审核、有敏感词等)的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);
        }
    }
}

根据阿里云的开发文档描述中写道,图片检测的应用场景时,可以根据不同的需求选择合适的功能。以下是各个选项的应用场景描述:

  1. porn: 图片智能鉴

  2. terrorism: 图片敏感内容识别、图片风险人物识

  3. ad: 图片垃圾广告识

  4. live: 图片不良场景识别

  5. logo: 图片Logo识

以上仅此作者的代码,仅供参考,如果不足,感谢指点!本文章对您有帮助,不妨点点关注! 

 如果您对阿里云内容审核之文本内容审核还有疑问,不妨看看我另外一篇文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值