王 惠
(中国电影科学技术研究所,北京 100086)
近年来,随着国家文化产业政策的推动,全国电影市场蓬勃发展,电影的创作生产、影院建设和电影票房都迎来了难得的机遇期。电影是艺术与技术相结合的效果呈现,除去前期的艺术创作,一个完整的产业链和成功的影院市场才是决定了电影产业下游的关键生命力,因此,保持影院放映规范也是保证其持续健康发展的动力。但目前市场上存在一定的违法违规行为,包括影厅盗录盗放、偷漏瞒报票房等,严重干扰了影院市场秩序,也损害了电影声誉,造成恶劣影响。因此影院影厅的规范化管理已经成为亟待解决的问题。
目前针对规范电影放映的最有效方式便是加强放映内容的监管,在影片播放过程中采集声音、画面数据,分析并进行识别比对,以达到动态监测、控制放映内容的目的,从而形成放映监测机制。其中,声纹识别技术是近年发展起来的有效识别技术之一,通过收集影片的声音样本建库,并将采集的源头数据进行声纹匹配,可实现影片自动化识别。本文主要综述性介绍声纹识别的基本原理及关键技术,在电影放映领域的应用探索实验,以及后期的改进与优化,为电影放映市场的规范发展提供技术参考。
每个声音都具有独特性,声纹识别技术正是基于这一基础特征,通过不同的方法对一种或多种声音信号的特征进行对比分析,得到识别结果。声纹识别的样本信息一般是提取说话人的语音特征,并将其转化为声音信号的语谱图,以图像化的形式表示。一般用横轴代表时间,纵轴代表频率,同时用颜色来划分语音在各个频率点的幅值大小。说话人声音的基频与谐频用多条亮线来显示,然后通过采取不同的方法来对多个语谱图进行相似度对比分析,最终识别不同的语音特征。
图1 声音波形图及声音语谱图
声纹识别的最终目标是为了让机器能够准确地识别某一段语音,整个过程是一个典型的模式识别的框架,可以分为两大部分,特征提取和模式识别。
首先在进行操作之前需要目标用户提供一段训练语音,并将该语音经过质量检测、噪声消除等一系列的预处理操作之后,获得有效语音,开始进行特征参数的提取。特征提取的目的是从语音信号中除去冗余信息,将能唯一有效地表现说话人身份的基本特征提取出来,该特征需能够区分出不同的说话人,且在同一说话人在时间或者环境有所不同时,该特征仍具有相对稳定性,特征提取的过程本质上是一个筛选无效数据的过程。
接下来就是进行模型识别。将上一阶段获得的基本特征映射为用户的声纹模型,存入声纹模型数据库中。与此同时,另一部分为验证阶段,一段未知语音也会经过一系列操作后被定义为测试特征,然后用该测试特征与模型库中目标模型采用相关算法进行相似性匹配,得到匹配度,如果高于预期,则可认为该测试语音与目标语音身份匹配成功,通过验证,反之则失败。因此根据声纹识别的整个技术流程来看,语音选定、预处理操作、特征提取、建模、对比算法、结果分析等方面需要综合考虑,而其中最关键的技术则是特征提取和模式匹配,直接影响到系统的识别性能与辨识度。
图2 声纹识别流程示意图
声纹特征的生成算法目前主要有Echoprint、Chromaprint和Landmark,这三大类的本质都是语音特征参数提取,其涉及的主要技术有:短时过零、率基因周期、线性预测(LPC)、线性预测倒谱系数(LPCC)、Mel频率倒谱系数(MFCC),以及经过噪声谱减或者信道谱减的去噪倒谱系数等。在提取过程中,不同的特征参数都有对应的算法,需根据不同的语音信号特征选择合适的方法提取特征参数。在提取到合适的特征参数后进行识别,目前常用方法主要有以下几类:
(1)模板匹配方法:通常适用于与文本相关的任务,主要用于固定词组的应用,依靠动态时间弯折(DTW)以对准训练和测试特征序列。
(2)最近邻方法:在训练时保留所有的特征矢量、识别时在每个矢量附近找到若干个训练矢量,进行识别,但该方法通常模型存储和相似计算的量往往都很大。
(3)神经网络方法:有多层感知、径向基函数(RBF)等多种形式,虽可以显式训练来区分说话人和背景说话人,但训练量较大,模型的可推广性不好。
(4)隐式马尔科夫模型(HMM)方法:是目前比较流行的方法之一,通常采用单状态的HMM,或高斯混合模型(GMM),效果较好。
(5)VQ聚类方法(如LBG):该方法算法复杂度低,效果好,可与HMM方法配合以达到更好效果。
(6)多项式分类器方法:模型存储和计算量较大,但能得到较高的精度。
目前最常用的声纹提取算法就是shazam公司提出的Landmark指纹构造算法。Landmark是指突出的点或者区域,并承载着信号的关键信息,基于它是音频能量的极值,所以本身就有很强的抗噪能力,比较适合用来做音频检索,这也是很多特征提取和识别算法的思路。因此在探索实验中,我们也选择用该算法来构造声音指纹特征。
当获得声纹特征后,我们根据信息检索的原理进行检索,但在实际中,这样的检索方式性能较低,每一次遍历都将耗费大量时间。因此我们在试验过程中,采用了声音指纹特征点作为散列点储存的方法,该指纹特征除指纹信息外,包含标准样片ID、帧偏移量等,然后进行顺序识别。本文之后在算法探索中统一使用指纹来指代声纹特征点。该算法最终经过试验后,能够达到运行效率和准确程度的最优。
图3 Landmark算法的基本流程
按照Landmark算法的中心思想,首先对原始波形信号进行FFT快速傅里叶变换,将时域上的信息转变成一个个频域信息,在此我们需要在权衡精度和效率之后,选择合适帧位移为间隔,通常选在10ms~40ms之间,对原始信号进行预处理后,转换为三维频谱图,其中横坐标为时间,纵坐标为频率,高度坐标为能量。其次是从频谱图中提取一系列的能量极大值点(峰值点),选取Landmark的规则并不是固定的,通过调节条件参数,控制好合适的数量和单位密度,在给定的区域内进行筛选,选取最优点数。之后就是去掉原始的能量信息,保留提取极值点的X坐标和Y坐标,将一系列极大值坐标作为特征。但单单使用一个个单独的坐标作为指纹信息则过于简单,容易碰撞,使得后期匹配准确率低。Landmark指纹构造算法提供一种思路,通常可以将极值点两两组合,形成一个指纹特征点,减少检索的碰撞,提升性能。然后根据得到的指纹组合特征点的信息,生成哈希值。算法的基本流程如图3所示。
快速傅里叶变换是算法的预处理环节,傅里叶变换实质上是对多项式的系数表示和点值表示之间的转换,因此可将声音的模拟信号采集处理经过模数转换为数字信号。由于电影的音频时间通常在100分钟左右,按照普通参数标准则会耗费大量的运算量和运算时间,因此在原始波形进行分隔时,我们将帧位移选定约为100ms,控制单位时间内选取的点数。
对选定音频进行变换,离散傅里叶变换(DFT)的运算公式如下:
根据DFT的运算,对于X(k)的每个k值都需要进行4N次的实数相乘和(4N-2)次的相加,然后对于N个k值,一共需要4N*N次实数相乘和(4N-2)*N次实数相加。其算法时间复杂度是O(N*N)。利用DFT中W的周期性和对称性进行改进,将整个运算过程变成一系列迭代运算即FFT,减少乘法运算次数和计算量,时间复杂度为O(N),大幅度提高了运算效率。实验中傅里叶变换过程代码如图4所示。
图4 傅里叶变换过程代码
在完成变换后,得到转换后的三维频谱图,其中横坐标为时间,纵坐标为频率,高度坐标为能量;至此我们可以进行下一步操作,在频谱图中提取合适的能量极值点。
图5 FFT变换后的结果图
在得到FFT变换后的数据之后进行解析,可得到采样频率fs(Hz)、总采样数N,同时也输出N个double值D(N),即每个值为当前频点的幅值。通过计算可得到:
数组下标频率密度(每格的频率增量)= fs/N(Hz);
数组下标为i的频率值f(i)=i*(fs/N);
输入信号模的平均值为D[0]/N。
在探索中发现,要满足指纹的健壮性,则能量极值点的选取非常关键。经过多次试验分析,采用分段求峰值的方法,即从关键频率段中选择峰值点,既能提高运算速度,减小算法运算量,同时也能剔除不适用于构造指纹的特征点。
因此在实践应用中,依据人耳对声音的敏感性分布,将频率划分为以下区间:110~220Hz、220~440Hz、440~880Hz、880~1760Hz、1760~3520Hz,可采用公式f(i)=i*(fs/N),分别计算下标值区间,从而得出每个区间内采样点数进行统计,例如:N = 4096, fs = 44K(Hz)时,计算结果近似为:区间[10,19]共10个数值、区间[20,39]共20个数值、区间[40,79]共40个数值、区间[80,159]共80个数值、区间[160,319]共160个数值;最后在每个区间内求输出的最大值Max(D[i]);将每个区间的最大值作为能量峰值,提取峰值过程核心代码如图6所示。
图6 提取峰值过程核心代码
在频谱图中的能量极值点作为一个个分散的坐标,直接用于构造指纹会使得指纹信息量过大,检索碰撞较多,性能并不是很高,再加之单个指纹容易受到噪音影响,则会大大降低匹配成功率。采用Landmark组合的方式,比单个时频点的匹配性更高,检索碰撞也相应减少,大大提升性能和匹配准确率。因此根据Landmark指纹的构造算法中提供的思路,依据时间顺序,依次选择时频点(极大值坐标)作为基准点,对于每一个基准点,划定一个配对区域,然后分别和区域内的每个时频点两两组合,最终形成一个指纹特征点。
每个指纹点包括两个基准点与目标时频点的两个频率值和一个时间差,即当选取的基准点坐标为(t1,f1),区域内配对目标点坐标为(t2,f2),则该指纹属性包括(f1,f2,(t2-t1));此外还要加上基准点的时间t1,即指纹距离文件开头的绝对时间,作为附带属性,在本文中我们称之为帧偏移量。该属性在进行指纹匹配过程中将会用到。因此一个完整的指纹在采用哈希表建立时应包含如下所有特征点:
Hash:time = [f1:f2:(t2-t1)]:t1
生成HASH指纹的过程代码如图7所示。
图7 生成HASH指纹的过程代码
至此,提取指纹特征点成功,结果保存到fingerprintList结构中。但在实际入库过程中,由于电影音频文件巨大,包含信息过多,所以在实际构造过程中,只节选其中部分特征点,以减少数据量,提高运算效率。在后期的匹配算法中采取的顺序识别,所以指纹库的不完整性并不影响影片的识别成功率。
将获得的指纹特征点作为散列点进行储存,该指纹特征包含基础指纹信息、标准样片ID、帧偏移量等信息,然后进行影片库的入库建设,在本文的试验中,结合运算量、数据量综合考虑后只选用一部分特征点作为影片的指纹库,通过顺序对待识别的样片片段进行识别。虽然缺失部分片段,但最终的实验结果表示,所使用的匹配算法跨越了其缺失片段,且结果并不影响识别的成功率。
在匹配阶段,由于很短的样片片段就能提取出大量的指纹,可能会出现一个指纹在多部影片中出现的情况,当我们正常进行检索后,可以检索出来的匹配影片数量也会非常多。因此在指纹数据量很大的情况下,将所有指纹逐一匹配求取交集,试验结果几乎都是零。因此我们为每个指纹添加帧偏移量作为其附属的伴随信息,记录该指纹的出现时间,来扩充指纹特征点的内容,从而达到精确匹配的实验结果。
由于采集到的样片片段并不能确定是在什么位置,但假定待识别的样片是某影片的一部分,那当两者按时间顺序排列的指纹集也按时间对齐时,就会出现大量的指纹重合,其中每一组重合的指纹,其帧偏移量之差则会大量相等。这可以表明,该样片片段中的指纹在该影片中多次出现,且这些指纹之间的时间差或者相对位置特征一致,从而也证实了我们的假定。
该算法的具体过程如下:
(1)将待识别的样片分段生成指纹特征点,附带其每一帧的帧偏移量为伴随属性;
(2)对获得的指纹特征点作为散列点进行存储,建立其对应的散列表;
(3)将指纹特征中的指纹信息作为匹配关键字,在指纹库中逐一检索,得到所有匹配的特征点。
(4)记录所有匹配的特征点的帧偏移量,并计算其与待匹配指纹的帧偏移量之差;
图8 声纹匹配算法原理示意图
(5)最后将所有标准样片ID相同,帧偏移量之差相同,已匹配成功的特征点个数进行累加求和,累加值最大的标准样片ID即认为是匹配结果。过程示意图如图8所示。
相比较原始的关键信息直接匹配,加入帧偏移量作为伴随属性,利用相对时间来进行匹配,抛开了对样片片段起点的限制,使得匹配率大大提升。但在实验中受周围环境因素的影响,导致采集的样片片段中混有部分噪音信息,混杂着提取出无用指纹,影响影片的识别率,这将在后期的实验改进中继续探索有效的解决办法。
在声纹特征进行识别的过程中,还需要考虑很多问题,例如读取的语音过短,周围环境噪音的干扰,不同的麦克风和信道等,都影响着识别性能。因此结合之前结果,我们在之后考虑的主要方面是如何消除背景环境噪音对识别的干扰。
在多次实验后发现在环境非理想的情况下,可能会出现匹配度不够高的现象。对实验数据分析后发现,可能是由于不同的麦克风信道不同而导致录音失真,又或者是因为环境噪音增量过高导致。因此,在后期我们通过采用一定的噪声抑制技术来消除噪声对实验的干扰,同时对算法进行改进升级。
降噪主要是优化声学特征,让原本受噪干扰的音素落回到正确的音素类别,即降低原声音的CE量。但降噪和保证语音分量是个相互矛盾的问题,在弱噪环境下对纯净语音进行降噪处理,不可避免会对语音有所损伤。因此既要保证降噪做到很好的跟踪,又要保证语音分量不会被损伤,找到合适的度来跟踪降噪过程,平衡降噪与语音分量之间的平衡则是关键问题。经过思考我们尝试了维纳滤波降噪法。
维纳滤波器降噪即设计一个数字滤波器h(n),使得输入的带噪语音信号与纯净语音信号的误差满足LMS准则,当输入为y(n)时,滤波器输出得到结果,根据最小均方误差准则对结果进行计算得出极小值,经过一系列推导,得到维纳滤波器谱估计器:
根据维纳滤波器谱估计器进一步导出本帧的维纳滤波器传递函数Hi(k)。
得到关系函数后使用MATLAB数学软件进行仿真分析,得到频谱图。
通过仿真结果可以对比出该算法确实可以对原始音频进行有效的降噪。得到平滑的音频数据,但是这种降噪处理对波形本身就比较平滑的声音来说却是一场灾难,它会消灭原始音频的声纹特征并将其变成噪音。但是在实际过程中,电影的音频文件可能并不都是适合该算法的理想状况,某些电影的片段声纹就是平滑的波形,所以就可能出现语音文字丢失或者波形失真的情况,使得处理效果也随之变差,所以可以发现维纳滤波器降噪算法的降噪处理并不适用于电影识别中。因此在消除背景噪音的方法中,我们还在寻找更合适降噪的替代算法,以便在进行声纹识别前得到最优化的声学特征信息。
图9 仿真实验结果图
根据实验探索结果,采用基于Landmark构造指纹的声纹识别算法基本实现了电影样本声音识别的功能,并具有较高的识别率,能够为影院放映内容的监测提供有效思路。但整个识别过程还有提升空间,因此在实验后期,我们为提高识别率也进行了优化,尝试使用维纳滤波降噪原理来设计算法对采集的声音片段进行降噪处理,剔除无用指纹信息,以最大限度地减少采集环境中背景噪音的影响。该优化方向取得了一定效果,但在电影音频信息中不具有通用性,我们也会尝试其他的优化方向。此外在监测电影放映内容的整体思考中,我们还需更多考虑,或可采集画面数据,分析其放映质量与内容,选取有效识别算法,为单一的声纹识别做补充,从而形成更加严密的放映监测机制。