语音质量评估 Speech quality assessment 方法与代码编写

Posted 梁龙腾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语音质量评估 Speech quality assessment 方法与代码编写相关的知识,希望对你有一定的参考价值。

目前常用语音相对评估指标(参考)4个,绝对评估(无参考)指标3个。简述如下所示:**

相对指标:
1、pesq:共综合以下5个方面打分,分别为音频清晰度、音量、背景噪音音频中的可变延迟或滞后、丢失、音频干扰,PESQ 评分是从 -0.5 到 4.5 的分数,分数越高表示质量越好。可根据以下分数区间进行参考:
-0.5 – 1.99:语音质量极差,完全听不清楚语音的具体内容;
2.00 – 2.39 :语音质量很差,需要集中很多精神或注意力才能听清楚具体内容;
2.40 – 2.79 :语音质量较差,需要集中较多的精神或注意力才能听到具体内容;
2.80 – 3.29 :语音质量一般,仅需要稍微集中一下注意力就能听很清楚;
3.30 – 3.79 :语音质量较好,无需集中注意力就可听的很清楚;
3.80 – 4.50 :语音质量极佳,放松简单的就可以听清楚说话内容;

2、stoi:短时客观可懂度,反映人类的听觉感知系统对语音可懂度的客观评价,STOI 值介于0~1 之间,值越大代表语音可懂度越高,越清晰。

3、bsseval:盲源分离指标,用于测试盲源分离的性能指标;

4、sisdr:标度不变源失真比,用于测试盲源分离,值越高越好。越高代表语音干扰越小、失真越小。

绝对指标(无参考):
1、nisq:基于深度学习绝对评价指标,只需入音频。其输出结果共有五个维度,共同评价语音质量:

维度1:mos_pred :语音质量指标,越高音质越好
维度2:noi_pred :噪声等级指标,越高代表噪声越小
维度3:dis_pred :语音连贯性指标,越高代表语音连贯性越好
维度4:col_pred :音色指标,越高越好听
维度5:loud_pred :语音响度指标,越高代表音量更响亮

2、mosnet:深度学习mos评分;

3、srmr:语音混响调制能量比,分数越高,混响越小,越清晰;

用法
(相对pesq、stoi、bsseval、sisdr)
备注:pesq、stoi客观指标测试,其输入的参考音频与测试音频长度必须相等;
pesq:
Windows 环境下需先安装pycharm 。 安装pypesq 库,方法:
安装方法:打开pycharm,点击Terminal,输入
$ git clone https://github.com/ludlows/python-pesq.git
$ cd python-pesq
$ pip install . # for python 2
$ pip3 install . # for python 3
$ cd …
$ rm -rf python-pesq # remove the code folder since it exists in the python package folder

程序编写可参考如下:
使用方法:
import soundfile as sf
from pypesq import pesq
path_ref = ‘gongwei_mic_mono.wav’ //参考语音
path_gen = ‘gongwei_mic_mono.wav’ //测试语音
ref,samplerate = sf.read(path_ref)
gen,samplerate = sf.read(path_gen)
peaq_score = pesq(ref ,gen ,samplerate)
print('peaq_score = ',peaq_score )

stoi:
Windows 环境下需先安装pycharm 。然后 安装stoi库,pip install pystoi ;
安装方法:打开pycharm,点击Terminal,然后输入pip install pystoi即可,具体与上步骤相似,等待安装成功;

