简介
概述
本文档是百度AI开放平台Linux SDK (C++)BDSpeechSDK 3.x 的用户指南。描述了在线语音识别相关接口的使用说明
ASR 自动语音识别技术(Automatic Speech Recognition), 将人的语音转换为文本。
- LinuxSDK 仅支持在线语音识别,固定长语音模式。
- LinuxSDK内部采用流式接口,即边读取语音流边处理。 该流式方式同Android iOS SDK, 区别于Rest Api需要上传完整录音文件。
再次提醒: BDSpeechSDK的功能只有不限音频流时长的在线识别功能,并可以返回服务器端语义。没有任何离线功能,没有离线识别及唤醒词功能。
SDK 支持 普通话,英语,四川话和粤语
版本历史
版本,sdk->get_sdk_version() | 发布时间 | libBDSpeechSDK.a md5值 | 更新内容 |
---|---|---|---|
3.0.0.30628d440 | 2019-05-16 | 160ce32bb19c1f132f81e9e3096ab742 | 添加自训练平台LMID支持 |
3.0.0.9a7b48a3a | 2018-04-28 | 3974ca4d43dedff8d56b8830f2b17983 |
编译运行环境
目前仅支持 X64(x86-64) CPU架构的 Linux 操作系统,通常是服务器或者台式机,及安装在上面的Linux 较新操作系统。 不支持其它CPU架构如x86,arm等, 即不支持32位系统,树莓派,arm开发板, arm 手机等。
目前支持运行centos 4-7 版本,及Ubuntu 14.04, 使用g++ 4.8.2版本。 其它Linux及g++版本暂时未做测试,请自行尝试编译,如果有报错请反馈。
如果使用g++ 5.x以上版本编译,需要开启-D_GLIBCXX_USE_CX11ABI=0,SDK可以正常使用,但可能导致您自己的部分新特性的代码不能编译。
线程限制
SDK限制为10个识别线程,但可以跑多个进程。 注意申请应用默认的并发 一般是10,即不管跑多少个进程,全部进程的线程数之和不能超过10,否则会有鉴权错误。
输入音频流
输入音频流的音频格式为pcm, 单声道,16bits, 小端序。采样率16k。
实时传输的一个16k采样率的音频流需要32kb/s的网速,10个并发音频流需要320K/s ,请确保与百度服务器之间的网络稳定。
开启压缩传输后会降低传输的数据量,但是音频质量会有损失。
- 开启EVR_AUDIO_COMPRESSION_BV32有损压缩,压缩为原始大小的1/8;(默认,不推荐)
- 开启EVR_AUDIO_COMPRESSION_AMR有损压缩,压缩为原始大小的1/16;
输出
SDK 输出的结果为识别音频的文字。如果开始语义理解后,进一步在识别音频的文字的基础上可以获取简单的语义解析结果。复杂的语义解析及智能问答可以参见ai.baidu.com上文本处理类的接口。
耗时
如果您用的是实时音频,没有影响。如果您用的是录音文件,请sleep与原始音频相同的时间,否则结果无法预期。即从音频开始进行计算到获取最终结果,识别整体耗时都是略多于原始音频的时长。
测试SDK
如果您需要测试SDK,请至sample目录。
- sample/asr 目录下main.cpp 直接展示如何使用SDK, 运行build.sh 执行
- sample/asrDemo2, 对SDK做了进一步封装,简化调用。运行run/build.sh 执行。asrDemo2 同时也是Clion的项目,可以直接导入运行。
- sample/asrDemo-srt, 在asrDemo2,一个完整的添加视频文件字幕的程序,请读sample/asrDemo-srt/Readme.md文件后,再进行测试。
目录结构
BDSpeechSDK中包含extern, include, lib, sample, resources五个目录。 如果您需要测试SDK,请至sample目录。
- extern包含需要的第三方库和头文件
-
include包含需要引入的头文件
- BDSpeechSDK.hpp包含sdk可用接口
- BDSSDKMessage.hpp 包含给sdk发送的消息的结构定义
- ASR/bds_ASRDefines.hpp 包含sdk相关参数取值的定义,错误分类,对应错误码
- ASR/bds_asr_key_definitions.hpp 包含sdk相关参数的定义
- lib 包含需要引入的SDK库文件
- resources 包含sdk VAD 算法需要的模型文件
- sample 目录下有3个示例
g++ 安装
Centos 5 或 6 上如果没有g++程序,请按以下代码安装:
yum install gcc-c++
g++ --version
默认是 4.4.7 版本
升级至4.8.2
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum install devtoolset-2-gcc-c++ devtoolset-2-binutils devtoolset-2-build devtoolset-2-gdb devtoolset-2-libstdc++-devel devtoolset-2-runtime
如果网速过慢的话,可以手动下载 下面的rpm文件本地安装
devtoolset-2-binutils-2.23.52.0.1-10.el6.x86_64.rpm
devtoolset-2-build-2.1-4.el6.noarch.rpm
devtoolset-2-gcc-4.8.2-15.el6.x86_64.rpm
devtoolset-2-gcc-c++-4.8.2-15.el6.x86_64.rpm
devtoolset-2-gdb-7.6.1-47.el6.x86_64.rpm
devtoolset-2-libstdc++-devel-4.8.2-15.el6.x86_64.rpm
devtoolset-2-runtime-2.1-4.el6.noarch.rpm
# 如果网速过慢的话,可以手动下载上述rpm文件
# 链接:https://pan.baidu.com/s/1qZk6wVy 密码:zjew
# yum localinstall *.rpm
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
mv /usr/bin/g++ /usr/bin/g++-4.4.7
mv /usr/bin/c++ /usr/bin/c++-4.4.7
ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++
成功后:
[root@instance-ah3bznc6 root]# g++ --version
g++ (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
Copyright (C) 2013 Free Software Foundation, Inc.
功能简介
功能基本等同于Android iOS SDK的在线部分。BDSpeechSDK没有任何离线功能。
按步骤主要分为语音识别 及 语义理解。
- 在线语音识别: 将录音转为文字。目前在线识别支持普通话,英语,四川话及粤语
- 在线语义理解: 将语音识别出的文字,进行分词及找出意图。仅支持普通话
识别模型及语言
百度语音提供1种识别模型
- 输入法模型:效果同百度输入法的语音输入。适合于长句识别。
SDK 支持 普通话,英语,四川话及粤语
识别模型和输入法模型及语言由ASR_PARAM_KEY_PRODUCT_ID控制
静音断句及时长设置
SDK根据静音时长判断一句话有没有结束。SDK检测到静音时长超过这个时间后,就认为一句话结束,句子该切分了。
静音时长可以单独设置,建议值 200ms - 3000ms。参见ASR_PARAM_KEY_MAX_SPEECH_PAUSE参数
自定义词库
自定义词库适合短句,保证词库中一模一样的短句可以被识别出,词库中的分词优先级较高。 自定义词库仅对输入法模型生效。最好在1万行以内。
副作用:如果用户的测试集中包含大量非自定义词表的query,整体上准确率下降。
举例:
词库定义了1个短句: 1 . 摆渡船来了 百度内部处理的可能的分词结果: 摆渡船 来 了
以下录音的结果
- 原始音频:摆渡船来了 =>识别结果: 摆渡船来了 【保证结果】
- 原始音频:摆渡船来了么 =>识别结果: 百度传来了么 【可能结果,不保证】
- 原始音频:摆渡船来 => 识别结果: 百度传来 【可能结果,不保证】
- 原始音频:百度传来了喜讯 => 识别结果: 摆渡船来了喜讯 【不保证,词库内的分词优先级高】
##自训练平台模型 自训练平台可以认为是自定义词库的升级版本,可以更加直观地查看训练效果。同样使用您自定义的文本进行结果优化。 自训练平台只支持android ios 及linux C++ SDK, 不支持restapi及restapi相关sdk。
具体功能及使用说明请查看 “自训练平台手册”
自训练平台的模型(pid = 8001 8002),目前不支持在线语义功能。
自训练平台模型上线后,您会看见 第二步:获取专属模型参数pid:8001,modelid:1234”
,按照这个信息填写 PID=8001,LM_ID=1234