文档:

API文档:https://ai.baidu.com/ai-doc/ANTIPORN/ek3h6x90n

SDK下载:https://ai.baidu.com/sdk#anti

github链接:https://github.com/Baidu-AIP/java-sdk

工具类下载地址:

HttpUtil:https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3

FileUtil:https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72

Base64Util:https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2

开发步骤:

1. 添加依赖:${version}可根据官网选择合适的版本,或将相应下载的SDK中的jar引入到项目中。

<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>${version}</version>
</dependency>

2. 下载工具类引入项目。

3.  获取Access Token的代码,主要功能是获取调用API时必须在URL中带上的access_token参数。

官网鉴权认证机制:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

代码如下:

package auth;/*** 百度敏感信息配置*/
public class BaiduSensitiveConfig {/*** 百度云应用的AI:创建完应用后平台分配给此应用 AppID*/public static final String APP_ID = "百度云应用的AI";/*** 百度云应用的AK:创建完应用后平台分配给此应用 API Key*/public static final String API_KEY = "百度云应用的AK";/*** 百度云应用的SK:创建完应用后平台分配给此应用 Secret Key*/public static final String SECRET_KEY = "百度云应用的SK";/*** 文本审核接口*/public static final String CHECK_TEXT_URL = "https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined";/*** 图片审核接口*/public static final String CHECK_IMAGE_URL = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined";}
package auth;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSONObject;public class AccessToken {public static void main(String[] args) {System.out.println(getAuth(BaiduSensitiveConfig.API_KEY, BaiduSensitiveConfig.SECRET_KEY));}/*** 获取API访问权限token** @return*/public static String getAuth() {//百度云应用的AK  百度云应用的SKreturn getAuth(BaiduSensitiveConfig.API_KEY, BaiduSensitiveConfig.SECRET_KEY);}/*** 获取API访问权限token,该token有一定的有效期,需要自行管理,当失效时需重新获取。** @param ak 百度云官网获取的 API Key* @param sk 百度云官网获取的 Securet Key* @return assess_token 示例:* "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"*/public static String getAuth(String ak, String sk) {// 获取token地址String authHost = "https://aip.baidubce.com/oauth/2.0/token?";String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + ak// 3. 官网获取的 Secret Key+ "&client_secret=" + sk;try {URL realUrl = new URL(getAccessTokenUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/System.out.println("===Token_Result:===" + result);JSONObject jsonObject = JSONObject.parseObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}}

4. 封装接口的返回结果Bean

package entity;import java.util.List;/*** 文本审核结果返回*/
public class TextCheckReturn {private long log_id;//请求唯一id,用于问题定位private String conclusion;//审核结果,可取值:合规、不合规、疑似、审核失败private Integer conclusionType;//审核结果类型,可取值1.合规,2.不合规,3.疑似,4.审核失败private List<TextData> data;//不合规/疑似/命中白名单项详细信息public long getLog_id() {return log_id;}public void setLog_id(long log_id) {this.log_id = log_id;}public String getConclusion() {return conclusion;}public void setConclusion(String conclusion) {this.conclusion = conclusion;}public Integer getConclusionType() {return conclusionType;}public void setConclusionType(Integer conclusionType) {this.conclusionType = conclusionType;}public List<TextData> getData() {return data;}public void setData(List<TextData> data) {this.data = data;}@Overridepublic String toString() {return "{" +"log_id=" + log_id +", conclusion='" + conclusion + '\'' +", conclusionType=" + conclusionType +", data=" + data +'}';}
}
package entity;import java.util.List;/*** 图像审核结果返回*/
public class ImageCheckReturn {private long log_id;//请求唯一id,用于问题定位private String conclusion;//审核结果,可取值:合规、不合规、疑似、审核失败private Integer conclusionType;//审核结果类型,可取值1.合规,2.不合规,3.疑似,4.审核失败private List<ImageData> data;//不合规/疑似/命中白名单项详细信息public long getLog_id() {return log_id;}public void setLog_id(long log_id) {this.log_id = log_id;}public String getConclusion() {return conclusion;}public void setConclusion(String conclusion) {this.conclusion = conclusion;}public Integer getConclusionType() {return conclusionType;}public void setConclusionType(Integer conclusionType) {this.conclusionType = conclusionType;}public List<ImageData> getData() {return data;}public void setData(List<ImageData> data) {this.data = data;}@Overridepublic String toString() {return "{" +"log_id=" + log_id +", conclusion='" + conclusion + '\'' +", conclusionType=" + conclusionType +", data=" + data +'}';}
}
package entity;import java.util.List;/*** 不合规/疑似/命中白名单项详细信息*/
public class TextData {private String msg;//不合规项描述信息private List<Hits> hits;//命中关键词信息public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public List<Hits> getHits() {return hits;}public void setHits(List<Hits> hits) {this.hits = hits;}@Overridepublic String toString() {return "{" +"msg='" + msg + '\'' +", hits=" + hits +'}';}
}
package entity;import java.util.List;/*** 命中关键词信息*/
public class Hits {private String datasetName;//违规项目所属数据集名称private List<String> words;//违规文本关键字public String getDatasetName() {return datasetName;}public void setDatasetName(String datasetName) {this.datasetName = datasetName;}public List<String> getWords() {return words;}public void setWords(List<String> words) {this.words = words;}@Overridepublic String toString() {return "{" +"datasetName='" + datasetName + '\'' +", words=" + words +'}';}
}

5. 文本、图像审核功能代码

package entity;public enum ReturnStatusEnum {SUCCESS(0),//成功FAILURE(1);//失败private final int value;ReturnStatusEnum(int value) {this.value = value;}public int getValue() {return value;}
}
package api;import auth.AccessToken;
import auth.BaiduSensitiveConfig;
import com.alibaba.fastjson.JSON;
import entity.ImageCheckReturn;
import entity.ReturnStatusEnum;
import entity.TextCheckReturn;
import utils.Base64Util;
import utils.FileUtil;
import utils.HttpUtil;import java.io.File;
import java.net.URLEncoder;
import java.util.Map;
import java.util.TreeMap;/*** 内容审核*/
public class CheckContent {/*** 文本审核** @param text 需要审核的文本* @return*/public static Map<String, Object> checkText(String text) {Map<String, Object> map = new TreeMap<String, Object>();//获取access_tokenString access_token = AccessToken.getAuth();try {//设置请求的编码String param = "text=" + URLEncoder.encode(text, "UTF-8");//调用文本审核接口并取得结果String result = HttpUtil.post(BaiduSensitiveConfig.CHECK_TEXT_URL, access_token, param);// JSON解析对象TextCheckReturn tcr = JSON.parseObject(result, TextCheckReturn.class);Integer conclusionType = tcr.getConclusionType();if (conclusionType != 1 && !conclusionType.equals("1")) {map.put("code", ReturnStatusEnum.FAILURE.getValue());map.put("log_id", tcr.getLog_id());map.put("conclusion", tcr.getConclusion());map.put("conclusionType", conclusionType);map.put("data", tcr.getData());return map;}map.put("code", ReturnStatusEnum.SUCCESS.getValue());map.put("log_id", tcr.getLog_id());map.put("conclusion", tcr.getConclusion());map.put("conclusionType", tcr.getConclusionType());return map;} catch (Exception e) {e.printStackTrace();}return null;}/*** 图像审核** @param imagePath 需要审核的图片路径* @return*/public static Map<String, Object> checkImage(String imagePath) {if (!new File(imagePath).exists()) {throw new NullPointerException("图片不存在");}Map<String, Object> map = new TreeMap<String, Object>();//获取access_tokenString access_token = AccessToken.getAuth();try {//据文件路径读取byte[]数组byte[] imgData = FileUtil.readFileByBytes(imagePath);//Base64格式编码String imgStr = Base64Util.encode(imgData);//URLEncoder格式化编码String param = "image=" + URLEncoder.encode(imgStr, "UTF-8");//调用图像审核接口String result = HttpUtil.post(BaiduSensitiveConfig.CHECK_IMAGE_URL, access_token, param);//JSON解析对象ImageCheckReturn icr = JSON.parseObject(result, ImageCheckReturn.class);Integer conclusionType = icr.getConclusionType();if (conclusionType != 1 && !conclusionType.equals("1")) {map.put("code", ReturnStatusEnum.FAILURE.getValue());map.put("log_id", icr.getLog_id());map.put("conclusion", icr.getConclusion());map.put("conclusionType", icr.getConclusionType());map.put("data", icr.getData());return map;}map.put("code", ReturnStatusEnum.SUCCESS.getValue());map.put("log_id", icr.getLog_id());map.put("conclusion", icr.getConclusion());map.put("conclusionType", icr.getConclusionType());return map;} catch (Exception e) {e.printStackTrace();}return null;}}

6. 测试

package test;import api.CheckImageAPI;
import api.CheckTextAPI;
import org.junit.Test;import java.util.Iterator;
import java.util.Map;public class TestCheckContent {@Testpublic void testText() {//成功//Map<String, Object> map = CheckTextAPI.checkText("你好");//失败Map<String, Object> map = CheckTextAPI.checkText("电话 找小姐");Iterator<String> iterator = map.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next();Object value = map.get(key);System.out.println(key + ":" + value);}}@Testpublic void testImage() {//成功//String imagePath = "C:\\Users\\42405\\Pictures\\Camera Roll\\ca86e620b9e623ff-b8de023d66d64f20-b6d3d90793936caf591d615d1c99b0e2.jpg";//失败String imagePath = "C:\\Users\\42405\\Pictures\\Camera Roll\\audit%2Fdemo%2Fcensoring-demo.jpg";Map<String, Object> map = CheckImageAPI.checkImage(imagePath);Iterator<String> iterator = map.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next();Object value = map.get(key);System.out.println(key + ":" + value);}}}

7. 结果

文本审核(接口说明)

图像审核(接口说明)

附(参考):

https://ai.baidu.com/forum/topic/show/497608

http://aixiaoshuai.mydoc.io/?t=234826

https://blog.csdn.net/qq_36813807/article/details/82499233?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

你的鼓励将是我创作的最大动力

转载请注明出处:BestEternity亲笔。

Java调用百度API实现文本与图像审核功能相关推荐

  1. SpringBoot项目调用百度API 实现文本与图像审核功能

    SpringBoot项目调用百度API 实现文本与图像审核功能 最近在开发一款微信小程序,其中具有发布帖子的功能,因此需要审核发布的文本与图像(不然开发的微信小程序过不了审).本来是调用微信小程序的A ...

  2. Java调用百度API实现图像识别

    Java调用百度API实现图像识别 最近在做一个关于识别的小功能,翻阅了一堆资料,也实践自己去实现这个功能,最后识别的结果不是那么理想.这里介绍一个完全可以商用以及识别率超高的百度ai接口 1.为什么 ...

  3. Java调用百度API生成短网址

    由于百度短网址旧API更新,故更新下原博客内容(仅供参考),希望小伙伴们以官方API为主,以防影响使用. 官方API:https://dwz.cn/console/apidoc package com ...

  4. Java调用百度API出现{status:211,message:APP SN校验失败}

    Java调用百度API出现{"status":211,"message":"APP SN校验失败"} {"status" ...

  5. java实现文本纠错功能_调用百度API进行文本纠错

    毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...

  6. 调用百度API 对文本进行情感倾向分析(舆情分析)

    @[TOC] # 1.准备工作 1.注册百度账号,登录百度智能云,点击总览选择自然语言处理,创建应用(创建选项认真阅读,填写) 创建好应用会生成相应的AppID API Key  Secret Key ...

  7. 初识Java调用百度API实现图像识别

    最近,了解了一下百度API图像识别,有了个初步认识,这里分享一下自己的理解. 我是在idea上用java项目进行了测试.文章以纯java项目进行举例. 第一步就是先去百度AI官网 申请一个图像识别的应 ...

  8. java调用百度翻译_Java调用百度API实现翻译-Go语言中文社区

    下面是Java调用百度API实现翻译的具体步骤: 一.在写代码之前先在在百度翻译平台中,申请APP_ID 申请地址申请的详见点击打开链接 申请之后,会得到APP_ID和SECURITY_KEY 二.j ...

  9. java调用百度地图API依据地理位置中文获取经纬度

    百度地图api提供了非常多地图相关的免费接口,有利于地理位置相关的开发,百度地图api首页:http://developer.baidu.com/map/. 博主使用过依据地理依据地理位置中文获取经纬 ...

最新文章

  1. linux 网络管理器未运行怎么解决,Ubuntu下提示网络管理器未运行解决方法
  2. linux 进程原理内存,linux进程通信之共享内存原理(基于linux 1.2.13)
  3. 马里奥AI实现方式探索 ——神经网络+增强学习
  4. python 重置索引_python pandas 对series和dataframe的重置索引reindex方法
  5. python全栈要学什么_python全栈要学什么 python全栈学习路线
  6. python是动态还是静态_python之静态方法和动态方法介绍
  7. js学习(利用websocket监控服务器)
  8. 阿里巴巴内部开发手册
  9. 为什么表格后面打不出0_同样的LOL游戏,为什么BO5和BO3的结局差距如此之大?...
  10. zabbix_server
  11. Head First 设计模式 —— 单例模式(Singleton)
  12. 3.Chrome开发者工具不完全指南(二、进阶篇)
  13. p5.js之Q版人物绘制
  14. yum install 命令报错Could not retrieve mirrorlist
  15. 如何运用阿里巴巴国际站进行数据分析?
  16. 移动端-安卓-接口测试简介
  17. 高速公路上遇事故报警,微信扫这个二维码一键报警定位
  18. C# WebAPI 上传文件和图片
  19. 简单聊一下Android音频通路的切换
  20. 10.25软件测试学习总结

热门文章

  1. 企业文档加密软件选择标准是什么
  2. 利用数组,实现回文数的判断
  3. 分析影响网速变慢的原因
  4. 2021年劳务员-通用基础(劳务员)考试题及劳务员-通用基础(劳务员)考试资料
  5. 码云gitee远程代码仓库管理
  6. html中文字怎么自动排版,了解HTML CSS格式化排版 文字排版
  7. Redis 6.0 多线程重磅发布!来了解一下吧
  8. 【组织标准】关于3GPP、ETSI、DVB、TS、EN、TR等概念的关系介绍
  9. linux steam root,Steam
  10. 一个可以把模糊动漫图片变清晰的网站(基于超像素)