一、引言
小编所在项目中,C1、C1Pro、C1Max录音笔,通过BLE和APP连接,音频文件实时传输到录音助手App端,具备实时录音转写的功能。工欲善其事必先利其器,小编补习了语音识别相关基础知识,对所测试应用的实时转写业务逻辑有了更深的认识。希望对语音测试的小伙伴们也有所帮助~~(●—●)
二、语音识别基础概念
1、语音识别(Automatic Speech Recognition,ASR)
语音识别,也被称自动语音识别,所要解决的问题是让机器能够“听懂”人类的语音,将语音中包含的文字信息“提取”出来,相当于给机器安装上“耳朵”,使其具备“能听”的功能。
语音识别是一门涉及面很广的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论以及神经生物学等学科都有非常密切的关系。语音识别的目标是将人类的语音内容转换为相应的文字。
2、语音激活检测(voice active detection,VAD)
VAD也称为speech activity detection or speech detection, 是一项用于语音处理的技术,目的是检测语音信号是否存在。 VAD技术主要用于语音编码和语音识别。
通俗来讲,就是判断什么时候有语音什么时候没有语音(静音)。语音信号处理或是语音识别都是在VAD截取出来的有效语音片段上进行的。
3、语音唤醒(keyword spotting,简称 KWS ;或voice trigger,VT)
VT判断是唤醒(激活)词,那后续的语音就应该进行识别了;否则,不进行识别。语音唤醒的目的就是将设备从休眠状态激活至运行状态,所以唤醒词说出之后,能立刻被检测出来。
4、麦克风阵列(Microphone Array)
由一定数目的声学传感器(一般是麦克风)组成,用来对声场的空间特性进行采样并处理的系统。
能够解决的问题:噪声抑制、回声抑制、去混响、单或多声源定位、声源数目估计、源分离、鸡尾酒会效应。按麦克风个数分:单麦、双麦、多麦。
三、语音识别基本原理与识别流程
1、声波
声音实际上是一种波。常见的mp3等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件。wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。下图是一个波形的示例。
声音信号采集和播放经常使用的三个参数为采样频率(SampleRate)、采样位数(SampleSize)、声道数(ChannelCount)。
采样的数据速率就是指每秒所有声道采样数据的总量,计算公式为:
采样频率 * 采样位数 * 声道数 = 采样数据速率
2、语音识别基本流程
语音识别原理的4个基本流程:“输入——编码——解码——输出”
3、语音识别系统结构
语音识别系统本质上是一种模式识别系统,主要包括信号处理和特征提取、声学模型(AM)、语言模型(LM)和解码搜索四部分。
声学前端预处理
是指在特征提取之前,先对原始语音进行处理,部分消除噪声和不同说话人带来的影响,使处理后的信号更能反映语音的本质特征。最常用的前端处理有端点检测和语音增强。端点检测是指在语音信号中将语音和非语音信号时段区分开来,准确地确定出语音信号的起始点。经过端点检测后,后续处理就可以只对语音信号进行,这对提高模型的精确度和识别正确率有重要作用。语音增强的主要任务就是消除环境噪声对语音的影响。目前通用的方法是采用维纳滤波,该方法在噪声较大的情况下效果好于其它滤波器。
a)信号处理和特征提取:
以音频信号为输入,通过消除噪声和信道失真对语音进行增强,将信号从时域转化到频域,并为后面的声学模型提取合适的有代表性的特征向量。
b)声学模型:
将声学和发音学的知识进行整合,以特征提取部分生成的特征为输入,并为可变长特征序列生成声学模型分数。对应于语音到音节概率分布的计算。
语音识别,可分为“传统”识别方式与“端到端”识别方式,其主要差异就体现在声学模型上。“传统”方式的声学模型一般采用隐马尔可夫模型(HMM),而“端到端”方式一般采用深度神经网络(DNN)。
c)语言模型:
语言模型估计通过训练语料学习词与词之间的相互关系,来估计假设词序列的可能性,又叫语言模型分数。如果了解领域或相关的先验知识,语言模型的分数通常可以估计的更准确。对应于音节到字概率分布的计算。
d)解码搜索:
综合声学模型分数与语言模型分数的结果,将总体输出分数最高的词序列当做识别结果。
4、语音识别系统构建过程
1)训练:训练通常是离线完成的,对预先收集好的海量语音、语言数据库进行信号处理和知识挖掘,获取语音识别系统所需要的“声学模型”和“语言模型”
2)识别:识别过程通常是在线完成的,对用户实时的语音进行自动识别,识别过程通常又可以分为“前端”和“后端”两大模块。
A.前端:前端模块主要的作用是进行端点检测(去除多余的静音和非说话声)、降噪、特征提取等;
B.后端:后端模块的作用是利用训练好的“声学模型”和“语言模型”对用户说话的特征向量进行统计模式识别(又称“解码”),得到其包含的文字信息,此外,后端模块还存在一个“自适应”的反馈模块,可以对用户的语音进行自学习,从而对“声学模型”和“语音模型”进行必要的“校正”,进一步提高识别的准确率。
四、搜狗录音助手—连接硬件的实时语音识别
1、音频编码和解码
音频编码的目标就是尽可能压缩原始采样数据,节省带宽,方便文件存储和网络传输。音频编码大致可以分为两类:无损编码和有损编码。
第一类是无损编码,比如FLAC是一种对原始 PCM 进行无损压缩的编码库。无损编码的特点是信息解码后不会有任何的丢失,解码后每一比特都和原始采样数据一致。无损编码最大的特点是大,占用空间或带宽很多。
实际中使用最多的都是有损编码,一般是使用离散余弦变换等数学方法将信号从时域转换到频域,将人耳不敏感的频域部分信息过滤掉,然后进行编码。有损音频编码常见的有:MP3、WMA、AAC、Speex、Opus等。有损编码也都有相应的解码器,解码器就是将压缩后的数据在一定程度上还原为 PCM 数据,解码得到的 PCM 数据与原始采样数据是有差异的,这也是称之为有损编码的原因。
2、录音笔实时录音转写
(1). 录音笔多麦克风阵列收音(C1 Max为例),存储2种格式的音频文件:opus格式(用于传输,压缩格式,便于传输)、wav格式(用于听感);
(2). opus格式的音频文件,通过BLE协议,传输到App端;
(3). APP端的解码库对传输的opus音频文件进行无损解码,生成标准的PCM流;
(4). 语音SDK(前端库)将多声道的PCM流进行合并,合成为一声道的PCM;(多声道的pcm流过搜狗语音的阵列生成两路pcm,一路用于听感、一路用于识别,然后输出mp3)
(5). 语音识别SDK和知音平台服务端建立gPRC连接,获取PCM流文件的文字识别结果;
(6). 语音识别SDK通过回调,返回给native识别结果,native进行展示。
注:参考文章
https://zh.wikipedia.org/wiki/语音识别
https://zhuanlan.zhihu.com/p/22512377
https://zhuanlan.zhihu.com/p/105454729
http://blog.itpub.net/29829936/viewspace-2652896/