文档中心
文档中心 / 语音识别

语音识别

在线语音识别 Java SDK

Java SDK文档

简介

Hi,您好,欢迎使用百度语音识别服务。

本文档主要针对Java开发者,描述百度语音识别接口服务的相关技术内容。如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

  • 在语音官网问答社区内新建提问,标签选择“识别-RESTAPI”;
  • 加入开发者QQ群:648968704

接口能力

接口名称 接口能力简要描述
语音识别 将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列

支持的语音格式

原始 PCM 的录音参数必须符合 8k/16k 采样率、16bit 位深、单声道,支持的格式有:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)。

注意事项

目前本SDK的功能同REST API,需要联网调用http接口 。REST API 仅支持整段语音识别的模式,即需要上传完整语音文件进行识别,时长不超过60s,并且 没有其他额外功能。 如果需要使用实时识别、长语音、唤醒词、自定义词库设置、语义解析等其它语音功能,请使用Android或者iOS SDK。

  1. 请严格按照文档里描述的参数进行开发,特别请关注原始录音参数以及语音压缩格式的建议,否则会影响识别率,进而影响到产品的用户体验。

  2. 目前系统支持的语音时长上限为60s,请不要超过这个长度,否则会返回错误。

版本更新记录

上线日期 版本号 更新内容
2017.8.25 3.0.0 更新sdk打包方式:所有AI服务集成一个SDK
2017.7.14 1.0.1 更新sdk打包方式
2017.6.30 1.0.0 新增语音识别

快速入门

安装Speech Java SDK

Speech Java SDK目录结构

  1. com.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

其中,version为版本号,添加完成后,用户就可以在工程中使用Speech Java SDK。

新建AipSpeech

AipSpeech是语音识别的Java客户端,为使用语音识别的开发人员提供了一系列的交互方法。

用户可以参考如下代码新建一个AipSpeech:

  1. public 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. public static void main(String[] args) {
  7. // 初始化一个AipSpeech
  8. AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
  9. // 可选:设置网络连接参数
  10. client.setConnectionTimeoutInMillis(2000);
  11. client.setSocketTimeoutInMillis(60000);
  12. // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
  13. client.setHttpProxy("proxy_host", proxy_port); // 设置http代理
  14. client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理
  15. // 调用接口
  16. JSONObject res = client.asr("test.pcm", "pcm", 16000, null);
  17. System.out.println(res.toString(2));
  18. }
  19. }

在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEYSECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

配置AipSpeech

如果用户需要配置AipSpeech的一些细节参数,可以在构造AipSpeech之后调用接口设置参数,目前只支持以下参数:

接口 说明
setConnectionTimeoutInMillis 建立连接的超时时间(单位:毫秒)
setSocketTimeoutInMillis 通过打开的连接传输数据的超时时间(单位:毫秒)
setHttpProxy 设置http代理服务器
setSocketProxy 设置socket代理服务器 (http和socket类型代理服务器只能二选一)

接口说明

语音识别

接口描述

向远程服务上传整段语音进行识别

请求说明

举例:

  1. public void synthesis(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. byte[] data = Util.readFileByBytes(path); //readFileByBytes仅为获取二进制数据示例
  9. JSONObject asrRes2 = client.asr(data, "pcm", 16000, null);
  10. System.out.println(asrRes);
  11. // 对网络上音频进行识别
  12. String url = "http://somehost/res/16k_test.pcm";
  13. String callback = "http://callbackhost/aip/dump";
  14. JSONObject res = client.asr(url, callback, "pcm", 16000, null);
  15. System.out.println(res);
  16. }

接口函数说明:

  1. // 语音识别
  2. JSONObject asr(String path, String format, int rate, HashMap<String, Object> options);
  3. JSONObject asr(byte[] data, String format, int rate, HashMap<String, Object> options);
  4. JSONObject asr(String url, String callback, String format, int rate, HashMap<String, Object> options);
