文档中心
文档中心 / 语音识别
此文档自2018年3月起不再更新,建议访问 http://ai.baidu.com/docs#/ASR-API/top 来查看相关内容

语音识别

在线语音识别 Java SDK

Java SDK文档

简介

目前本SDK的功能同REST API,需要联网调用http接口, 具体功能见REST API 文档, REST API 仅支持整段语音识别的模式,即需要上传完整语音文件进行识别,时长不超过60s,支持、自定义词库设置, 没有其他额外功能

接口能力

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

支持的语音格式

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

注意事项

如果需要使用实时识别、长语音、唤醒词、语义解析等其它语音功能,请使用Android或者iOS SDK 或 Linux C++ SDK 等。

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

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

反馈

  • 在百度云控制台内提交工单,咨询问题类型请选择人工智能服务

  • 加入开发者QQ群: 464413749

版本更新记录

上线日期 版本号 更新内容
2017.10.18 3.2.1 使用proxy问题修复
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 log4j-1.2.17.jar

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

新建AipSpeech

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

用户可以参考如下代码新建一个AipSpeech,初始化完成后建议单例使用,避免重复获取access_token:

  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. // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
  16. // 也可以直接通过jvm启动参数设置此环境变量
  17. System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
  18. // 调用接口
  19. JSONObject res = client.asr("test.pcm", "pcm", 16000, null);
  20. System.out.println(res.toString(2));
  21. }
  22. }

其中示例的log4j.properties文件内容如下:

  1. #可以设置级别:debug>info>error
  2. #debug:显示debug、info、error
  3. #info:显示info、error
  4. #error:只error
  5. log4j.rootLogger=debug,appender1
  6. #log4j.rootLogger=info,appender1
  7. #log4j.rootLogger=error,appender1
  8. #输出到控制台
  9. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  10. #样式为TTCCLayout
  11. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
  12. #自定义样式
  13. # %r 时间 0
  14. # %t 方法名 main
  15. # %p 优先级 DEBUG/INFO/ERROR
  16. # %c 所属类的全名(包括包名)
  17. # %l 发生的位置,在某个类的某行
  18. # %m 输出代码中指定的讯息,如log(message)中的message
  19. # %n 输出一个换行
  20. log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%t][%p] -%l %m%n

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

配置AipSpeech

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

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

接口说明

语音识别

接口描述

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

请求说明

举例:

  1. public 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. byte[] data = Util.readFileByBytes(path); //readFileByBytes仅为获取二进制数据示例
  9. JSONObject asrRes2 = client.asr(data, "pcm", 16000, null);
  10. System.out.println(asrRes2);
  11. }

接口函数说明:

  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);
参数 类型 描述 是否必须
path/data String/byte[] 语音文件所在路径或二进制数据, 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写
format String 包括pcm(不压缩)、wav、opus、speex、amr
rate int 采样率,16000,固定值
cuid String 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
dev_pid String 不填写lan参数生效,都不填写,默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
lan(已废弃) String 历史兼容参数,请使用dev_pid。如果dev_pid填写,该参数会被覆盖。语种选择,输入法模型,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写。

dev_pid 参数列表

dev_pid 语言 模型 是否有标点 备注
1536 普通话(支持简单的英文识别) 搜索模型 无标点 支持自定义词库
1537 普通话(纯中文识别) 输入法模型 有标点 不支持自定义词库
1737 英语 有标点 不支持自定义词库
1637 粤语 有标点 不支持自定义词库
1837 四川话 有标点 不支持自定义词库
1936 普通话远场 远场模型 有标点 不支持

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

参数 类型 是否一定输出 描述
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。