• 【Springboot】微服务中使用腾讯云T-Sec天御对文本及图片内容进行安全检测


     8420b26844034fab91b6df661ae68671.png

    个人简介: 

    > 📦个人主页:赵四司机
    > 🏆学习方向:JAVA后端开发 
    > 📣种一棵树最好的时间是十年前,其次是现在!
    > ⏰往期文章:SpringBoot项目整合微信支付
    > 🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。

    前言:

    1.前面基于Springboot的单体项目介绍已经完结了,至于项目中的其他功能实现我这里就不打算介绍了,因为涉及的知识点不难,而且都是简单的CRUD操作,假如有兴趣的话可以私信我我再看看要不要写几篇文章做个介绍。

    2.完成上一阶段的学习,我就投入到了微服务的学习当中,所用教程为B站上面黑马的微服务教程。由于我的记性不是很好,所以对于新事物的学习我比较喜欢做笔记以加强理解,在这里我会将笔记的重点内容做个总结发布到“微服务学习”笔记栏目中。我是赵四,一名有追求的程序员,希望大家能多多支持,能给我点个关注就更好了。

    目录

    一:需求分析

    二:功能介绍

    1.文本内容安全

    2.图片内容安全

    三:功能实现

    1.前期工作  

     (1)开通服务并配置策略

    (2)导入坐标

    (3)配置腾讯云 API 访问密钥

    2.代码实现

    (1)文本内容安全

    (2)图片内容安全

    四:结果处理

    1.返回参数

    2.功能测试

    (1)文本内容安全测试

    (2)图片内容安全测试

    (3)总结


     

    一:需求分析

            由于我最近在做的是新闻体裁的项目,由于互联网的发展,网络上面经常充斥着很多不可控的风险因素,如色情暴力、垃圾广告等,因此发布文章需要进行审核才能发布到App端。如果全部都要人工审核的话会很耗时间,这时候就可以借助第三方提供的服务来对内容进行审核。市面上提供的内容安全审核服务有很多,如腾讯云、阿里云、网易易盾等,不过都是收费的,我是学生党,没必要为了一个项目而去购买这些服务(这些服务还不便宜),不过好在这些服务都会免费送一个月给新用户使用,这样就还有的玩。

    二:功能介绍

    1.文本内容安全

            什么是文本内容安全,主要指的是检测文本中是否包含色情暴力、广告内容等违规内容,并对检测出违规的文章进行屏蔽。而腾讯文本内容安全(Text Moderation System,TMS)是一款文本内容智能识别服务,对用户上传的文本进行内容安全识别,能够做到识别准确率高、召回率高,多维度覆盖对内容识别的要求,并实时更新识别服务的识别标准和能力。其具有以下特点:

    • 能够对文本文件进行多样化场景检测,精准识别文本中出现可能令人反感、不安全或不适宜的内容,有效降低内容违规风险与有害信息识别成本。
    • 能够精准识别涉黄等有害内容,支持用户配置词库,打击自定义的违规文本。文本内容安全服务能检测内容的危险等级,对于高危部分直接过滤,对于可疑部分提交人工复审,从而节省识别人力,降低业务风险。
    • 以开放 API(Application Programming Interface,应用程序编程接口)的方式提供服务,用户通过调用API即可获取识别结果,高效构建智能化业务系统,提升业务运营效率。

    2.图片内容安全

            什么是图片内容安全,图片内容安全(Image Moderation System,IMS)是一款图片内容智能识别服务。能够对图片文件进行多样化场景检测,精准识别图片中出现可能令人反感、不安全或不适宜内容;帮助我们有效降低内容违规风险与有害信息过滤成本。 IMS也能对色情、广告等进行检测,还能自定义检测内容,当然文本内容安全也支持自定义检测内容。

    三:功能实现

    1.前期工作  

     (1)开通服务并配置策略

             要使用腾讯云的内容安全服务,首先需要注册一个腾讯与账号,并且开通相应的服务(文本内容安全&图片内容安全),然后可以在内容安全控制台创建自己的策略,具体配置教程见官方文档。

    (2)导入坐标

             我使用的是Java语言进行开发,所以选择接入Java SDK进行接入,导入以下坐标

    1. <dependency>
    2. <groupId>com.tencentcloudapigroupId>
    3. <artifactId>tencentcloud-sdk-java-cvmartifactId>
    4. <version>3.1.528version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.tencentcloudapigroupId>
    8. <artifactId>tencentcloud-sdk-java-tmsartifactId>
    9. <version>3.1.528version>
    10. dependency>
    11. <dependency>
    12. <groupId>com.tencentcloudapigroupId>
    13. <artifactId>tencentcloud-sdk-java-imsartifactId>
    14. <version>3.1.528version>
    15. dependency>

    (3)配置腾讯云 API 访问密钥

            这两个服务都需要用到腾讯云API的访问密钥,因此使用在接入服务之前需要先申请自己的秘钥,申请地址点击这里。获取密钥之后,便可以将其配置到相应的微服务中,由于我使用了Nacos进行注册管理,这里我就将密钥信息放入Nacos配置中心中(密钥已部分删除,不能直接使用):

    1. tencentcloud:
    2. secretId: AKIDjLjtq1rSe5JJ3
    3. secretKey: bxDFH66IH1glxeASULOJ

    2.代码实现

    (1)文本内容安全

    •  需要的参数:密钥信息、待检测文本(String类型)
    • 注意事项:不能直接将文本扔进去检测,检测之前需要对文本进行Base64加密
    • 返回类型:JSON
    1. package com.my.common.tencentcloud;
    2. import com.alibaba.fastjson.JSON;
    3. import com.alibaba.fastjson.JSONObject;
    4. import com.tencentcloudapi.common.Credential;
    5. import com.tencentcloudapi.common.profile.ClientProfile;
    6. import com.tencentcloudapi.common.profile.HttpProfile;
    7. import com.tencentcloudapi.common.exception.TencentCloudSDKException;
    8. import com.tencentcloudapi.tms.v20201229.TmsClient;
    9. import com.tencentcloudapi.tms.v20201229.models.*;
    10. import lombok.Getter;
    11. import lombok.Setter;
    12. import org.springframework.boot.context.properties.ConfigurationProperties;
    13. import org.springframework.stereotype.Component;
    14. import java.nio.charset.StandardCharsets;
    15. import java.util.Base64;
    16. @Getter
    17. @Setter
    18. @Component
    19. @ConfigurationProperties(prefix = "tencentcloud")
    20. public class TextDetection {
    21. private String secretId;
    22. private String secretKey;
    23. public JSONObject greenTextDetection(String text) throws TencentCloudSDKException {
    24. // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
    25. Credential cred = new Credential(secretId, secretKey);
    26. // 实例化一个http选项,可选的,没有特殊需求可以跳过
    27. HttpProfile httpProfile = new HttpProfile();
    28. httpProfile.setEndpoint("tms.tencentcloudapi.com");
    29. // 实例化一个client选项,可选的,没有特殊需求可以跳过
    30. ClientProfile clientProfile = new ClientProfile();
    31. clientProfile.setHttpProfile(httpProfile);
    32. // 实例化要请求产品的client对象,clientProfile是可选的
    33. TmsClient client = new TmsClient(cred, "ap-guangzhou", clientProfile);
    34. // 实例化一个请求对象,每个接口都会对应一个request对象
    35. TextModerationRequest req = new TextModerationRequest();
    36. //Base64加密
    37. String encryptionText = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
    38. //设置内容参数
    39. req.setContent(encryptionText);
    40. // 返回的resp是一个TextModerationResponse的实例,与请求对象对应
    41. TextModerationResponse resp = client.TextModeration(req);
    42. // 输出json格式的字符串回包
    43. String result = TextModerationResponse.toJsonString(resp);
    44. return JSON.parseObject(result);
    45. }
    46. }

    (2)图片内容安全

    •  需要的参数:密钥信息、待检测图片URL路径
    • 注意事项:如果输入参数为待检测图片文件内容,也需要对其进行Base64编码,且图片大小不超过5MB
    • 返回类型:JSON
    1. package com.my.common.tencentcloud;
    2. import com.alibaba.fastjson.JSON;
    3. import com.alibaba.fastjson.JSONObject;
    4. import com.tencentcloudapi.common.exception.TencentCloudSDKException;
    5. import lombok.Getter;
    6. import lombok.Setter;
    7. import org.springframework.boot.context.properties.ConfigurationProperties;
    8. import org.springframework.stereotype.Component;
    9. import com.tencentcloudapi.common.Credential;
    10. import com.tencentcloudapi.common.profile.ClientProfile;
    11. import com.tencentcloudapi.common.profile.HttpProfile;
    12. import com.tencentcloudapi.ims.v20201229.ImsClient;
    13. import com.tencentcloudapi.ims.v20201229.models.*;
    14. @Getter
    15. @Setter
    16. @Component
    17. @ConfigurationProperties(prefix = "tencentcloud")
    18. public class ImageDetection {
    19. private String secretId;
    20. private String secretKey;
    21. public JSONObject greenImageDetection(String imageUrl) throws TencentCloudSDKException {
    22. // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
    23. Credential cred = new Credential(secretId, secretKey);
    24. // 实例化一个http选项,可选的,没有特殊需求可以跳过
    25. HttpProfile httpProfile = new HttpProfile();
    26. httpProfile.setEndpoint("ims.tencentcloudapi.com");
    27. // 实例化一个client选项,可选的,没有特殊需求可以跳过
    28. ClientProfile clientProfile = new ClientProfile();
    29. clientProfile.setHttpProfile(httpProfile);
    30. // 实例化要请求产品的client对象,clientProfile是可选的
    31. ImsClient client = new ImsClient(cred, "ap-guangzhou", clientProfile);
    32. // 实例化一个请求对象,每个接口都会对应一个request对象
    33. ImageModerationRequest req = new ImageModerationRequest();
    34. //设置图片url地址
    35. req.setFileUrl(imageUrl);
    36. // 返回的resp是一个ImageModerationResponse的实例,与请求对象对应
    37. ImageModerationResponse resp = client.ImageModeration(req);
    38. // 输出json格式的字符串回包
    39. String result = ImageModerationResponse.toJsonString(resp);
    40. return JSON.parseObject(result);
    41. }
    42. }

    四:结果处理

    1.返回参数

    两个服务返回的参数基本相同,见下表:

     f2a3b970fa8d47b0b87a67a7ef6e94bb.png 

    我这里主要用到的参数是SubLabel参数,其包含Block(建议屏蔽)、Review(建议人工复审)、Pass(通过)三种类型。

    2.功能测试

    (1)文本内容安全测试

    1. @Autowired
    2. private TextDetection textDetection;
    3. @Autowired
    4. private ImageDetection imageDetection;
    5. @Test
    6. public void textTest() throws TencentCloudSDKException {
    7. JSONObject result_json = textDetection.greenTextDetection("冰毒");
    8. String result = (String) result_json.get("Suggestion");
    9. System.out.println(result);
    10. }

    f46382f9cd854317abd0d88737fae33e.png

     可以看到建议屏蔽。

    (2)图片内容安全测试

    检测图片:是一个冰毒图片,由于放上来会造成图片违规,这里就不放上来了,需要说明的是好像IMS对于纯图片识别效果不是很好,要是上面包含某些违规文字能够检测出来,应该是使用了OCR技术。

    1. @Test
    2. public void imageTest() throws TencentCloudSDKException {
    3. JSONObject result_json = imageDetection.greenImageDetection("http://49.234.52.192:9000/headlines/2022/07/21/e3428ce741f04602b6984196af18c4d4.png");
    4. String result = (String) result_json.get("Suggestion");
    5. System.out.println(result);
    6. }

      77c74e35dd7e421f957b7ed13ba78ec7.png 

    可以看到建议屏蔽。

    (3)总结

             腾讯云T-Sec 天御的内容安全检测结果还是挺靠谱的,还能自定义检测内容,大大提高了检测的精准度,而且调用起来十分方便,用来做项目练手很不错。

     

     

  • 相关阅读:
    @Transactional失效的几种情况说明
    麒麟系统开发笔记(十二):在国产麒麟系统上编译GDAL库、搭建基础开发环境和基础Demo
    《低代码指南》——AI低代码维格云架构视图怎么用?
    JWT的原理及实际应用
    2023/09/19 qt day3
    课题学习(六)----安装误差校准、实验方法
    九、Delay函数
    2023高教杯数学建模2:DE题+参考论文、代码
    (十二)51单片机----用DS18B20浅测一下工(江)西的室外温度
    【生成模型】解决生成模型面对长尾类型物体时的问题 RE-IMAGEN: RETRIEVAL-AUGMENTED TEXT-TO-IMAGE GENERATOR
  • 原文地址:https://blog.csdn.net/weixin_45750572/article/details/125969095