使用方法:
程序编写可参考如下:
import soundfile as sf
from pystoi import stoi
clean, fs = sf.read(‘gongwei_mic_mono.wav’) //参考语音
denoised, fs = sf.read(‘gongwei_mic_mono.wav’) //测试语音
stoi_score = stoi(clean, denoised, fs, extended=False)
print('stoi = ’ ,stoi_score)

bsseval、sisdr:
pip install numpy
pip install git+https://github.com/aliutkus/speechmetrics#egg=speechmetrics[cpu]
完成后输入以下脚本:
import speechmetrics window_length = 15 # seconds
path_to_estimate_file = ‘test.wav’ #test audio path
path_to_reference = ‘reference.wav’ #reference audio path
metrics = speechmetrics.load([‘bsseval’, ‘sisdr’], window_length) scores = metrics(path_to_estimate_file, path_to_reference)
print(scores)

(绝对 NISQ、MOSNET、SRMR)
NISQ为基于深度学习绝对评价指标,只需入音频。其输出结果共有五个维度,共同评价语音质量:(网站: gabrielmittag/NISQA: NISQA - Non-Intrusive Speech Quality and TTS Naturalness Assessment (github.com))
维度1:mos_pred :语音质量指标,越高音质越好
维度2:noi_pred :噪声等级指标,越高代表噪声越小
维度3:dis_pred :语音连贯性指标,越高代表语音连贯性越好
维度4:col_pred :音色指标,越高越好听
维度5:loud_pred :语音响度指标,越高代表音量更响亮

使用方法:
在终端执行以下命令:
1、git clone https://github.com/gabrielmittag/NISQA.git
2、conda env create -f env.yml
3、conda activate nisqa
4、创建输出文件的文件夹(输出文件为积分记录表),如输出文件夹在outputfile,就创建一个名为outputfile的文件夹;
5、在步骤4所创建的文件夹中,创建NISQA_outputfile.csv;
6、执行 python run_predict.py --mode predict_file --pretrained_model weights/nisqa.tar --deg test.wav --output_dir outputfile
predict_file:模式选择为推理模式,默认不用改;
weights/nisqa.tar:为推理时所用到的模型,默认不用改;
test.wav:需要评估的音频;
outputfile:音频评估分数表输出目录
结果图例:

MOSNET、SRMR

pip install numpy
pip install git+https://github.com/aliutkus/speechmetrics#egg=speechmetrics[cpu]
完成后输入以下脚本:
import speechmetrics
window_length = 20# seconds
reference = ‘test.wav’ #audio path
metrics = speechmetrics.load(‘absolute’, window_length)
scores = metrics(reference)
print(scores)
或直接使用以下脚本;

结果图例:

音视频专题音频质量评估方法那些事

今天参加了声网 Agora 的《实时语音质量监控系统的过去、现在与未来》,结合之前工作时音频处理的一些经验,分享一些自己的理解。

音频(泛指人能听到的自然界的所有声音,人耳能听到声音的频谱范围一般为 20~20000HZ)和语音 (语音是指人说话的声音,人说话的声音频谱能量范围大部分分布在 300~3400HZ)两者是不同的,可以看出人是可以听到比人说话更广范围的声音的;这就是人可以听到像乐器,自然界,尖鸣声这些声音,但是人并不能发出来。

为什么要做质量评估,原因有几个方面,比如大家除了面对面交流,在通话,刷视频,听音乐等等活动中的音频是经过了编解码压缩处理的,是为了便于更小代价的传输和存储;像原始声音中掺杂噪声的去除,原始说话声音的增强处理等;可以看出不管是编解码处理还是其他语音处理,目的都是让人听起来更舒服,因此质量评估方法就是评估在对于声音进行处理后的人听起来的感受度情况。

音频评估方法分为主观评价和客观评价。

主观评价其实就是人凭借听觉感受对语音进行打分,常见的有 MOS、CMOS 和 ABX Test;像 AB TEST 在我早期的工作中经常使用到,比如对语音增强算法做了小的优化,想得到实际听觉的感受改善情况,就会把原始算法和优化后算法处理后的语音进行编组,让小伙伴们帮忙测试打分,以此判断是变优还是变差。国际电信联盟(ITU)将语音质量的主观评价方法做了标准化处理,代号为 ITU-T P.800.1。其中收听质量的绝对等级评分(Absolute Category Rating, ACR) 是目前比较广泛采用的一种主观评价方法。参与评测的人员对语音整体质量进行打分,分值范围为 1-5 分,分数越大表示语音质量最好。这种 MOS 值分数后来也应用于客观质量评价。一般 MOS 应为 4 或者更高的,会被认为是比较好的语音质量,一旦 MOS 低于 3.6,则这个语音质量基本不太能接受。

客观评价则主要是使用算法代替人打分的工作,通过算法来评测声音的质量。在客观评价中又分为有参考评价和无参考评价。

  • 有参考评价(intrusive method)顾名思义,需要声音源素材进行对比,因此这种方法只能用在线下处理上,对于实时通话处理是不可能做到的;常见的有像 ITU-T P.861(MNB), ITU-T P.862(PESQ)[2], ITU-T P.863(POLQA)[3], STOI[4], BSSEval[5],
  • 无参考评价(non intrusive method)则不需要声音源素材,常见的有 ITU-T P.563[6], ANIQUE+[7],ITU-T G.107(E-Model)[8],基于 AI 深度学习的 AutoMOS[9], QualityNet[10], NISQA[11], MOSNet[12]等等

下面表中为主流语音编解码 MOS 值测试评分(来自 Opus 官网,后来又出来了 MOS9,即最高分为 9 分

这里重点介绍下 PESQ 和 POLQA

PESQ 属于有参考的客观评价方案,将两个音频信号作为输入,其中一个由 itu 组织提供,另一个输入为经过被测 voip 系统处理后的输出信号。Pesq 算法通过对输入的两个信号提取时频域或变换域特征参数的差异,再将特征参数差异经神经网络模型映射得到客观的音质分值。PESQ 分值其实就是对 MOS 值的一个映射。

POLQA 算法是新一代语音质量评估标准,适用于固网、移动通信网络和 IP 网 络 中 的 语 音 质 量 评 估 。 POLQA 被 ITU-T(International Telecommunication Union)确定为推荐规范 P.863,可用于高清语音、 3G、4G/VoLTE、5G 网络语音质量评估。它用以替代和升级 2001 年发布的 PESQ(ITU-TRecommendation P.862)

与传统 pesq 的区别在于,POLQA 算法具有以下优点:

  • 增加对宽带(Wideband)和超宽(SuperWideband)语音质量评估的能力,支持宽带(48khz)。
  • 支持最新的语音编码和 VoIP 传输技术,针对现有的 opus、silk 编码器进行过特殊优化。
  • 支持多语言环境,各国语言都支持。ITU 组织提供标准测试语料,可进行针对性测试。

当然音频质量评估不只是评估编解码,同样还有其他因素会影响,像 VAD 传输,丢包补偿,网络质量变化(时延/抖动/丢包),甚至包括设备采集。

像上述的无论有参考和无参考,都有其应用的局限性,包括使用场景比较窄,鲁棒性差,复杂度高等问题,而要克服上述的问题,就需要一套覆盖多场景,性能运行几乎无感知的质量评估算法及体系,因此声网自行开发了一套独有的音频质量评估手段。包括上行质量评估和下行质量评估。

上行链路声音经历采集-AEC(回声消除)-NS(噪声抑制)-AGC(增益)处理过程,因此质量评估包含了设备采集稳定性/回声消除能力/噪声抑制能力/音量增益能力的处理效果。

下行链路则主要是通过设备播放给人听,经过编解码-网络传输-弱网对抗(我理解是 VAD/PLC/纠错等处理)-设备播放,最终多弱网,多设备,多模式测试下,其算法与 POLQA 误差值小于 0.15,可以说是达到了不错的效果。

关于音频质量评估,个人认为后续会按照更细化的领域方向发展,包含元素的不同,比如语音评估和音乐评估应该是属于不同的;包含场景的不同,比如实时在线处理和线下评估,实时处理需要高实时性,性能消耗小;而线下评估不需要这么高的要求,对于精准度则要求更高,则可以更多的利用 AI 人工智能的优势以及算法系统上的优化。

以上是关于语音质量评估 Speech quality assessment 方法与代码编写的主要内容,如果未能解决你的问题,请参考以下文章

语音质量评估

Xamarin 上的 Bing Speech API/语音服务(无 REST,sdk websocket 来处理连续识别)

从零开始玩人工智能—语音API-03

Structural Features for Predicting the Linguistic Quality of Text: Applications to Machine Translati

实时语音质量监控

Paper | Making a "Completely Blind" Image Quality Analyzer