参数 类型 描述 是否必须
path/data String/byte[] 语音文件所在路径或二进制数据, 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写
url String 语音下载地址
callback String 识别结果回调地址
format String 包括pcm(不压缩)、wav、opus、speex、amr
rate int 采样率,支持 8000 或者 16000
cuid String 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
lan String 语种选择,中文=zh、粤语=ct、英文=en,不区分大小写,默认中文
ptc int 协议号,下行识别结果选择,默认 nbest 结果

语音识别 返回数据参数详情

参数 类型 是否一定输出 描述
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. "err_no": 2000,
  12. "err_msg": "data empty.",
  13. "sn": null
  14. }

错误信息

错误返回格式

若请求错误,服务器将返回的JSON文本包含以下参数:

  • error_code:错误码。
  • error_msg:错误描述信息,帮助理解和解决发生的错误。

错误码

SDK本地检测参数返回的错误码

error_code error_msg 备注
SDK108 connection or read data time out 连接超时或读取数据超时

服务端返回的错误码

错误码 用户输入/服务端 含义 一般解决方法
3300 用户输入错误 输入参数不正确 请仔细核对文档及参照demo,核对输入参数
3301 用户输入错误 音频质量过差 请上传清晰的音频
3302 用户输入错误 鉴权失败 token字段校验失败。请使用正确的API_KEY 和 SECRET_KEY生成
3303 服务端问题 语音服务器后端问题 请将api返回结果反馈至论坛或者QQ群
3304 用户请求超限 用户的请求QPS超限 请降低识别api请求频率 (qps以appId计算,移动端如果共用则累计)
3305 用户请求超限 用户的日pv(日请求量)超限 请“申请提高配额”,如果暂未通过,请降低日请求量
3307 服务端问题 语音服务器后端识别出错问题 目前请确保16000的采样率音频时长低于30s,8000的采样率音频时长低于60s。如果仍有问题,请将api返回结果反馈至论坛或者QQ群
3308 用户输入错误 音频过长 音频时长不超过60s,请将音频时长截取为60s以下
3309 用户输入错误 音频数据问题 服务端无法将音频转为pcm格式,可能是长度问题,音频格式问题等。 请将输入的音频时长截取为60s以下,并核对下音频的编码,是否是8K或者16K, 16bits,单声道。
3310 用户输入错误 输入的音频文件过大 语音文件共有3种输入方式: json 里的speech 参数(base64后); 直接post 二进制数据,及callback参数里url。 分别对应三种情况:json超过10M;直接post的语音文件超过10M;callback里回调url的音频文件超过10M
3311 用户输入错误 采样率rate参数不在选项里 目前rate参数仅提供8000,16000两种,填写4000即会有此错误
3312 用户输入错误 音频格式format参数不在选项里 目前格式仅仅支持pcm,wav或amr,如填写mp3即会有此错误

错误码常见问题及具体分析

3300 错误

语音识别api使用的是HTTP POST方法, BODY里直接放置json, Content-Type头部为 application/json。 并非常见的浏览器表单请求(application/x-www-form-urlencoded或者multipart/x-www-form-urlencoded)。

必填字段:format rate channel cuid token cuid token cuid token cuid token,请勿漏填。此外 (speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一组。 channel cuid token,请勿漏填。此外 (speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一种。 channel cuid token,请勿漏填。此外 (speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一种。

必填字段如format rate channel cuid token,请勿漏填。此外 (speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一种,并确认 音频时长截取为60s以下。

3309错误

wav和amr的音频,服务端会自动转为pcm,这个过程中导致转码出错。请确认下format及rate参数与音频一致,并确认音频时长截取为60s以下。

3301 错误

识别结果实际为空。可能是音频质量过差,不清晰,或者是空白音频。
有时也可能是pcm填错采样率。如16K采样率的pcm文件,填写的rate参数为8000。