短语音识别REST-API-JavaSDK
安装Speech Java SDK
Speech Java SDK目录结构
1com.baidu.aip
2       ├── auth                                //签名相关类
3       ├── http                                //Http通信相关类
4       ├── client                              //公用类
5       ├── exception                           //exception类
6       ├── speech
7       │       └── AipSpeech           //AipSpeech类
8       └── util                                //工具类支持 JAVA版本:1.7+
查看源码
Java SDK代码现已公开,您可以查看代码、或者在License范围内修改和编译SDK以适配您的环境。 github链接:https://github.com/Baidu-AIP/java-sdk
使用maven依赖:
添加以下依赖即可。其中版本号可在maven官网查询
1<dependency>
2    <groupId>com.baidu.aip</groupId>
3    <artifactId>java-sdk</artifactId>
4    <version>${version}</version>
5</dependency>直接使用JAR包步骤如下:
1.在官方网站下载Java SDK压缩工具包。
2.将下载的aip-java-sdk-version.zip解压后,复制到工程文件夹中。
3.在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”。
4.添加SDK工具包aip-java-sdk-version.jar和第三方依赖工具包json-20160810.jar log4j-1.2.17.jar。
其中,version为版本号,添加完成后,用户就可以在工程中使用Speech Java SDK。
新建AipSpeech
AipSpeech是语音识别的Java客户端,为使用语音识别的开发人员提供了一系列的交互方法。
用户可以参考如下代码新建一个AipSpeech,初始化完成后建议单例使用,避免重复获取access_token:
1public class Sample {
2    //设置APPID/AK/SK
3    public static final String APP_ID = "你的 App ID";
4    public static final String API_KEY = "你的 Api Key";
5    public static final String SECRET_KEY = "你的 Secret Key";
6
7    public static void main(String[] args) {
8        // 初始化一个AipSpeech
9        AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
10
11        // 可选:设置网络连接参数
12        client.setConnectionTimeoutInMillis(20000);
13        client.setSocketTimeoutInMillis(60000);
14
15        // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
16        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
17        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理
18
19        // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
20        // 也可以直接通过jvm启动参数设置此环境变量
21        System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
22
23        // 调用接口
24        JSONObject res = client.asr("test.pcm", "pcm", 16000, null);
25        System.out.println(res.toString(2));
26        
27    }
28}其中示例的log4j.properties文件内容如下:
1#可以设置级别:debug>info>error
2#debug:显示debug、info、error
3#info:显示info、error
4#error:只error
5log4j.rootLogger=debug,appender1
6#log4j.rootLogger=info,appender1
7#log4j.rootLogger=error,appender1
8
9#输出到控制台
10log4j.appender.appender1=org.apache.log4j.ConsoleAppender
11#样式为TTCCLayout
12log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
13
14#自定义样式
15# %r 时间 0
16# %t 方法名 main
17# %p 优先级 DEBUG/INFO/ERROR
18# %c 所属类的全名(包括包名)
19# %l 发生的位置,在某个类的某行
20# %m 输出代码中指定的讯息,如log(message)中的message
21# %n 输出一个换行
22
23log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%t][%p] -%l %m%n在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
配置AipSpeech
如果用户需要配置AipSpeech的一些细节参数,可以在构造AipSpeech之后调用接口设置参数,目前只支持以下参数:
| 接口 | 说明 | 
|---|---|
| setConnectionTimeoutInMillis | 建立连接的超时时间(单位:毫秒) | 
| setSocketTimeoutInMillis | 通过打开的连接传输数据的超时时间(单位:毫秒) | 
| setHttpProxy | 设置http代理服务器 | 
| setSocketProxy | 设置socket代理服务器 (http和socket类型代理服务器只能二选一) | 
语音识别
接口描述
向远程服务上传整段语音进行识别
请求说明
举例:
1public void asr(AipSpeech client)
2{
3    // 对本地语音文件进行识别
4    String path = "D:\\code\\java-sdk\\speech_sdk\\src\\test\\resources\\16k_test.pcm";
5    JSONObject asrRes = client.asr(path, "pcm", 16000, null);
6    System.out.println(asrRes);
7
8    // 对语音二进制数据进行识别
9    byte[] data = Util.readFileByBytes(path);     //readFileByBytes仅为获取二进制数据示例
10    JSONObject asrRes2 = client.asr(data, "pcm", 16000, null);
11    System.out.println(asrRes2);
12
13}接口函数说明:
1// 语音识别
2JSONObject asr(String path, String format, int rate, HashMap<String, Object> options);
3JSONObject asr(byte[] data, String format, int rate, HashMap<String, Object> options);| 参数 | 类型 | 描述 | 是否必须 | 
|---|---|---|---|
| path/data | String/byte[] | 语音文件所在路径或二进制数据, 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写 | 是 | 
| format | String | 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件 | 是 | 
| rate | int | 采样率,16000、8000,固定值 | 是 | 
| cuid | String | 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内 | 否 | 
| dev_pid | Int | 不填写lan参数生效,都不填写,默认1537(普通话 输入法模型),dev_pid参数见下面的表格 | 否 | 
| lan(已废弃) | String | 历史兼容参数,请使用dev_pid。如果dev_pid填写,该参数会被覆盖。语种选择,输入法模型,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写。 | 否 | 
dev_pid 参数列表
| dev_pid | 语言 | 模型 | 是否有标点 | 备注 | 
|---|---|---|---|---|
| 1537 | 普通话(纯中文识别) | 语音近场识别模型 | 有标点 | 支持自定义词库 | 
| 1737 | 英语 | 英语模型 | 无标点 | 不支持自定义词库 | 
| 1637 | 粤语 | 粤语模型 | 有标点 | 不支持自定义词库 | 
| 1837 | 四川话 | 四川话模型 | 有标点 | 不支持自定义词库 | 
返回数据参数详情
| 参数 | 类型 | 是否一定输出 | 描述 | 
|---|---|---|---|
| err_no | int | 是 | 错误码 | 
| err_msg | int | 是 | 错误码描述 | 
| sn | int | 是 | 语音数据唯一标识,系统内部产生,用于 debug | 
| result | int | 是 | 识别结果数组,提供1-5 个候选结果,string 类型为识别的字符串, utf-8 编码 | 
返回样例:
1// 成功返回
2{
3	"err_no": 0,
4	"err_msg": "success.",
5	"corpus_no": "15984125203285346378",
6	"sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D",
7	"result": ["北京天气"]
8}
9
10// 失败返回
11{
12	"err_no": 2000,
13	"err_msg": "data empty.",
14	"sn": null
15}