资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

简介

概述

本文档是百度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 . 摆渡船来了 百度内部处理的可能的分词结果: 摆渡船 来 了

以下录音的结果

  1. 原始音频:摆渡船来了 =>识别结果: 摆渡船来了 【保证结果】
  2. 原始音频:摆渡船来了么 =>识别结果: 百度传来了么 【可能结果,不保证】
  3. 原始音频:摆渡船来 => 识别结果: 百度传来 【可能结果,不保证】
  4. 原始音频:百度传来了喜讯 => 识别结果: 摆渡船来了喜讯 【不保证,词库内的分词优先级高】

##自训练平台模型 自训练平台可以认为是自定义词库的升级版本,可以更加直观地查看训练效果。同样使用您自定义的文本进行结果优化。 自训练平台只支持android ios 及linux C++ SDK, 不支持restapi及restapi相关sdk。

具体功能及使用说明请查看 “自训练平台手册

自训练平台的模型(pid = 8001 8002),目前不支持在线语义功能。

自训练平台模型上线后,您会看见 第二步:获取专属模型参数pid:8001,modelid:1234”,按照这个信息填写 PID=8001,LM_ID=1234