SpringBoot项目调用百度API 实现文本与图像审核功能
SpringBoot项目调用百度API 实现文本与图像审核功能
最近在开发一款微信小程序,其中具有发布帖子的功能,因此需要审核发布的文本与图像(不然开发的微信小程序过不了审)。本来是调用微信小程序的API,但效果不稳定,所以尝试用百度API。
官方API文档: https://ai.baidu.com/docs#/QuickStart-ContentCensor/top
具体流程如下:
-
准备工作(二选一即可)
1)添加依赖:
${version}可根据官网选择合适的版本<dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>${version}</version> </dependency>2)直接下载工具类
以我的项目为例,导入4.12.0版本的jdk后不知道为什么发现少了
FileUtil.java以及HttpUtil.java工具类。如果有出现相同问题的伙伴,可以直接下载相应的工具类并导入项目中。工具类下载地址:
FileUtil:https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
Base64Util:https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
HttpUtil: https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3================更 新 ================
上面部分链接已失效,工具类可参考这篇博客 -
复制官方API文档给出的获取Access Token的代码(选择Java)
主要功能是获取调用API时必须在URL中带上的access_token参数,具体实现可不管,若感兴趣可深入研究。
链接:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu.
直接复制粘贴,代码如下:import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.Map; /** * 获取token类 */ public class AuthService { /** * 获取权限token * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", * "expires_in": 2592000 * } */ public static String getAuth() { // 官网获取的 API Key 更新为你注册的 String clientId = "百度云应用的AK"; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = "百度云应用的SK"; return getAuth(clientId, clientSecret); } /** * 获取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.err.println("result:" + result); JSONObject jsonObject = new JSONObject(result); String access_token = jsonObject.getString("access_token"); return access_token; } catch (Exception e) { System.err.printf("获取token失败!"); e.printStackTrace(System.err); } return null; } } -
文本图像审核功能代码
import com.baidu.aip.util.Base64Util;//通过依赖导入的,也可直接下载工具类 import com.zzh.rescue.util.FileUtil;//直接下载的工具类 import com.zzh.rescue.util.baiduHttpUtil;//直接下载的工具类(HttpUtil) 因为项目中有同名文件所以换了个名字 import java.net.URLEncoder; public class BaiduCensor { //设置APPID/AK/SK public static final String APP_ID = "你的应用ID"; public static final String API_KEY = "你的AK"; public static final String SECRET_KEY = "你的SK"; //图像审核 public static String ImageCnesor(String filePath) { // 请求url String url = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/user_defined"; try { byte[] imgData = FileUtil.readFileByBytes(filePath); String imgStr = Base64Util.encode(imgData); String imgParam = URLEncoder.encode(imgStr, "UTF-8"); String param = "image=" + imgParam; //获取accessToken String accessToken =AuthService.getAuth(API_KEY,SECRET_KEY); String result = baiduHttpUtil.post(url, accessToken, param); //接口说明 https://ai.baidu.com/docs#/ImageCensoring-API/top System.out.println(result); return result; } catch (Exception e) { e.printStackTrace(); } return null; } // 文本审核 public static String TextCensor(String content) { // 请求url String url = "https://aip.baidubce.com/rest/2.0/antispam/v2/spam"; try { String param = "content=" + content; //获取accessToken String accessToken =AuthService.getAuth(API_KEY,SECRET_KEY); String result = baiduHttpUtil.post(url, accessToken, param); //接口说明 https://ai.baidu.com/ai-doc/ANTIPORN/Rk3h6xb3i System.out.println(result); return result; } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args){ //本地图片路径 String filePath = "G:\\Lenovo\\Pictures\\Camera Roll\\2.jpg"; BaiduCensor.ImageCnesor(filePath); // String content="苟利国家生死以"; // BaiduCensor.TextCensor(content); } } -
输出结果
1)图像审核(参看接口说明){ "conclusion":"不合规", "log_id":15756455194191999, "data":[ {"msg":"存在性感内容","probability":0.995008,"type":2}, {"msg":"存在水印码内容","probability":0.93725634,"type":5}, {"msg":"存在公众人物","stars":[{"probability":0.90543276,"name":"Romee Strijd"}],"type":11}, {"msg":"恶意推广","probability":0.9189577,"type":9} ], "conclusionType":2 }2)文本审核(参看接口说明)
{ "log_id": 1225837669966959270, "result": { "spam": 2, "review": [{"score": 0.9, "hit": ["苟利国家生死"], "label": 3}], "reject": [], "pass": [ {"score": 0.2, "hit": [], "label": 1}, {"score": 0.028999999165535, "hit": [], "label": 2}, {"score": 0.25995993377483, "hit": [], "label": 4}, {"score": 0.037999998778105, "hit": [], "label": 5} ] } }
网易易盾是国内领先的数字内容风控服务商,依托网易二十余年的先进技术和一线实践经验沉淀,为客户提供专业可靠的安全服务,涵盖内容安全、业务安全、应用安全、安全专家服务四大领域,全方位保障客户业务合规、稳健和安全运营。
更多推荐



所有评论(0)