0


java 对接百度AI文字识别第三方接口--(api方式以及sdk方式)

平时在工作当中难免会需要对接第三方接口。今天就带领大家来实践一下百度ai的文字识别技术。我使用的是文字识别中名片识别服务,别问为什么,因为是免费的,其他的服务要钱。。。。。。

一:准备工作

  1. 首先需要在百度ai官方网站注册账号 百度ai官方网站如下: https://ai.baidu.com/
  2. 注册完毕之后需要添加一个属于自己的应用步骤如下: 1、选择文字识别在这里插入图片描述 2、点击创建应用,创建一个应用 3、填写应用名称–> 选择接口(接口会默认自动选择) --> 应用归属选择个人 --> 填写应用描述 --> 点击创建应用在这里插入图片描述 4、创建完应用之后会在应用列表中看见你刚刚创建的应用。注意你的 appid、api key、 secrte key。在接下来的开发过程当中会用到。在这里插入图片描述

二:开发流程(使用api开发)

注:

使用api开发过程当中需要使用刚刚我们创建应用的api key和secret key

1、回到文字识别控制台,也就是刚刚点击创建应用的地方。点击api文档跳转到百度ai的api文档使用教程页面。
在这里插入图片描述
2、注意选择这边有一个api文档和sdk文档。我们现在先使用api文档的方式来开发。
在这里插入图片描述
3、选择api文档 --> 卡证文字识别 – > 名片识别
在这里插入图片描述
4、点击名片识别后我们选择到java代码部分。然后开始编写我们的代码了。(直接将代码copy下来即可)
在这里插入图片描述

5、百度ai的使用方式还需要json的处理依赖。这边我使用的是maven依赖。

<!--         https://mvnrepository.com/artifact/org.json/json 百度ap放开平台使用json --><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version></dependency>

6、代码编写(这边我帮大家把百度ai上的代码直接copy下来了,以及url的token获取方法我也复制下来了。)

packagecom.aq.baiduai.ai.aip;importcom.aq.baiduai.ai.aip.auth.AuthService;importcom.aq.baiduai.ai.utils.Base64Util;importcom.aq.baiduai.ai.utils.FileUtil;importcom.aq.baiduai.ai.utils.HttpUtil;importjava.net.URLEncoder;/**
* 名片识别 api 方式调用
*/publicclassBusinessCard{/**
    * 重要提示代码中所需工具类 注意项目当中需要使用的工具类均可以从以下地址下载 注意包的不同下载的工具类都是以baidu规范命名
    * FileUtil,Base64Util,HttpUtil,GsonUtils请从
    * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
    * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
    * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
    * 
    * 下载
    */publicstaticStringbusinessCard(){// 请求urlString url ="https://aip.baidubce.com/rest/2.0/ocr/v1/business_card";try{// 本地文件路径String filePath ="E:\\abutment_port\\card.jpg";byte[] imgData =FileUtil.readFileByBytes(filePath);String imgStr =Base64Util.encode(imgData);String imgParam =URLEncoder.encode(imgStr,"UTF-8");String param ="image="+ imgParam;// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。String accessToken =AuthService.getAuth();String result =HttpUtil.post(url, accessToken, param);System.out.println(result);return result;}catch(Exception e){
            e.printStackTrace();}returnnull;}publicstaticvoidmain(String[] args){BusinessCard.businessCard();}}
packagecom.aq.baiduai.ai.aip.auth;importorg.json.JSONObject;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.List;importjava.util.Map;/**
 * 获取token类
 */publicclassAuthService{/**
     * 获取权限token
     * @return 返回示例:
     * {
     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
     * "expires_in": 2592000
     * }
     */publicstaticStringgetAuth(){// 官网获取的 API Key 更新为你注册的String clientId ="";// 官网获取的 Secret Key 更新为你注册的String clientSecret ="";returngetAuth(clientId, clientSecret);}/**
     * 获取API访问token
     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Secret Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */publicstaticStringgetAuth(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 =newURL(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 =newBufferedReader(newInputStreamReader(connection.getInputStream()));String result ="";String line;while((line = in.readLine())!=null){
                result += line;}/**
             * 返回结果示例
             */System.err.println("result:"+ result);JSONObject jsonObject =newJSONObject(result);String access_token = jsonObject.getString("access_token");return access_token;}catch(Exception e){System.err.printf("获取token失败!");
            e.printStackTrace(System.err);}returnnull;}}

7、我在代码中上传的名片如下:个人信息要打马赛克要不然会违规
在这里插入图片描述

8、执行main方法后控制台打印输出结果如下:
在这里插入图片描述
综上,java对接第三方接口文字识别–百度AI(api方式) 的入门到此就结束了。

三:开发流程(使用sdk开发)

注:

使用sdk开发过程当中需要使用刚刚我们创建应用的 appid、api key、secret key

1、上述是演示使用api文档的方式来开发。接下来我们使用sdk的方式来开发。我们这次选择sdk文档。
注:使用sdk更加轻便快捷

sdk方式开发相比于使用api方式减少了工作量以及代码。

在这里插入图片描述
2、选择了sdk文档中 – > java语言快速入门。
3、maven依赖。
注:

api方式需要依赖json处理。sdk也需要。但是sdk的依赖当中包含了json20160810,所以使用sdk的方式就不需要依赖json20160810了

<!--百度ap放开平台使用 sdk  包含了 json20160810 --><dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.16.13</version></dependency>

4、编写代码部分

packagecom.aq.baiduai.ai.sdk;importcom.baidu.aip.ocr.AipOcr;importorg.json.JSONObject;importjava.util.HashMap;/**
 * 通过sdk方式 识别名片信息
 */publicclassSample{//设置APPID/AK/SK 注意这边相对于api方式开发 需要使用appidpublicstaticfinalStringAPP_ID="";publicstaticfinalStringAPI_KEY="";publicstaticfinalStringSECRET_KEY="";publicstaticvoidmain(String[] args){// 初始化一个AipOcrAipOcr client =newAipOcr(APP_ID,API_KEY,SECRET_KEY);// 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);// 可选:设置代理服务器地址, http和socket二选一,或者均不设置//        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理//        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理// 可选:设置log4j日志输出格式,若不设置,则使用默认配置// 也可以直接通过jvm启动参数设置此环境变量//        System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");// 调用接口String path ="E:\\abutment_port\\card.jpg";JSONObject res = client.basicGeneral(path,newHashMap<String,String>());System.out.println(res.toString(2));}}

5、跟刚刚一样使用的是同一张名片。执行main方法后控制台打印输出结果如下:
在这里插入图片描述

这个案例了解到第三方接口对接的快速入门,市面大部分的第三方对接都是这套流程。有什么不足的欢迎大家留言补充。


本文转载自: https://blog.csdn.net/aq_money/article/details/128436344
版权归原作者 aq_money 所有, 如有侵权,请联系我们删除。

“java 对接百度AI文字识别第三方接口--(api方式以及sdk方式)”的评论:

还没有评论