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

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

最近在开发一款微信小程序,其中具有发布帖子的功能,因此需要审核发布的文本与图像(不然开发的微信小程序过不了审)。本来是调用微信小程序的API,但效果不稳定,所以尝试用百度API。

官方API文档: https://ai.baidu.com/docs#/QuickStart-ContentCensor/top

具体流程如下:

  1. 准备工作(二选一即可)

    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

  2. 复制官方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;
        }
    }
    
  3. 文本图像审核功能代码

    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);
        }
    }
    
  4. 输出结果
    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}
    					 ]
    			}
    }
    

你可能感兴趣的:(实习生活)