当前位置:   article > 正文

springboot项目整合百度AI内容审核(文本,图片)_springboot发帖审核

springboot发帖审核

毕设项目做得差不多了,但功能上基本都是本地完成的,除了有一个支付功能以及图片上传的优化,其他貌似没有用到云的东西,显得过于单调,由于是社区型项目,用户发送文本以及上传图片的频率是十分高的,于是就打算利用百度的AI审核加入文本和图片违规检测功能。

首先导入maven依赖

  1. <dependency>
  2. <groupId>com.baidu.aip</groupId>
  3. <artifactId>java-sdk</artifactId>
  4. <version>4.12.0</version>
  5. </dependency>

这里版本我用的最新的4.12.0,官方文档里的是4.8.0。无论哪个版本,总会有些类和方法找不到,心累

初始化应用参数

  1. public class BaiDuAiConfig {
  2. public static final String APP_ID ="11111";
  3. public static final String API_KEY = "11111";
  4. public static final String SECRET_KEY = "111111";
  5. /*初始化客户端*/
  6. public static final AipContentCensor client = new AipContentCensor(APP_ID, API_KEY, SECRET_KEY);
  7. // public static AipContentCensor getClient() {
  8. // // 初始化一个AipImageCensor
  9. //
  10. //
  11. // // 可选:设置网络连接参数
  12. client.setConnectionTimeoutInMillis(2000);
  13. client.setSocketTimeoutInMillis(60000);
  14. //
  15. // // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
  16. client.setHttpProxy("proxy_host", proxy_port); // 设置http代理
  17. client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理
  18. //
  19. // // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
  20. // // 也可以直接通过jvm启动参数设置此环境变量
  21. System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
  22. // return client;
  23. // }
  24. }

官方文档里的可选的参数我都没配置。

里面的appid等填入自己对应的即可。

图片审核和文本审核方法

  1. public class BaiDuAiCheck {
  2. /**
  3. *@Author: ZongMao on 2020/3/28 13:14
  4. *图像审核功能
  5. *@return
  6. */
  7. public static JSONObject checkImg(MultipartFile file) throws IOException {
  8. // 参数为本地图片路径
  9. // JSONObject response = BaiDuAiConfig.client.imageCensorUserDefined(imgPath, EImgType.FILE, null);
  10. // System.out.println(response.toString());
  11. // 参数为url
  12. // String url = "http://testurl";
  13. // response = client.imageCensorUserDefined(url, EImgType.URL, null);
  14. // System.out.println(response.toString());
  15. // 参数为本地图片文件二进制数组
  16. byte[] files = FileCopyUtils.copyToByteArray(file.getInputStream());
  17. JSONObject response = BaiDuAiConfig.client.imageCensorUserDefined(files, null);
  18. System.out.println(response);
  19. return response;
  20. }
  21. /**
  22. *@Author: ZongMao on 2020/3/28 13:14
  23. *文本审核功能
  24. *@return
  25. */
  26. public static JSONObject checkText(String text){
  27. // 参数为输入文本
  28. JSONObject response = BaiDuAiConfig.client.textCensorUserDefined(text);
  29. return response;
  30. }
  31. }

文本审核只需要传入文本参数即可。图片官方文档给了三种方法,第一种是本地url,服务端好像得不到?第二种是网络URL,但如果每次都上传好了再来审核,浪费资源,且速度太慢。另一种是二进制数组,但是官方的readImageFile函数找不到,我一直以为是我的操作出错,但应该是版本问题。然后百度了一下可以用FileCopyUtils.copyToByteArray(file.getInputStream())方法将流文件转换为二进制数组。

调用文本审核方法

  1. @PostMapping("/addDiscuss")
  2. public JSONObject addDiscuss(DiscussInfo discussInfo, Chat chat, Integer blogId){
  3. JSONObject jsonObject = new JSONObject();
  4. org.json.JSONObject result = BaiDuAiCheck.checkText(discussInfo.getContent());
  5. // System.out.println(result);
  6. if (!CheckSession.checkSession()||result.get("conclusion")==null){
  7. jsonObject.put("code",2);
  8. }else if (result.get("conclusion").equals("合规")){
  9. /*获取当前登录的用户id*/
  10. Integer userId = GetUserId.getUserId();
  11. String time = Now.getNowTime("yyyy-MM-dd HH:mm:ss");
  12. discussInfo.setUserId(userId);
  13. discussInfo.setTime(time);
  14. discussRepositories.save(discussInfo);
  15. String account = userRepositories.findUserInfoById(userId).getAccount();
  16. String msg = account+"评论了您的文章,"+"<a href='/details?blogId="+blogId+"'>点此查看</a>";
  17. Integer receiver = blogInfoRepositories.findById(blogId).getUserId();
  18. chat.setSender(13);
  19. chat.setReceiver(receiver);
  20. chat.setNews(msg);
  21. chat.setTime(time);
  22. chatRepositories.save(chat);
  23. WebSocket_Chat.sendToOne(13,receiver);
  24. jsonObject.put("code",1);
  25. }else{
  26. jsonObject.put("code",3);
  27. }
  28. return jsonObject;
  29. }

最终效果:

调用图片审核方法

  1. @PostMapping({"/upLoadImg/{type}"})
  2. public JSONObject upLoadImg(@RequestParam("file") MultipartFile file, @PathVariable("type") String type) throws Exception{
  3. JSONObject jsonObject = new JSONObject();
  4. org.json.JSONObject result = BaiDuAiCheck.checkImg(file);
  5. // System.out.println(result);
  6. if (!CheckSession.checkSession()||result.get("conclusion")==null){
  7. jsonObject.put("code",1);
  8. } else if (result.get("conclusion").equals("合规")){
  9. JSONObject srcJson = new JSONObject();
  10. srcJson.put("src",src);
  11. jsonObject.put("code",0);
  12. jsonObject.put("msg","上传成功");
  13. jsonObject.put("data",srcJson);
  14. }else {
  15. jsonObject.put("code",3);
  16. jsonObject.put("msg","疑似或存在违规图片!请勿传播非法内容!");
  17. }
  18. return jsonObject;
  19. }

效果:(用的官方演示图)

 如果项目启动时日志包冲突报红:https://blog.csdn.net/zongmaomx/article/details/105160372

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/346764
推荐阅读
相关标签
  

闽ICP备14008679号