平时在工作当中难免会需要对接第三方接口。今天就带领大家来实践一下百度ai的文字识别技术。我使用的是文字识别中名片识别服务,别问为什么,因为是免费的,其他的服务要钱。。。。。。
一:准备工作
- 首先需要在百度ai官方网站注册账号
百度ai官方网站如下:
https://ai.baidu.com/ - 注册完毕之后需要添加一个属于自己的应用
步骤如下:
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依赖。
1
2
3
4
5
6
7<!-- 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获取方法我也复制下来了。)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.aq.baiduai.ai.aip; import com.aq.baiduai.ai.aip.auth.AuthService; import com.aq.baiduai.ai.utils.Base64Util; import com.aq.baiduai.ai.utils.FileUtil; import com.aq.baiduai.ai.utils.HttpUtil; import java.net.URLEncoder; /** * 名片识别 api 方式调用 */ public class BusinessCard { /** * 重要提示代码中所需工具类 注意项目当中需要使用的工具类均可以从以下地址下载 注意包的不同下载的工具类都是以baidu规范命名 * FileUtil,Base64Util,HttpUtil,GsonUtils请从 * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72 * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2 * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3 * * 下载 */ public static String businessCard() { // 请求url String 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(); } return null; } public static void main(String[] args) { BusinessCard.businessCard(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85package com.aq.baiduai.ai.aip.auth; 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 = ""; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = ""; return getAuth(clientId, clientSecret); } /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Secret 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; } }
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了
1
2
3
4
5
6
7<!--百度ap放开平台使用 sdk 包含了 json20160810 --> <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.16.13</version> </dependency>
4、编写代码部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40package com.aq.baiduai.ai.sdk; import com.baidu.aip.ocr.AipOcr; import org.json.JSONObject; import java.util.HashMap; /** * 通过sdk方式 识别名片信息 */ public class Sample { //设置APPID/AK/SK 注意这边相对于api方式开发 需要使用appid public static final String APP_ID = ""; public static final String API_KEY = ""; public static final String SECRET_KEY = ""; public static void main(String[] args) { // 初始化一个AipOcr AipOcr client = new AipOcr(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, new HashMap<String, String>()); System.out.println(res.toString(2)); } }
5、跟刚刚一样使用的是同一张名片。执行main方法后控制台打印输出结果如下:
这个案例了解到第三方接口对接的快速入门,市面大部分的第三方对接都是这套流程。有什么不足的欢迎大家留言补充。
最后
以上就是繁荣冬瓜最近收集整理的关于java 对接百度AI文字识别第三方接口--(api方式以及sdk方式)的全部内容,更多相关java内容请搜索靠谱客的其他文章。
发表评论 取消回复